《数据结构与算法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)
#!/usr/bib/env python
# -*- coding:utf-8 -*- """
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)
""" class Rational(object):
__slots__ = ('_num', '_den') @staticmethod
def _gcd(m,n):
while 1:
temp = n % m
if temp == 0:
return m
else:
n = m
m = temp def __init__(self, num, den=1):
if not isinstance(num, int) or not isinstance(num, int):
raise TypeError
if den == 0:
raise ZeroDivisionError
sign = 1
if num < 0:
num, sign = -num, -sign
if den < 0:
den, sign = -den, -sign
g = Rational._gcd(num, den)
self._num = sign*(num//g)
self._den = den//g #float
x = self._num / self._den
self._num = x.as_integer_ratio()[0]
self._den = x.as_integer_ratio()[1] def __add__(self, other):
den = self._den * other._den
num = self._den * other._num + self._num * other._den
return Rational(num, den) def __sub__(self, other):
den = self._den * other._den
num = self._num * other._den - self._den * other._num
return Rational(num, den) def __mul__(self, other):
den = self._den * other._den
num = self._num * other._num
return Rational(num, den) def __floordiv__(self, other):
den = self._den * other._num
num = self._num * other._den
return Rational(num, den) def __int__(self):
return self._num // self._den def __float__(self):
return self._num / self._den def __eq__(self, other):
return self._num * other._den == self._den * other._num def __ne__(self, other):
return self._num * other._den != self._den * other._num def __lt__(self, other):
return self._num * other._den < self._den * other._num def __le__(self, other):
return self._num * other._den <= self._den * other._num def __gt__(self, other):
return self._num * other._den > self._den * other._num def __ge__(self, other):
return self._num * other._den >= self._den * other._num def __str__(self):
return str(self._num) + "/" + str(self._den) def print(self):
print(self._num, "/", self._den) def num(self):
return self._num
def den(self):
return self._den if __name__ == '__main__':
a = Rational(10,5)
b = Rational(1,1000000)
print(a)
print(b)
print("==")
print(a+b)
print(a!=b)
print(int(a))
print(int(b))
《数据结构与算法Python语言描述》习题第二章第三题(python版)的更多相关文章
- 【数据结构与算法分析——C语言描述】第二章总结 算法分析
算法 算法(algorithm)是为求解一个问题需要遵循的.被清楚地指定的简单指令的集合. 数学基础 四个定义: 1.大O表示法: 如果存在正常数 c 和 n0 使得当 N ≥ n0时,T(N) ≤ ...
- 运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程,把获取的信息存入数据库
运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程 有关前两篇的链接: 运用Python语言编写获取Linux基本系统信息(一):获得Linux版本.内核.当前时间 运 ...
- 检索算法 -- 数据结构与算法的javascript描述 第13章
检索算法-如何在列表中查找特定的值. 顺序查找 从列表的第一个元素开始对列表元素逐个进行判断,直到找到了想要的结果,它属于暴力查找技巧的一种,在执行查找时可能会访问到数据结构里的所有元素. 代码: / ...
- 排序算法 -- 数据结构与算法的javascript描述 第12章
排序是常见的功能,给定一组数据,对其进行排序. 在此之前,我们需要准备个基础工作--自动生成数组,并可以对该组数据做任何处理. /** * 测试类 ,数组 * @param numElements * ...
- 【数据结构与算法分析——C语言描述】第一章总结 引论
这一章主要复习了一些数学知识,像指数.对数.模运算.级数公式:还有2种证明方法,归纳假设法和反证法.所幸以前学过,重新拾捡起来也比较轻松. 简要地复习了递归,提出了编写递归例程的四条基本法则: 基准情 ...
- python核心编程-习题-第二章
PS:PDF在线地址:http://bcmi.sjtu.edu.cn/~zhaohai/ptm2012/data/Python-kernel.programming.v2.pdf 2-1 变量,pr ...
- 字典 -- 数据结构与算法的javascript描述 第七章
字典 字典是一种以键-值对形式存储数据的数据结构 最基本功能规划 add 添加数据到字典 remove 从字典中移除数据 get 从字典中取出数据 count 统计字典数据量 find 查找数据在字典 ...
- 链表的实现 -- 数据结构与算法的javascript描述 第六章
链表 链表是由一组节点组成的集合.每个节点都使用一个对象的引用指向它的后继.指向另一个节点的引用叫做链 结构示意图 : 链表头需要我们标识 head { element:head,next:obj1 ...
- 队列的实现 -- 数据结构与算法的javascript描述 第五章
队列也是列表的一种,有不同于列表的规则. 先进先出 入队方法 出队方法 可以找到队首 可以找到队尾 可以查看队列有多长 可以查看队列是否为空 这是一个基本的需求,围绕他来实现,当然我们可以自己扩展列表 ...
随机推荐
- 2013 duilib入门简明教程 -- FAQ (19)
虽然前面的教程几乎把所有的知识点都罗列了,但是有很多问题经常在群里出现,所以这里再次整理一下. 需要注意的是,在下面的问题中,除了加上XML属性外,主窗口必须继承自WindowImpl ...
- Atitit 动态调用webservice与客户端代理方式调用
Atitit 动态调用webservice与客户端代理方式调用 方式1: 使用call.invoke 直接调用WSDL,缺点:麻烦,不推荐--特别是JAVA调用.NET的WS时,会有不少的问题需要解 ...
- 考勤系统——代码分析datagrid
datagrid是easyui的控件,DataGrid以表格形式展示数据,并提供了丰富的选择.排序.分组和编辑数据的功能支持.DataGrid的设计用于缩短开发时间,并且使开发人员不需要具备特定的知识 ...
- fir.im Weekly - 如何进行 Android App 性能优化
关于 Android App 的优化,@anly-jun 用 3 个月完成了这一系列文章,从 性能分析工具 到 ANR .Layout .消除卡顿 到 内存优化.内存分析工具大概十五六篇,并对此做一个 ...
- sizzle分析记录:词法分析器(tokenize)
词法分析器(tokenize)? 词法分析器又称扫描器.词法分析是指将我们编写的文本代码流解析为一个一个的记号,分析得到的记号以供后续语法分析使用. sizzle引入了tokenize这个概念,意义? ...
- SQL 截取字符串
以下代码演示的是除去字符串后四位 ,) 下面是SUBSTRING的解释 SUBSTRING ( expression ,start , length ) 第一个参数是字符串,第二个是起始位置,第三个是 ...
- node-mysql 在4.2.0的时候遇到的错误
实际上这个问题折腾了几天.前一阵因为升级到了最新的4.2.0,发现mysql的应用就出错了,错误消息也比较奇怪 Handshake Inactivity Timeout - PROTOCOL_SEQU ...
- C# 保护Excel文档
C# 保护Excel文档 说到保护excel文档,我们首先想到的是密码保护的方式,但excel与word有点不一样,一般情况下,每个excel工作薄都或多或少地含有一定数量的工作表,因此保护excel ...
- Oracle在线重定义DBMS_REDEFINITION 普通表—>分区表
实验环境:RHEL 6.4 + Oracle 11.2.0.3实验:在线重定义 普通表 为 分区表,包括主键对应的索引都改造为分区索引. 1,构造普通表t_objects conn test1/tes ...
- 1Z0-053 争议题目解析24
1Z0-053 争议题目解析24 考试科目:1Z0-053 题库版本:V13.02 题库中原题为: 24.Which of the following information will be gath ...