为了账号安全,请及时绑定邮箱和手机立即绑定

Rational

Rational(self.p * r.q + self.q * r.p, self.q * r.q)

这里的表示看不懂,什么意思呢

正在回答

2 回答

先看看有理数的定义:在数学上,有理数是一个整数a和一个非零整数b的比,例如3/8,通则为a/b,故又称作分数。0也是有理数,也是整数。有理数是整数和分数的集合,整数亦可看做是分母为一的分数。

你贴的
Rational(self.p * r.q + self.q * r.p, self.q * r.q)代码是  class Rational(object)里的  __add__方法
 
用下面这个例子来解释
r1 = Rational(1, 3)
r2 = Rational(1, 2)
print r1+r2

首先r1 是一个对象  p=1 q=3       r2 p=1 q=2

r1+r2     时,r1 就是上面式子里面的 self  ,   r2 就是上面式子里的 r
self.p * r.q + self.q * r.p = 1x2 + 3x1  = 5
self.q * r.q = 3 x 2 = 6
代入  __str__ 里  输出的时候,就使用   return '%s/%s' % (self.p, self.q)   输出为 5/6

13 回复 有任何疑惑可以回复我~
#1

just_say_东东 提问者

你好,谢谢你。我又有新问题了,就在原问题的评论下,字数有点多,没能在这提问,可以再帮我解决一下吗,谢谢啦。
2015-10-14 回复 有任何疑惑可以回复我~
#2

qq_清心_3

3q 写的非常清楚 ,
2017-10-27 回复 有任何疑惑可以回复我~

第一个问题:是对的。

第二个问题:那你算1/2 + 1/3 的方法是?如果你有更好的方法,也可以写成你自己的方法

单独的 r1 = Ratonal(1,2) 并没有计算,只是产生了有理数类的对象 也就是调用了 类里的 __init__ 方法

 r3= Rational(self.p * r.q + self.q * r.p, self.q * r.q)  这么写是没有结果的。因为在传参的时候 self 和 r并不存在。

这里你需要理解一下  类的 __add__方法,这个方法是python类的 内置方法,作用是 在 两个对象相加的时候,分别把两个 对象 作为  参数  代入进行计算。在我们的实例里 

r1+r2 实际上调用了  他们的对象里的 __add__ 方法,把他们分别作为  self 和 r 两个参数代入。


2 回复 有任何疑惑可以回复我~
#1

just_say_东东 提问者

噢,这样说我就懂了。(^-^) 就是说,r1 = Rational(1,2)相当于1/2,即分数的一种表现形式,对吗
2015-10-14 回复 有任何疑惑可以回复我~
#2

PengCheng 回复 just_say_东东 提问者

不能简单看成1/2 它是一个对象,这个对象使用print能打印出 1/2 来,因为对象里有 __repr__ 方法。
2015-10-19 回复 有任何疑惑可以回复我~
#3

qq_飞鱼_27

老师我不明白,为什么这样写return Rational(self.p * r.q + self.q * r.p, self.q * r.q),直接return (self.p*r.q + self.q * r.p, self.q * r.q),不可以么
2018-02-06 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
python进阶
  • 参与学习       255665    人
  • 解答问题       2949    个

学习函数式、模块和面向对象编程,掌握Python高级程序设计

进入课程
意见反馈 帮助中心 APP下载
官方微信