Python標准庫fractions中Fraction類可以幫助我們處理分數。
1. 導入
from fractions import Fraction
2. 實例化
Fraction類有多種實例化方法:
1.傳入分子和分母
>>> Fraction(4, 3)
Fraction(4, 3)
2.傳入浮點數
>>> Fraction(3.5)
Fraction(7, 2)
3.傳入字符串
>>>Fraction('5/6') Fraction(5, 6)
4. 用另一個Fraction示例進行初始化
>>> a = Fraction(2,4) >>> b = Fraction(a) >>> b Fraction(1, 2)
5. 或者使用一個Decimal實例
>>> from decimal import Decimal >>> x = Decimal("1.1") >>> y = Fraction(x) >>> y Fraction(11, 10)
3. 特性
1. 自動約分
Fraction類能夠自動對分子和分母進行約分,當分子分母中有負號時,自動約分並最終將負號歸於分子
>>>Fraction(10, -5)
Fraction(-2, 1)
2. 二元運算:
1) 加法 +
i)兩個分數相加得到一個分數:
>>> Fraction(1,3) + Fraction(1,6) Fraction(1, 2)
ii)一個分數加一個整數得到一個分數:
>>> Fraction(1,2) + 1
Fraction(3, 2)
iii)一個分數加一個浮點數得到一個浮點數:
>>> Fraction(1,2) + 1.6 2.1
2) 減法 - 、乘法 * 、除法 / 同加法
>>> Fraction(3,2) - Fraction(1,2) #分數減法 Fraction(1, 1) >>> Fraction(3,2) - 1 Fraction(1, 2) >>> Fraction(3,2) - 0.5 1.0 >>> Fraction(1,2) * Fraction(1,3) #分數乘法 Fraction(1, 6) >>> Fraction(1,2) * 3 Fraction(3, 2) >>> Fraction(1,2) * 0.5 0.25 >>> Fraction(3,2) / Fraction(3,1) #分數除法 Fraction(1, 2) >>> Fraction(3,2) / 3 Fraction(1, 2) >>> Fraction(3,2) / 3.0 0.5
3) 乘方 ** :
>>> Fraction(1,4)**Fraction(1,2) 0.5 >>> Fraction(1,4)**2 Fraction(1, 16) >>> Fraction(1,4)**0.5 0.5 >>> 0.25**Fraction(1,2) 0.5 >>> 4**Fraction(1,2) 2.0
我們發現,乘方運算含有Fraction對象時,若Fraction對象位於指數位,則結果返回一個浮點數;當Fraction對象位於底數位時,只有指數是整數時,返回結果才是一個Fraction對象,否則返回結果都是浮點數。
4) 合理計算
我們知道浮點數有精度要求,是因為浮點數有舍入誤差,如:
>>> Fraction(1.1) Fraction(2476979795053773, 2251799813685248) >>> Fraction("1.1") Fraction(11, 10)
上述代碼中,由str對象實例化可以得到精確表示,但是由浮點數表示不能得到精確表示,這是由浮點數的特性決定的。實際上我們可以使用Fraction對象的limit_denominator()方法得到一個近似的Fraction值。
>>> f = Fraction(1.1) >>> f Fraction(2476979795053773, 2251799813685248) >>> f.limit_denominator() Fraction(11, 10)
4. 獲取Fraction對象屬性
- .numerator:獲取分子
-
.denominator:獲取分母
>>> f = Fraction(1,2) >>> f.numerator 1 >>> f.denominator 2
5. .__str__()和.__repr__()方法:
Fraction對象作為一個字符串,使用print()函數打印整個分數:
>>> f = Fraction(1,2) >>> print(f) 1/2 >>> f.__str__() '1/2' >>> str(f) '1/2' >>> f.__repr__() 'Fraction(1, 2)' >>> repr(f) 'Fraction(1, 2)'
6.gcd:求最大公約數函數
>>> import fractions >>> fractions.gcd(2,4) 2