ADT Rational: #定义有理数的抽象数据类型 Rational(self, int num, int den) #构造有理数num/den +(self, Rational r2) #求出本对象加r2的结果 -(self, Rational r2) #求出本对象减r2的结果 *(self, Rational r2) #求出本对象乘以r2的结果 /(self, Rational r2) #求出本对象除以r2的结果 num(self) #取出本对象的分子 den(self) #取出本对象的分母 int(self) #取整 float(self) #取浮点数 ==(self,Rational r2) !=(self,Rational r2) >(self,Rational r2) <(self,Rational r2) >=(self,Rational r2) >=(self,Rational r2)
1 #!/usr/bib/env python 2 # -*- coding:utf-8 -*- 3 4 """ 5 ADT Rational: #定义有理数的抽象数据类型 6 Rational(self, int num, int den) #构造有理数num/den 7 +(self, Rational r2) #求出本对象加r2的结果 8 -(self, Rational r2) #求出本对象减r2的结果 9 *(self, Rational r2) #求出本对象乘以r2的结果 10 /(self, Rational r2) #求出本对象除以r2的结果 11 num(self) #取出本对象的分子 12 den(self) #取出本对象的分母 13 int(self) #取整 14 float(self) #取浮点数 15 ==(self,Rational r2) 16 !=(self,Rational r2) 17 >(self,Rational r2) 18 <(self,Rational r2) 19 >=(self,Rational r2) 20 >=(self,Rational r2) 21 """ 22 23 class Rational(object): 24 __slots__ = (‘_num‘, ‘_den‘) 25 26 @staticmethod 27 def _gcd(m,n): 28 while 1: 29 temp = n % m 30 if temp == 0: 31 return m 32 else: 33 n = m 34 m = temp 35 36 def __init__(self, num, den=1): 37 if not isinstance(num, int) or not isinstance(num, int): 38 raise TypeError 39 if den == 0: 40 raise ZeroDivisionError 41 sign = 1 42 if num < 0: 43 num, sign = -num, -sign 44 if den < 0: 45 den, sign = -den, -sign 46 g = Rational._gcd(num, den) 47 self._num = sign*(num//g) 48 self._den = den//g 49 50 #float 51 x = self._num / self._den 52 self._num = x.as_integer_ratio()[0] 53 self._den = x.as_integer_ratio()[1] 54 55 def __add__(self, other): 56 den = self._den * other._den 57 num = self._den * other._num + self._num * other._den 58 return Rational(num, den) 59 60 def __sub__(self, other): 61 den = self._den * other._den 62 num = self._num * other._den - self._den * other._num 63 return Rational(num, den) 64 65 def __mul__(self, other): 66 den = self._den * other._den 67 num = self._num * other._num 68 return Rational(num, den) 69 70 def __floordiv__(self, other): 71 den = self._den * other._num 72 num = self._num * other._den 73 return Rational(num, den) 74 75 def __int__(self): 76 return self._num // self._den 77 78 def __float__(self): 79 return self._num / self._den 80 81 def __eq__(self, other): 82 return self._num * other._den == self._den * other._num 83 84 def __ne__(self, other): 85 return self._num * other._den != self._den * other._num 86 87 def __lt__(self, other): 88 return self._num * other._den < self._den * other._num 89 90 def __le__(self, other): 91 return self._num * other._den <= self._den * other._num 92 93 def __gt__(self, other): 94 return self._num * other._den > self._den * other._num 95 96 def __ge__(self, other): 97 return self._num * other._den >= self._den * other._num 98 99 100 def __str__(self): 101 return str(self._num) + "/" + str(self._den) 102 103 def print(self): 104 print(self._num, "/", self._den) 105 106 def num(self): 107 return self._num 108 def den(self): 109 return self._den 110 111 if __name__ == ‘__main__‘: 112 a = Rational(10,5) 113 b = Rational(1,1000000) 114 print(a) 115 print(b) 116 print("==") 117 print(a+b) 118 print(a!=b) 119 print(int(a)) 120 print(int(b))
时间: 2024-10-14 06:48:36