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版)的更多相关文章

  1. 【数据结构与算法分析——C语言描述】第二章总结 算法分析

    算法 算法(algorithm)是为求解一个问题需要遵循的.被清楚地指定的简单指令的集合. 数学基础 四个定义: 1.大O表示法: 如果存在正常数 c 和 n0 使得当 N ≥ n0时,T(N) ≤ ...

  2. 运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程,把获取的信息存入数据库

    运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程 有关前两篇的链接: 运用Python语言编写获取Linux基本系统信息(一):获得Linux版本.内核.当前时间 运 ...

  3. 检索算法 -- 数据结构与算法的javascript描述 第13章

    检索算法-如何在列表中查找特定的值. 顺序查找 从列表的第一个元素开始对列表元素逐个进行判断,直到找到了想要的结果,它属于暴力查找技巧的一种,在执行查找时可能会访问到数据结构里的所有元素. 代码: / ...

  4. 排序算法 -- 数据结构与算法的javascript描述 第12章

    排序是常见的功能,给定一组数据,对其进行排序. 在此之前,我们需要准备个基础工作--自动生成数组,并可以对该组数据做任何处理. /** * 测试类 ,数组 * @param numElements * ...

  5. 【数据结构与算法分析——C语言描述】第一章总结 引论

    这一章主要复习了一些数学知识,像指数.对数.模运算.级数公式:还有2种证明方法,归纳假设法和反证法.所幸以前学过,重新拾捡起来也比较轻松. 简要地复习了递归,提出了编写递归例程的四条基本法则: 基准情 ...

  6. python核心编程-习题-第二章

    PS:PDF在线地址:http://bcmi.sjtu.edu.cn/~zhaohai/ptm2012/data/Python-kernel.programming.v2.pdf 2-1  变量,pr ...

  7. 字典 -- 数据结构与算法的javascript描述 第七章

    字典 字典是一种以键-值对形式存储数据的数据结构 最基本功能规划 add 添加数据到字典 remove 从字典中移除数据 get 从字典中取出数据 count 统计字典数据量 find 查找数据在字典 ...

  8. 链表的实现 -- 数据结构与算法的javascript描述 第六章

    链表 链表是由一组节点组成的集合.每个节点都使用一个对象的引用指向它的后继.指向另一个节点的引用叫做链 结构示意图 : 链表头需要我们标识 head { element:head,next:obj1 ...

  9. 队列的实现 -- 数据结构与算法的javascript描述 第五章

    队列也是列表的一种,有不同于列表的规则. 先进先出 入队方法 出队方法 可以找到队首 可以找到队尾 可以查看队列有多长 可以查看队列是否为空 这是一个基本的需求,围绕他来实现,当然我们可以自己扩展列表 ...

随机推荐

  1. SQL Server 查询分解

    标签:SQL SERVER/MSSQL SERVER/数据库/DBA/查询步骤 概述 查询步骤是很基础也挺重要的一部分,但是我还是在周围发现有些人虽然会语法,但是对于其中的步骤不是很清楚,这里就来分解 ...

  2. 《精通正则表达式》笔记 --- “验证”Email格式

    写一个正则表达式的三个步骤: 理解需求并找出你需要验证的数据的特征: 写一个还可以用的正则表达式: 看看能不能达到你的目的,同时想想会不会匹配到一些不想要的数据: [可选]性能优化 我觉得写一个正则表 ...

  3. CVTE实习求职经历

    今天,听到有好多同学最近要去面试CVTE这家企业,于是呢,准备将自己的经历写上来,给大家一个参考,希望能够大家一次帮助. 一.整体感觉 首先呢,先讲一下我个人对这家企业的整体感觉吧. 1. 第一次 对 ...

  4. ASP.NET MVC 5 - 查询Details和Delete方法

    在这部分教程中,接下来我们将讨论自动生成的Details和Delete方法. 查询Details和Delete方法 打开Movie控制器并查看Details方法. public ActionResul ...

  5. Windows Azure Storage (23) 计算Azure VHD实际使用容量

    <Windows Azure Platform 系列文章目录> 对于A系列和D系列的虚拟机来说,使用的是普通存储. 普通存储的存储资源,是按照每GB每月计费的.Microsoft Azur ...

  6. Module-Zero之租户管理

    返回<Module Zero学习目录> 开启多租户 租户实体 租户管理者 默认租户 开启多租户 ABP和Module-Zero可以运行多租户或单租户模式.多租户默认是禁用的.我们可以在mo ...

  7. windows命令——taskmgr 1

    taskmgr.exe用于任务管理器.它显示系统中正在运行的进程. 该程序使用Ctrl+Alt+Del(一般是弹出Windows安全再点击“任务管理器”)或者Ctrl+Shift+Esc 有时候需要, ...

  8. 每天一个linux命令(25):linux文件属性详解

    Linux 文件或目录的属性主要包括:文件或目录的节点.种类.权限模式.链接数量.所归属的用户和用户组.最近访问或修改的时间等内容.具体情况如下: 命令: ls -lih 输出: [root@loca ...

  9. Attribute富文本使用方法

    ★★★Attribut富文本★★★ 在UITextView和UILable的使用中很多的时候会用到富文本. UITextView和UILable的区别在于: ★★★★UITextView 当文字大于一 ...

  10. BUG级别定义标准

    通过图片另存为 或者 放大浏览器倍率 查看.