分数演算


python 2.6からfractionというモジュールが含まれています。
python 2.5はこのモジュールで遊んでみてもいいです。
http://svn.python.org/view/python/branches/release25-maint/Demo/classes/Rat.py?view=markup&pathrev=51333

#
gcd=lambda a,b:a if b==0 else gcd(b,a%b)
class F:
        def __init__(self,fenzi,fenmu=1):
              while fenzi!=int(fenzi) or fenmu!=int(fenmu) : fenzi*=10;fenmu*=10
              g=gcd(fenzi,fenmu)
              self.fenzi=int(fenzi//g)
              self.fenmu=int(fenmu//g)
        def __str__(self):
              return str(self.fenzi)+'/'+str(self.fenmu)
        
        def __add__(self,other):
              fenzi=self.fenzi*other.fenmu+other.fenzi*self.fenmu
              fenmu=self.fenmu*other.fenmu
              g=gcd(fenzi,fenmu)
              return F(fenzi//g,fenmu//g)
        def __neg__(self):
               return F(-self.fenzi,self.fenmu)
        def __sub__(self,other):
               return self+(-other)
        def __mul__(self,other):
               fenzi=self.fenzi*other.fenzi
               fenmu=self.fenmu*other.fenmu
               g=gcd(fenzi,fenmu)
               return F(fenzi//g,fenmu//g)
        def __invert__(self):
               return F(self.fenmu,self.fenzi)
        def __div__(self,other):
               return self*(~other)

while True:print eval(raw_input('eval:'))
サポートポイントのプラス(+)はマイナス(-)に(*)を加え、カウントダウン(~)をとります。
小数化のスコアをサポートします。
例:eval:F(2.8,22)
出力結果は7/55です