你可能不需要經常處理分數,但當你需要時,Python的Fraction類會給你很大的幫助。在該指南中,我將提供一些有趣的例項,用於展示如何處理分數,突出顯示一些很酷的功能。
1 基礎
Fraction類在Lib/fractions.py檔案中,所以可以這樣匯入:
1 |
from fractions import Fraction |
有很多種例項化Fraction類的方法。
首先,你可以傳入分子和分母:
1 2 |
>>> Fraction(1, 2) Fraction(1, 2) |
或者利用另一個分數進行例項化:
1 2 3 |
>>> f = Fraction(1, 2) >>> Fraction(f) Fraction(1, 2) |
使用一個浮點數進行例項化:
1 2 |
>>> Fraction(2.5) Fraction(5, 2) |
或者使用一個 decimal:
1 2 3 |
>>> from decimal import Decimal >>> Fraction(Decimal('1.1')) Fraction(11, 10) |
最後一種方法,可能是最有趣的一種方法,你可以使用一個字串例項化Fraction類:
1 2 |
>>> Fraction('9/16') Fraction(9, 16) |
本質上講,Fraction類這麼設計,目的就是為了讓你在例項化該類之前不需要做很多處理。Fraction類知道如何處理多種不同的資料型別。
2 自動約分
約分並不是很難,但是對於一些複雜的分數,約分還是要費點事的。Fraction類在這方面特別有用,因為它能自動約分分數。
1 2 |
>>> Fraction(153, 272) Fraction(9, 16) |
純粹靠想,你可能無法約分153/172,但是Fraction類能很快地完成約分。
3 二元運算
你可以像對待整數和浮點數一樣,在Fraction物件上執行二元運算。
兩個分數進行相加操作:
1 2 |
>>> Fraction(1, 2) + Fraction(3, 4) Fraction(5, 4) |
這樣操作就很方便了,但是你也可以混合整數或浮點數。如你所料,Fraction物件和一個整數進行相加返回一個Fraction物件,但和一個浮點數進行相加返回一個浮點數。
1 2 3 4 |
>>> Fraction(5, 16) + 3 Fraction(53, 16) >>> Fraction(5, 16) + 3.0 3.3125 |
這裡有一些其他的二元運算的例子:
1 2 3 4 5 6 |
>>> Fraction(5, 16) - Fraction(1, 4) Fraction(1, 16) >>> Fraction(1, 16) * Fraction(3, 16) Fraction(3, 256) >>> Fraction(3, 16) / Fraction(1, 8) Fraction(3, 2) |
現在讓我們試試乘方操作:
1 2 |
>>> Fraction(1, 8) ** Fraction(1, 2) 0.3535533905932738 |
它返回一個浮點數,可能是因為分數不能進行合理的計算。實際上我們可以使用limit_denominator方法得到一個近似的Fraction值。
1 2 3 |
>>> f = Fraction(1, 8) ** Fraction(1, 2) >>> Fraction(f).limit_denominator() Fraction(235416, 665857) |
記住,你可以混合字串和其他上邊例項化部分中提到的資料型別。
1 2 3 4 |
>>> Fraction("1/2") + Fraction(2.0) Fraction(5, 2) >>> Fraction(2) * Fraction(" 1/2 ") Fraction(1, 1) |
4 獲取Fraction物件的屬性
你已經有了一個Fraction物件,並且已經做了一些計算,現在我們如何訪問它的屬性呢?
不閱讀文件的話,你或許會嘗試Fraction.numerator和Fraction.denominator,事實證明你是正確的。
1 2 3 4 5 |
>>> f = Fraction(221, 234) + Fraction(1, 2) >>> f.numerator 13 >>> f.denominator 9 |
或者作為一個字串,列印整個分數:
1 2 3 4 5 |
>>> print f 13/9 >>> a = str(f) >>> a '13/9' |
5 GCD
這不是Fraction類的一部分,它是在fractions庫中的。利用它你可以快速找到兩個數的最大公約數。
首先匯入:
1 |
from fractions import gcd |
一些例子:
1 2 3 4 |
>>> gcd(100, 75) 25 >>> gcd(221, 234) 13 |
6 總結
希望你已經學到了一些關於在Python中處理分數的東西。如果你想閱讀更多內容,可以檢視文件。如果你感覺學起來非常有動力,可以看看原始碼。
如果你有更有趣的分數使用方法,告訴我,我會將它們新增到指南中。
打賞支援我翻譯更多好文章,謝謝!
打賞譯者
打賞支援我翻譯更多好文章,謝謝!