class Rational(object): def __init__(self, p, q): self.p = p self.q = q def gcd(p,q): if q==0: return p return gcd(q,p%q) self.r=gcd(p,q) #这里为什么要赋值给self.r??为什么赋值给g,或者a之类的不行?这怎么解释??? def __add__(self, r): return Rational(self.p * r.q + self.q * r.p, self.q * r.q) def __sub__(self, r): return Rational(self.p*r.q-r.p*self.q,self.q*r.q) def __mul__(self, r): return Rational(self.p*r.p,self.q*r.q) def __div__(self, r): return Rational(self.p*r.q,self.q*r.p) def __str__(self): return '%s/%s'%(self.p/self.r,self.q/self.r) __repr__ = __str__ r1 = Rational(1, 2) r2 = Rational(1, 4) print r1 + r2 print r1 - r2 print r1 * r2 print r1 / r2
这道题,print出来很正常
但是我突然想到一个问题,假如带入的是r1 = Rational(120,1)
r2 = Rational(45,1),按照gcd()可得-->gcd(120,45)-->gcd(45,120%45)-->gcd(45,30)。到这里,问题来了,最大公约数30,那么带入结果120/45,分子分母同时除以30!!好家伙!!等于4/1.5,除非是可以继续循环的,一直到15为止!
再来r1 = Rational(6,1)
r2 = Rational(16,1),按照gcd()可得-->gcd(6,16)-->gcd(16,6%16)-->gcd(16,0),即最大公约数等于6,这tm不是打脸吗!!!???小白求大神鞭挞!!!
python业余爱好者
相关分类