第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

章節(jié)
問答
課簽
筆記
評論
占位
占位

Python類的數(shù)學(xué)運算

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

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

其中,p、q 都是整數(shù),表示有理數(shù) p/q。
如果要讓Rational進行加法運算,需要正確實現(xiàn)__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)

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

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

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

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

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

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

任務(wù)

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

 

?不會了怎么辦

請在本地編寫代碼練習(xí)

參考答案:

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)
||

提問題

寫筆記

公開筆記
提交
||

請驗證,完成請求

由于請求次數(shù)過多,請先驗證,完成再次請求

加群二維碼

打開微信掃碼自動綁定

您還未綁定服務(wù)號

綁定后可得到

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

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

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

邀請您關(guān)注公眾號
關(guān)注后,及時獲悉本課程動態(tài)

舉報

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

手記推薦

更多

本次提問將花費2個積分

你的積分不足,無法發(fā)表

為什么扣積分?

本次提問將花費2個積分

繼續(xù)發(fā)表請點擊 "確定"

為什么扣積分?