Python——處理分數類Fraction


 

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

 



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM