Python 提供的基本数据类型 int、float 可以做整数和浮点的四则运算以及乘方等运算。
但是,四则运算不局限于int和float,还可以是有理数、矩阵等。
要表示有理数,可以用一个Rational类来表示:
1 class Rational(object): 2 def __init__(self, p, q): 3 self.p = p 4 self.q = q
p、q 都是整数,表示有理数 p/q。
如果要让Rational进行+运算,需要正确实现__add__:
1 class Rational(object): 2 def __init__(self, p, q): 3 self.p = p 4 self.q = q 5 def __add__(self, r): 6 return Rational(self.p * r.q + self.q * r.p, self.q * r.q) 7 def __str__(self): 8 return ‘%s/%s‘ % (self.p, self.q) 9 __repr__ = __str__
现在可以试试有理数加法:
>>> r1 = Rational(1, 3) >>> r2 = Rational(1, 2) >>> print r1 + r2 5/6
Rational类虽然可以做加法,但无法做减法、乘方和除法,请继续完善Rational类,实现四则运算。
提示:
减法运算:__sub__
乘法运算:__mul__
除法运算:__div__
1 def gcd(a, b):
#设两数为a、b(a>b),求a和b最大公约数(a,b)的步骤如#下:用a除以b,得a÷b=q.....r1(0≤r1)。若r1=0,则(a,b)=b;
#若#r1≠0,则再用b除以r1,得b÷r1=q.......r2 (0≤r2).若r2=0,则(a,#b)=r1,若r2≠0,
#则继续用r1除以r2,如此下去,直到能整除为止。其最#后一个为被除数的余数的除数即为(a, b)。 2 3 #例如:a=25,b=15,a%b=10,b%10=5,10%5=0,最后一个为被除数余#数的除数就是5,5就是所求最大公约数。 4 if b == 0: 5 return a 6 return gcd(b, a % b) 7 8 class Rational(object): 9 def __init__(self, p, q): 10 self.p = p 11 self.q = q 12 def __add__(self, r): 13 return Rational(self.p * r.q + self.q * r.p, self.q * r.q) 14 def __sub__(self, r): 15 return Rational(self.p * r.q - self.q * r.p, self.q * r.q) 16 def __mul__(self, r): 17 return Rational(self.p * r.p, self.q * r.q) 18 def __div__(self, r): 19 return Rational(self.p * r.q, self.q * r.p) 20 def __str__(self): 21 g = gcd(self.p, self.q)#g是最大公约数 22 return ‘%s/%s‘ % (self.p / g, self.q / g) 23 __repr__ = __str__ 24 25 r1 = Rational(1, 2) 26 r2 = Rational(1, 4) 27 print r1 + r2 28 print r1 - r2 29 print r1 * r2 30 print r1 / r2
python进阶五(定制类)【5-4 python中数学运算】
原文:https://www.cnblogs.com/ucasljq/p/11626750.html