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. ASP.NET Web API的Controller是如何被创建的?

    Web API调用请求的目标是定义在某个HttpController类型中的某个Action方法,所以消息处理管道最终需要激活目标HttpController对象.调用请求的URI会携带目标HttpC ...

  2. Bootstrap 3的box-sizing样式导致UEditor控件的图片无法正常缩放

    UEditor组件是百度提供的一套开源的web在线所见即所得富文本编辑器,具有轻量,可定制,注重用户体验等特点,基于MIT协议,功能很强大.最近在使用的过程中发现其中上传的图片(或者插入已有的表情包图 ...

  3. salesforce 零基础学习(五十一)使用 Salesforce.com SOAP API 实现用户登录以及简单的增删改查(JAVA访问salesforce)

    此篇请参看:https://resources.docs.salesforce.com/202/latest/en-us/sfdc/pdf/salesforce_developer_environme ...

  4. iOS-App发布证书的申请与使用

    i开发环境:xcode5.1.1 iphonesdk:7.1 开发机器:iMac 真机部署测试:apple个人开发者ID 向导: 必备IDP证书和distribution证书(第一个证书是真机部署测试 ...

  5. OpenGL学习进程(13)第十课:基本图形的底层实现及算法原理

        本节介绍OpenGL中绘制直线.圆.椭圆,多边形的算法原理.     (1)绘制任意方向(任意斜率)的直线: 1)中点画线法: 中点画线法的算法原理不做介绍,但这里用到最基本的画0<=k ...

  6. thinkPHP入门

    什么是框架 框架就是一定结构的代码,框架提供一个开发web程序的基础架构以及常用的功能 代码,PHP框架的web程序开发拜倒了流水线上. php框架就是一定要按别人规定好的架构编写. php开发框架有 ...

  7. 【Win 10开发】协议-上篇:自定义应用协议

    就像系统许多内置应用可以通过URI来启动(如ms-settings-bluetooth:可以打开蓝牙设置页),我们自己开发的应用程序,如果需要的话,可以为应用程序自定义一个协议.应用程序协议在安装时会 ...

  8. 收集的React.JS资料

    主页 http://facebook.github.io/react/ https://github.com/facebook/react   中文站 http://www.reactjs.cn/ h ...

  9. 【转】如何让你的Android SDK下载或者升级快如闪电

    准备学习Android开发,但是Android SDK Manager界面都刷不出来,今天看到了一篇文章,顿时就解决了,原文地址http://qichaochen.github.io/2014/12/ ...

  10. markdown语法练习

    Markdown练习 这篇文章 主要用于练习markdown各种基本语法. 这篇文章 主要用于练习markdown各种基本语法. 1.标题设置 1.通过在文字下方添加"="或者&q ...