Модуль fractions
обеспечивает поддержку арифметики рациональных чисел.
Экземпляр fractions.Fraction()
может быть создан из пары целых чисел, другого рационального числа или строки.
Самый простой способ создать дробь это указать числитель numerator
и знаменатель denominator
. По умолчанию numerator=0
, denominator=1
:
>>> from fractions import Fraction >>> Fraction() # Fraction(0, 1) >>> Fraction(numerator=1, denominator=2) # Fraction(1, 2) >>> Fraction(1, 2) # Fraction(1, 2) # Если числитель и знаменатель имеют общий # делитель, то числа они будут сокращены: >>> Fraction(2, 4) # Fraction(1, 2) >>> Fraction(3, 6) # Fraction(1, 2)
В качестве числителя и/или знаменателя могут быть указаны другие экземпляры Fraction()
:
>>> from fractions import Fraction >>> Fraction(10, Fraction(1, 2)) # Fraction(20, 1) >>> Fraction(Fraction(1, 2), 3) # Fraction(1, 6) >>> Fraction(Fraction(1, 2), Fraction(1, 4)) # Fraction(2, 1)
Целое число и вещественное число, также можно преобразовать в дробь:
>>> from fractions import Fraction >>> Fraction(5) # Fraction(5, 1) >>> Fraction(1.5) # Fraction(3, 2)
Создание рационального числа из десятичного числа:
>>> from fractions import Fraction >>> from decimal import Decimal >>> Fraction(Decimal('1.5')) # Fraction(3, 2) >>> Fraction(Decimal('3')) # Fraction(3, 1)
Создание дроби из строки:
>>> from fractions import Fraction >>> Fraction('1.2') # Fraction(6, 5) >>> Fraction('1.2e+5') # Fraction(120000, 1) >>> Fraction('-7/12') # Fraction(-7, 12) >>> Fraction('-0.12') # Fraction(-3, 25) >>> Fraction('-.12') # Fraction(-3, 25) >>> Fraction(' 3/4 ') # Fraction(3, 4) >>> Fraction(' 3.4 ') # Fraction(17, 5)
Дроби могут быть приведены к основным типам языка Python.
>>> from fractions import Fraction >>> x = Fraction('3/4') >>> y = Fraction(1.5) >>> int(y) 1 >>> float(y) 1.5 >>> str(y) '3/2' >>> str(x) '3/4'
Рациональные числа поддерживают Все арифметические операции, однако невозможно выполнить действие над типами Fraction()
и Decimal()
в одном математическом выражении:
>>> from fractions import Fraction >>> x = Fraction('3/4') >>> y = Fraction(1.5) >>> x + y # Fraction(9, 4) >>> x - y # Fraction(-3, 4) >>> x * y # Fraction(9, 8) >>> x / y + 5 # Fraction(11, 2) >>> x / y * 2.5 # 1.25 >>> x ** y # 0.649519052838329 >>> from decimal import Decimal >>> z = Decimal('1.5') >>> z + x # Traceback (most recent call last): # File "<stdin>", line 1, in <module> # TypeError: unsupported operand type(s) for +: 'decimal.Decimal' and 'Fraction'
Дроби могут работать с некоторыми функциями модуля math
, т. к. могут быть преобразованы к float
:
>>> from fractions import Fraction >>> from math import * >>> x = Fraction('3/4') >>> y = Fraction(1.5) >>> modf(x) # (0.75, 0.0) >>> fabs(x) # 0.75 >>> sqrt(x) # 0.8660254037844386 >>> exp(y) # 4.4816890703380645