news 2026/4/10 21:25:40

自定义重载运算符--《python语言程序设计》2018版--第8章20题使用Rational类求和数列之一

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
自定义重载运算符--《python语言程序设计》2018版--第8章20题使用Rational类求和数列之一

《python语言程序设计》2018版 第8章第215页第47行有误

第8章第20的题面

Rational代码

classRational:def__init__(self,numerator=1,denominator=0):divisor=gcd(numerator,denominator)self.__numerator=(1ifdenominator>0else-1)*int(numerator/divisor)self.__denominator=int(abs(denominator)/divisor)def__add__(self,second_rational):n=(self.__numerator*second_rational[1]+self.__denominator*second_rational[0])d=self.__denominator*second_rational[1]returnRational(n,d)def__sub__(self,second_rational):n=(self.__numerator*second_rational[1]self.__denominator*second_rational[0])d=self.__denominator*second_rational[1]returnRational(n,d)def__mul__(self,second_rational):n=self.__numerator*second_rational[0]d=self.__denominator*second_rational[1]returnRational(n,d)def__truediv__(self,second_rational):n=self.__numerator*second_rational[1]d=self.__denominator*second_rational[0]returnRational(n,d)def__float__(self):returnself.__numerator/self.__denominatordef__int__(self):returnint(self.__float__())def__str__(self):ifself.__denominator==1:returnstr(self.__numerator)else:returnstr(self.__numerator)+"/",self.__denominatordef__lt__(self,second_rational):#小于returnself.__lt__(second_rational)<0def__le__(self,second_rational):#大于returnself.__le__(second_rational)<=0def__gt__(self,second_rational):returnself.__gt__(second_rational)>0def__ge__(self,second_rational):returnself.__ge__(second_rational)>=0def__cmp__(self,second_rational):temp=self.__sub__(second_rational)iftemp[0]>0:return1eliftemp[0]<0:return-1else:return0def__getitem__(self,index):ifindex==0:returnself.__numeratorelse:returnself.__denominatordefgcd(n,d):n1=abs(n)n2=abs(d)gcd=1k=1whilek<=n1andk<=n2:ifn1%k==0andn2%k==0:gcd=k k+=1returngcd

名词解释

英文汉语作用特点
Rational有理数一般用Rational类来处理分数运算可以避免浮点数精度丢失
numerator分子
denominator分母编程中需注意分母不能为 0
divisor除数约数
gcdGreatest Common Divisor最大公约数 / 最大公因数1. 数学定义:能同时整除两个(或多个)整数的最大正整数(如 12 和 18 的 gcd 是 6);2. 编程用法:Python 中通过 math.gcd() 函数实现,需注意:- 仅接受非负整数,且返回值≥1; 若输入 0 和非 0 数,返回非 0 数(如 gcd (0,8)=8);3. 核心用途:化简分数(分子分母同除以 gcd,得到最简分数)。

用语言来形容

建立Rational类
建立初始化函数__init__(内含self, 分子=1,分母=0)
在函数中放变量整除(divisor) ,内含gcd(分子,分母)
指定私有域numerator 范围是

疑难名句

self.__numerator = (1 if denominator > 0 else -1) * int(numerator / divisor)

1 if denominator > 0 else -1是「一行式的条件判断」,核心作用是快速获取分母的符号因子,常用于分数 / 有理数的符号标准化,等价于普通 if-else 但更简洁。

自定义的重载运算符

在本程序Rational类中的__ge__

def__ge__(self,second_rational):returnself.__ge__(second_rational)>=0

默认代码中的__ge__


默认的__ge__它趋向的bool

python中class str类的__ge__

Rational代码 我最无法理解的部分12

classRational:def__init__(self,numerator=1,denominator=0):# 详见gcd最大公约数--《python语言程序设计》2018版--第8章20题使用Rational类求和数列divisor=gcd(numerator,denominator)# 详见三元表达式《python语言程序设计》2018版--第8章20题分支self.__numerator=(1ifdenominator>0else-1)*int(numerator/divisor)self.__denominator=int(abs(denominator)/divisor)

错误初尝试TypeError:strreturned non-string(type tuple)

def__str__(self):ifself.__denominator==1:returnstr(self.__numerator)else:returnstr(self.__numerator)+"/",self.__denominator#错了defmain_test():a=1b=2c=Rational(1,2)print(c)main_test()

return str(self.__numerator) + "/", self.__denominator实际返回的是元组(tuple)(格式:(“分子/”, 分母)),而非字符串;
修改一下,问题照旧???

+ "/",大家注意看一下是不是应该两边都是+号呢?
return str(self.__numerator) + "/", str(self.__denominator)

重新修改

def__str__(self):ifself.__denominator==1:returnstr(self.__numerator)else:returnstr(self.__numerator)+"/"+str(self.__denominator)defmain_test():a=1b=2c=Rational(1,2)print(c)main_test()

return f"分子{self.__numerator} 和分母{self.__denominator}return str(self.__numerator) + "/" + str(self.__denominator)的不同结果


同时注意


  1. csdn文章–《gcd最大公约数–《python语言程序设计》2018版–第8章20题使用Rational类求和数列》 ↩︎

  2. csdn文章–《三元表达式《python语言程序设计》2018版–第8章20题分支》 ↩︎

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/10 0:04:21

Jenkins Pipeline共享库(Shared Library)完全指南

Jenkins的 Pipeline: Groovy Libraries插件 是实现“流水线即代码”的关键&#xff0c;它通过**共享库&#xff08;Shared Library&#xff09;**机制&#xff0c;让团队能将通用的Pipeline逻辑&#xff08;如构建、部署步骤&#xff09;封装起来&#xff0c;供所有项目复用&am…

作者头像 李华
网站建设 2026/4/10 13:16:23

多语言国际打车平台 (PangudiDi)项目介绍说明

一、项目背景及简介项目概述PangudiDi 是一个基于 uni-app 框架开发的多语言国际打车平台&#xff0c;专为海外市场设计&#xff0c;特别针对阿拉伯语地区&#xff08;如也门&#xff09;的出行需求。平台采用现代化的移动端技术栈&#xff0c;提供完整的乘客端和司机端解决方案…

作者头像 李华
网站建设 2026/4/9 10:07:44

VonaJS: Election

如果需要在后端启动一个独立服务&#xff0c;在 VonaJS 中该如何实现呢&#xff1f; 由于 VonaJS 是分布式架构&#xff0c;后端可以启动多个 Workers。那么&#xff0c;应该在哪个 Worker 中启动独立服务呢&#xff1f; VonaJS 针对此场景提供了Election&#xff0c;工作原理…

作者头像 李华
网站建设 2026/4/10 18:20:00

如何了解腾讯云国际站代理商的NLP有什么优势呢?

要了解腾讯云国际站代理商的 NLP 优势&#xff0c;可从腾讯云国际站 NLP 本身的技术能力&#xff0c;以及代理商提供的附加服务两方面切入&#xff0c;也能通过官方及代理商渠道进一步核实&#xff0c;具体如下&#xff1a;产品本身的核心技术优势多语言与高准确率兼具&#xf…

作者头像 李华
网站建设 2026/4/3 4:29:35

腾讯云国际站代理商的TAPD适合哪些类型的企业?

腾讯云国际站代理商的 TAPD 凭借敏捷研发管理、跨地域协作、多生态集成及灵活付费与定制化服务等优势&#xff0c;适配多个行业、不同规模且有跨境协作或合规需求的企业&#xff0c;具体类型如下&#xff1a;跨境互联网与游戏企业这类企业常面临多地区工作室协作、版本快速迭代…

作者头像 李华