首页 > 代码库 > 《数据结构与算法Python语言描述》习题第二章第三题(python版)
《数据结构与算法Python语言描述》习题第二章第三题(python版)
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))
《数据结构与算法Python语言描述》习题第二章第三题(python版)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。