| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- """
- 运算符重载 - 自定义分数类
- Version: 0.1
- Author: 骆昊
- Date: 2018-03-12
- """
- from math import gcd
- class Rational(object):
- def __init__(self, num, den=1):
- if den == 0:
- raise ValueError('分母不能为0')
- self._num = num
- self._den = den
- self.normalize()
- def simplify(self):
- x = abs(self._num)
- y = abs(self._den)
- factor = gcd(x, y)
- if factor > 1:
- self._num //= factor
- self._den //= factor
- return self
- def normalize(self):
- if self._den < 0:
- self._den = -self._den
- self._num = -self._num
- return self
- def __add__(self, other):
- new_num = self._num * other._den + other._num * self._den
- new_den = self._den * other._den
- return Rational(new_num, new_den).simplify().normalize()
- def __sub__(self, other):
- new_num = self._num * other._den - other._num * self._den
- new_den = self._den * other._den
- return Rational(new_num, new_den).simplify().normalize()
- def __mul__(self, other):
- new_num = self._num * other._num
- new_den = self._den * other._den
- return Rational(new_num, new_den).simplify().normalize()
- def __truediv__(self, other):
- new_num = self._num * other._den
- new_den = self._den * other._num
- return Rational(new_num, new_den).simplify().normalize()
- def __str__(self):
- if self._num == 0:
- return '0'
- elif self._den == 1:
- return str(self._num)
- else:
- return '(%d/%d)' % (self._num, self._den)
- if __name__ == '__main__':
- r1 = Rational(2, 3)
- print(r1)
- r2 = Rational(6, -8)
- print(r2)
- print(r2.simplify())
- print('%s + %s = %s' % (r1, r2, r1 + r2))
- print('%s - %s = %s' % (r1, r2, r1 - r2))
- print('%s * %s = %s' % (r1, r2, r1 * r2))
- print('%s / %s = %s' % (r1, r2, r1 / r2))
|