Модуль fractions

Модуль fractions предоставляет поддержку рациональных чисел.

class fractions.Fraction(numerator=0, denominator=1)

class fractions.Fraction(other_fraction)

class fractions.Fraction(float)

class fractions.Fraction(decimal)

class fractions.Fraction(string)

Класс, представляющий собой рациональные числа. Экземпляр класса можно создать из пары чисел (числитель, знаменатель), из другого рационального числа, числа с плавающей точкой, числа типа decimal.Decimal, и из строки, представляющей собой число.

>>> from fractions import Fraction
>>> Fraction(1, 3)
Fraction(1, 3)
>>> Fraction(2, 6)
Fraction(1, 3)
>>> Fraction(100)
Fraction(100, 1)
>>> Fraction()
Fraction(0, 1)
>>> Fraction('3/7')
Fraction(3, 7)
>>> Fraction(' 3/7 ')
Fraction(3, 7)
>>> Fraction('3.1415')
Fraction(6283, 2000)
>>> Fraction(3.1415)
Fraction(7074029114692207, 2251799813685248)

Необходимо заметить, что, поскольку числа с плавающей точкой не совсем точны, получающееся рациональное число может отличаться от того, что мы хотим получить. Можете поделить столбиком 7074029114692207 на 2251799813685248 и убедиться :)

Рациональные числа можно, как int и float, складывать, умножать, делить...

>>> from fractions import Fraction
>>> a = Fraction(1, 7)
>>> b = Fraction(1, 3)
>>> a + b
Fraction(10, 21)
>>> a - b
Fraction(-4, 21)
>>> a * b
Fraction(1, 21)
>>> a / b
Fraction(3, 7)
>>> a % b
Fraction(1, 7)
>>> b % a
Fraction(1, 21)
>>> a ** b
0.5227579585747102
>>> abs(a - b)
Fraction(4, 21)

Fraction.limit_denominator(max_denominator=1000000) - ближайшее рациональное число со знаменателем не больше данного.

>>> from fractions import Fraction
>>> a = Fraction(3.1415)
>>> a
Fraction(7074029114692207, 2251799813685248)
>>> a.limit_denominator()
Fraction(6283, 2000)

Также, помимо класса рациональных чисел, модуль fractions предоставляет функцию для нахождения наибольшего общего делителя.

fractions.gcd(a, b) - наибольший общий делитель чисел a и b.

>>> from fractions import gcd
>>> gcd(1, 5)
1
>>> gcd(1000, 3)
1
>>> gcd(4, 6)
2
>>> gcd(0, 2)
2
>>> gcd(0, 0)
0

Обсуждение вопросов, не связанных со статьёй (в т.ч. комментарии типа "Помогите!"), ведётся на форуме pythonworld.club, а не в комментариях.

Для вставки кода на Python в комментарий заключайте его в теги <pre><code class="python3">Ваш код</code></pre>
Опечатка в тексте:
Послать сообщение об ошибке автору?