python数据结构题目_《数据结构与算法Python语言描述》习题第二章第三题(python版)...

本文介绍了如何使用Python实现一个有理数的抽象数据类型(ADT Rational),包括构造有理数、加减乘除、取整和浮点数转换等基本操作。同时,代码实现了大O表示法、比较操作符等功能,并给出了测试用例。
摘要由CSDN通过智能技术生成

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))

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

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

运用Python语言编写获取Linux基本系统信息&lpar;三&rpar;: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描述 第五章

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

随机推荐

eval解析JSON中的注意点

在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式: 1.一种为使用eval()函数. 2. 使用Function对象来进行返回解析. 使用eval函数来解析,并且使用jquery ...

Selenium脚本编写环境的搭建&sol;XPath

编写环境主要分为三个部分: JUnit : java单元测试框架: Firebug: firefox 附加组件,Firebug是firefox下的一个扩展,能够调试所有网站语言,如Html,Css等, ...

理解HTTP session原理及应用

转自:http://www.2cto.com/kf/201206/135471.html 一.术语session在我的经验里,session这个词被滥用的程度大概仅次于transaction,更加有趣 ...

css案例学习之div a实现立体菜单

效果 代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值