当前位置: 首页 > news >正文

自定义重载运算符--《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题分支》 ↩︎

http://www.rkmt.cn/news/110917.html

相关文章:

  • HLS的ready无法随机握手解决办法
  • 2025年天津十大保安服务联营合作企业推荐:知名的保安服务联 - myqiye
  • LobeChat能否用于生成APP界面文案?UX写作助手
  • Python高级编程强大的技术深度解析与实战指南
  • MySQL: 数据库读写分离与负载均衡的实现方式及深度分析 - 教程
  • 2025年天津驻场安保公司排名,有名的驻场安保专业公司解析 - myqiye
  • 帮写标书多少钱,标书代写公司,代写工程采购服务等标书公司推荐
  • Qwen3-14B本地部署指南:从下载到AI代理实战
  • LobeChat能否实现表格数据生成?CSV格式导出实践
  • NVIDIA 培训 | 报名 AI 培训班前沿实战课程:大语言模型与 AI 智能体
  • 2025年广东惠州高光喷涂/塑胶配件服务商全景评估与选型策略 - 2025年品牌推荐榜
  • 力扣(LeetCode) 27: 移除元素 - 解法思路
  • NVIDIA Jetson,为您的机器人实现节日心愿
  • Windows10中配置并使用nvidia-smi,cuda驱动的安装
  • 【解决方案】在Windows11上配置SSH免密登录
  • HuggingFace PyTorch图像模型训练与源码解析
  • LobeChat能否用于生成食谱?AI厨房助手上线体验
  • GitHub Copilot辅助编写TensorFlow代码:结合本地清华源环境
  • linux系统auditd日志审计 rsyslog远程同步配置模板(国产银河麒麟系统V10通用版)
  • Qwen-Image与CLIP融合实现精准图文匹配
  • Dify + HuggingFace镜像网站加速模型加载技巧
  • 虚拟机vmware linux的piix4_smbus : SMBus Host Controller not enabled
  • LobeChat能否实现AI茶艺师?茶叶品鉴与冲泡技巧指导
  • YOLO-v5论文的10大创新点解析
  • VSCode远程连接云端LLM实现低延迟交互
  • 模具温度控制机厂家哪家质量好?国内外优质品牌深度解析
  • UVa 1450 Airport
  • 从算法到载体的闭环:解构未来大算力目标追踪无人机集群软硬一体化供应商 - 品牌2025
  • [ROS实战] 零硬件成本调试户外导航:Python模拟GPS信号 + RViz加载高德地图实现“云”行走
  • 【JavaWeb】乱码问题_HTML_Tomcat日志_sout乱码问题