python进阶五(定制类)【5-4 python中数学运算】

python中数学运算

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

 

 

posted on 2019-10-06 11:02  ucas_python  阅读(372)  评论(0编辑  收藏  举报