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

Класс Fraction() модуля fractions в Python

Рациональное число (дроби) в Python

Синтаксис:

import fractions

fractions.Fraction(numerator=0, denominator=1)
fractions.Fraction(other_fraction)
fractions.Fraction(float)
fractions.Fraction(decimal)
fractions.Fraction(string)

Параметры:

Возвращаемое значение:

  • новый экземпляр Fraction().

Описание:

Класс Fraction() модуля fractions создает рациональное число или как еще его называют - простую дробь.

Первая версия конструктора требует, чтобы числитель и знаменатель были экземплярами numbers.Rational и возвращает новый экземпляр Fraction() со значением numerator/denominator. Если знаменатель равен 0, он вызывает ошибку ZeroDivisionError.

Вторая конструктора версия требует, чтобы аргумент other_fraction является экземпляром numbers.Rational и возвращает экземпляр Fraction() с тем же значением.

Следующие две версии конструктора принимают экземпляр типа float или decimal.Decimal и возвращают экземпляр Fraction() с точно таким же значением.

Обратите внимание, что из-за проблем операций с числами float аргумент для Fraction(1.1) не совсем равен 11/10 и поэтому Fraction (1.1) не возвращает Fraction( 11, 10) как и следовало ожидать. Но метод Fraction.limit_denominator() частично решает эту проблему.

>>> Fraction(1.1)
# Fraction(2476979795053773, 2251799813685248)
>>> Fraction(1.1).limit_denominator(1000)
# Fraction(11, 10)

Последняя версия конструктора ожидает строку или экземпляр Unicode. Обычная форма для этого экземпляра:

[sign] numerator ['/' denominator]

Где необязательный знак может быть либо '+', либо '-', а числитель и знаменатель если есть представляют собой строки десятичных цифр. Кроме того, любая строка, представляющая конечное значение и принятая конструктором float, также принимается конструктором Fraction(). В любой форме входная строка может также иметь начальные и/или конечные пробелы.

Класс fractions.Fraction() наследуется от абстрактного базового класса numbers.Rational и реализует все методы и операции этого класса. Экземпляры Fraction() являются хешируемыми и должны рассматриваться как неизменяемые объекты. Кроме того, fractions.Fraction() обладает своими свойствами и методами.

Изменено в Python 3.9: теперь для нормализации числителя и знаменателя используется math.gcd() . Функция math.gcd() всегда возвращает тип int. Раньше тип НОД зависел от числителя и знаменателя.

Изменено в Python 3.11: при создании экземпляра Fraction из строки теперь разрешено подчеркивание в соответствии с правилами PEP 515.

Изменено в Python 3.11: чтобы удовлетворить проверки экземпляра typing.SupportsInt, класс fractions.Fraction теперь реализует __int__.

Изменено в Python 3.12: для строковых входных данных, вокруг косой черты теперь допускается пробел: Fraction('2 / 3').

Изменено в Python 3.12: экземпляры fractions.Fraction теперь поддерживают форматирование в стиле float с типами представления "e", "E", "f", "F", "g", "G" и "%".

Вот некоторые примеры:

>>> from fractions import Fraction
>>> Fraction(16, -10)
Fraction(-8, 5)
>>> Fraction(123)
Fraction(123, 1)
>>> Fraction()
Fraction(0, 1)
>>> Fraction('3/7')
Fraction(3, 7)
>>> Fraction(' -3/7 ')
Fraction(-3, 7)
>>> Fraction('1.414213 \t\n')
Fraction(1414213, 1000000)
>>> Fraction('-.125')
Fraction(-1, 8)
>>> Fraction('7e-6')
Fraction(7, 1000000)
>>> Fraction(2.25)
Fraction(9, 4)
>>> Fraction(1.1)
Fraction(2476979795053773, 2251799813685248)
>>> from decimal import Decimal
>>> Fraction(Decimal('1.1'))
Fraction(11, 10)