news 2026/4/18 10:25:34

自定义重载运算符--《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/18 5:35:33

少儿编程Scratch3.0教程——06 控制积木(基础知识)

课程已经过半&#xff0c;从这节课起&#xff0c;你就将开始学习剩下的控制、侦测、运算和变量分类&#xff0c;剩下的积木块比前面学过的内容相对难一些&#xff0c;但是也更重要。难是因为它们的使用更加灵活多变&#xff0c;重要是因为想要完成一个复杂的游戏或者动画&#…

作者头像 李华
网站建设 2026/4/18 7:57:01

直播带货质检:IACheck助力商品描述与实际检测结果的一致性审核

随着直播带货成为零售行业的重要营销方式&#xff0c;商品信息的准确性和透明度越来越受到消费者关注。尤其是在直播过程中&#xff0c;主播对商品的描述往往充满了吸引力的营销语言&#xff0c;但商品的实际检测结果是否与描述一致&#xff0c;直接影响消费者的购买决策和品牌…

作者头像 李华
网站建设 2026/4/18 8:01:16

LobeChat能否申请基金?开源项目融资渠道

LobeChat能否申请基金&#xff1f;开源项目融资渠道 在AI技术加速渗透日常生活的今天&#xff0c;一个有趣的现象正在发生&#xff1a;越来越多的开发者不再满足于使用封闭的商业大模型平台&#xff0c;而是转向像 LobeChat 这样的开源聊天界面&#xff0c;构建属于自己的私有化…

作者头像 李华
网站建设 2026/4/18 5:21:35

UVa 12369 Cards

题目概述 Taha\texttt{Taha}Taha 有一副特殊的扑克牌&#xff0c;包含 525252 张常规牌和 222 张 Joker\texttt{Joker}Joker 牌。常规牌的花色分为 梅花、 方块、 红心 和 黑桃 四种&#xff0c;每种花色 131313 张。Joker\texttt{Joker}Joker 牌没有花色。Sara\texttt{Sara}Sa…

作者头像 李华
网站建设 2026/4/18 3:49:13

LobeChat能否训练微调模型?结合前端的闭环训练

LobeChat能否训练微调模型&#xff1f;结合前端的闭环训练 在企业级AI助手日益普及的今天&#xff0c;一个现实问题摆在开发者面前&#xff1a;我们部署了一个基于本地大模型的聊天系统&#xff0c;用户每天都在使用&#xff0c;反馈也不断产生——但模型却始终“原地踏步”&am…

作者头像 李华