亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

章節
問答
課簽
筆記
評論
占位
占位

Python類的數學運算

事實上,Python很多的操作都是通過內建函數來實現的,比如最熟悉的加減乘除,都是通過內建函數來實現的,分別是__add__、__sub__、__mul____truediv__。因此,只要我們的自定義類實現了相關的內建函數,我們的類對象,也可以做到加減乘除。
對于有理數,我們可以使用Rational類來表示:

?class Rational(object):
    def __init__(self, p, q):
        self.p = p
        self.q = q

其中,p、q 都是整數,表示有理數 p/q。
如果要讓Rational進行加法運算,需要正確實現__add__:

class Rational(object):
    def __init__(self, p, q):
        self.p = p
        self.q = q
    def __add__(self, r):
        return Rational(self.p * r.q + self.q * r.p, self.q * r.q)
    def __str__(self):
        return '{}/{}'.format(self.p, self.q)

定義好后,就可以嘗試一下有理數的加法了:

>>> r1 = Rational(1, 2)
>>> r2 = Rational(2, 3)
>>> print(r1 + r2)
7/6

需要注意__add__()函數,它有一個參數,表示的是運算的第二個操作數,比如:r1 + r2,那么在__add__()方法中的參數,r指的就是r2,這個參數是運算符重載的時候傳遞的。
另外,細心的同學可能注意到了,相比加減乘的特殊方法,除法的特殊方法名字較長
__truediv__,并且含有true這樣的描述,這其實和Python除法是有關系的。
Python的除法可以分為地板除(你沒看錯,就是地板)和普通除法,地板除的特殊方法是
__floordiv__,普通除法是__truediv__
地板除法和普通除法不一樣,地板除法的結果只會向下取整數
。

>>> num = 5
>>> num.__truediv__(3)
1.6666666666666667
>>> num.__floordiv__(3)
1 # 向下取整
>>> num = 7
>>> num.__floordiv__(3)
2

在運算中,普通除法使用/表示,而地板除使用//表示。

>>> 5 / 3
1.6666666666666667
>>> 5 // 3
1

任務

Rational類雖然可以做加法,但無法做減法、乘法和除法,請繼續完善Rational類,實現四則運算。

 

?不會了怎么辦

請在本地編寫代碼練習

參考答案:

def gcd(a, b):
    if b == 0:
        return a
    return gcd(b, a % b)

class Rational(object):
    def __init__(self, p, q):
        self.p = p
        self.q = q
    def __add__(self, r):
        return Rational(self.p * r.q + self.q * r.p, self.q * r.q)
    def __sub__(self, r):
        return Rational(self.p * r.q - self.q * r.p, self.q * r.q)
    def __mul__(self, r):
        return Rational(self.p * r.p, self.q * r.q)
    def __truediv__(self, r):
        return Rational(self.p * r.q, self.q * r.p)
    def __str__(self):
        g = gcd(self.p, self.q)
        return '{}/{}'.format(int(self.p/g), int(self.q/g))

r1 = Rational(1, 2)
r2 = Rational(1, 5)
print(r1 + r2)
print(r1 - r2)
print(r1 * r2)
print(r1 / r2)
||

提問題

寫筆記

公開筆記
提交
||

請驗證,完成請求

由于請求次數過多,請先驗證,完成再次請求

加群二維碼

打開微信掃碼自動綁定

您還未綁定服務號

綁定后可得到

  • · 粉絲專屬優惠福利
  • · 大咖直播交流干貨
  • · 課程更新,問題答復提醒
  • · 賬號支付安全提醒

收藏課程后,能更快找到我哦~

使用 Ctrl+D 可將課程添加到書簽

邀請您關注公眾號
關注后,及時獲悉本課程動態

舉報

0/150
提交
取消
全部 精華 我要發布
全部 我要發布
最熱 最新
只看我的

手記推薦

更多

本次提問將花費2個積分

你的積分不足,無法發表

為什么扣積分?

本次提問將花費2個積分

繼續發表請點擊 "確定"

為什么扣積分?