尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

自定义重载运算符--《python语言程序设计》2018版--第8章20题使用Rational类求和数列之一
📅 发布时间:2026/6/18 19:50:04

《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题分支》 ↩︎

相关新闻

  • HLS的ready无法随机握手解决办法
  • 2025年天津十大保安服务联营合作企业推荐:知名的保安服务联 - myqiye
  • LobeChat能否用于生成APP界面文案?UX写作助手

最新新闻

  • 嵌入式调试利器dBUG:TRACE单步、UP上传与TRAP #15实战解析
  • 2026 年服装镭射激光打标转印标定制厂家技术实力与选型指南 - 变量人生001
  • MyFramework:EventSystem 事件系统的实现解析
  • 多维聚合实战:解决GROUP BY在维度交叉中的数据失真问题
  • 杭州本地宠物店实测分享,选猫选狗别只看价格 - 园友3800037
  • 2026视频转WEBM保姆级教程:HTML5必备,免费在线+小程序全攻略 - 时时资讯

日新闻

  • 2026年不锈钢卷板厂家推荐排行榜:冷轧热轧/304/201不锈钢卷板,高颜值耐腐蚀源头厂家实力精选 - 企业推荐官【官方】
  • FLUX.1-dev FP8模型实战指南:24GB以下显卡高效部署方案
  • 2026佛山长途搬家价目表:跨省跨市搬家费用完整计算指南 - 从来都是英雄出少年

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号