news 2026/4/15 20:19:20

自定义重载运算符--《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/16 10:14:17

Qwen-Image-Edit生态集成与技术前瞻

Qwen-Image-Edit生态集成与技术前瞻 在数字内容创作需求爆发式增长的今天&#xff0c;设计师、营销人员乃至普通用户都面临着一个共同挑战&#xff1a;如何快速生成高质量、可编辑且符合品牌规范的视觉素材&#xff1f;传统的设计流程依赖专业工具和人工反复修改&#xff0c;效…

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

Windows部署GPT-SoVITS远程语音复现指南

Windows部署GPT-SoVITS远程语音复现指南 在内容创作与AI交互日益融合的今天&#xff0c;个性化语音合成正从“黑科技”走向日常工具。无论是为短视频配音、打造专属语音助手&#xff0c;还是实现跨语言朗读&#xff0c;拥有一套属于自己的高保真语音引擎&#xff0c;已经成为不…

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

电脑实用软件

c盘免费清理 [官方]智慧清理下载中心 Wise Disk Cleaner 图吧&#xff1a;图吧工具箱官方网站 - DIY爱好者的必备工具合集

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

【完整源码+数据集+部署教程】情感识别系统源码分享[一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示]

一、背景意义 随着人工智能技术的迅猛发展&#xff0c;情感识别作为计算机视觉和人机交互领域的重要研究方向&#xff0c;逐渐引起了学术界和工业界的广泛关注。情感识别不仅可以帮助机器理解人类的情感状态&#xff0c;还能够在智能客服、心理健康监测、社交机器人等应用中发…

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

【完整源码+数据集+部署教程】热成像行人检测检测系统源码 [一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示]

一、背景意义 随着城市化进程的加快和智能监控技术的迅速发展&#xff0c;行人检测作为计算机视觉领域的重要研究方向&#xff0c;受到了广泛关注。尤其是在复杂环境下&#xff0c;传统的可见光图像处理方法往往受到光照、天气和遮挡等因素的影响&#xff0c;导致检测效果不佳。…

作者头像 李华