Сообщить об ошибке.

Модуль fractions, рациональные числа в Python

Работа с дробями, рациональные числа

Модуль 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