分数演算
python 2.6からfractionというモジュールが含まれています。
python 2.5はこのモジュールで遊んでみてもいいです。
http://svn.python.org/view/python/branches/release25-maint/Demo/classes/Rat.py?view=markup&pathrev=51333
小数化のスコアをサポートします。
例:eval:F(2.8,22)
出力結果は7/55です
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です