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