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