python之有理數運算Rational類

python中可以做的數學運算,僅侷限在了基本數據類型int、float。因爲我們前面學過了特殊方法,所以我們現在也可以進行有理數運算、矩陣運算,今天我們就先講解有理數運算,矩陣運算與有理數運算方法基本一樣,都要用到特殊方法進行定義運算過程。

有理數分爲整數和分數,整數即int,不需要講解,今天我們就說下分數的數學運算。分數的數學運算要注意最後運算結果化爲最簡形,化爲最簡形就需要事先計算出分子分母的最大公約數。表示有理數類我們用Rational進行表示。具體的事先過程我們以一例子進行講解。

在Rational類中實現有理數的四則運算。

def gcd(a, b):   #求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 + r.p * self.q, 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 __div__(self, r):   #分數相除
        return Rational(self.p * r.q, self.q * r.p)
    def __str__(self):
        c = gcd(self.p, self.q)
        return '%s/%s' % (self.p/c, self.q/c)
    __repr__ = __str__
    
r1 = Rational(1, 2)
r2 = Rational(1, 3)
print r1+r2, r1-r2, r1*r2, r1/r2

在我看來,有理數中的分數加減乘除的方法是簡單的,在類中加減乘除的方法中,只需要將兩個分數四則運算後的公式中的分子分母寫成一個類實例對象返回即可。不過我認爲難點是,要編寫一個求兩數最大公約數的方法,在__str__方法中調用該方法即可。在類外直接print r1+r2即可,因爲特殊方法__xx__會自動調用。

 

歡迎大家和我一起交流學習,我的公衆號是:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章