Документация Python неофициальный перевод

fractions.md

223 строк · 7.8 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.1/library/fractions.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 9.5. `fractions` – Рациональные числа89Модуль `fractions` предоставляет поддержку арифметики с рациональными числами.1011Экземпляр Fraction может быть создан из пары целых чисел, из другого рационального числа или из строки.1213#### `class fractions.Fraction(numerator=0, denominator=1)`1415#### `class fractions.Fraction(other_fraction)`1617#### `class fractions.Fraction(string)`1819Первая версия требует, чтобы *numerator* и *denominator* были экземплярами [`numbers.Rational`](https://python-all.ru/3.1/library/numbers.html#numbers.Rational) и возвращает новый экземпляр [`Fraction`](https://python-all.ru/3.1/library/fractions.html#fractions.Fraction) со значением `numerator/denominator`. Если *denominator* равен `0`, вызывается [`ZeroDivisionError`](https://python-all.ru/3.1/library/exceptions.html#ZeroDivisionError). Вторая версия требует, чтобы *other\_fraction* был экземпляром [`numbers.Rational`](https://python-all.ru/3.1/library/numbers.html#numbers.Rational) и возвращает экземпляр [`Fraction`](https://python-all.ru/3.1/library/fractions.html#fractions.Fraction) с тем же значением. Последняя версия конструктора ожидает строку. Обычная форма этой строки:2021```python22[sign] numerator ['/' denominator]23```2425где необязательный `sign` может быть либо '+', либо '-', а `numerator` и `denominator` (если присутствуют) являются строками десятичных цифр. Кроме того, любая строка, которая представляет конечное значение и принимается конструктором [`float`](https://python-all.ru/3.1/library/functions.html#float), также принимается конструктором [`Fraction`](https://python-all.ru/3.1/library/fractions.html#fractions.Fraction). В любом случае входная строка может также содержать начальные и/или конечные пробелы. Вот несколько примеров:2627```python28>>> from fractions import Fraction29>>> Fraction(16, -10)30Fraction(-8, 5)31>>> Fraction(123)32Fraction(123, 1)33>>> Fraction()34Fraction(0, 1)35>>> Fraction('3/7')36Fraction(3, 7)37[40794 refs]38>>> Fraction(' -3/7 ')39Fraction(-3, 7)40>>> Fraction('1.414213 \t\n')41Fraction(1414213, 1000000)42>>> Fraction('-.125')43Fraction(-1, 8)44>>> Fraction('7e-6')45Fraction(7, 1000000)46```4748Класс [`Fraction`](https://python-all.ru/3.1/library/fractions.html#fractions.Fraction) наследует от абстрактного базового класса [`numbers.Rational`](https://python-all.ru/3.1/library/numbers.html#numbers.Rational) и реализует все методы и операции этого класса. Экземпляры [`Fraction`](https://python-all.ru/3.1/library/fractions.html#fractions.Fraction) хешируемы и должны рассматриваться как неизменяемые. Кроме того, [`Fraction`](https://python-all.ru/3.1/library/fractions.html#fractions.Fraction) имеет следующие методы:4950#### `from_float(flt)`5152Этот метод класса создает объект5354[`Fraction`](https://python-all.ru/3.1/library/fractions.html#fractions.Fraction)5556, представляющий точное значение5758*flt*5960, который должен быть6162[`float`](https://python-all.ru/3.1/library/functions.html#float)6364. Имейте в виду, что6566`Fraction.from_float(0.3)`6768не равно значению6970`Fraction(3, 10)`7172#### `from_decimal(dec)`7374Этот метод класса создает7576[`Fraction`](https://python-all.ru/3.1/library/fractions.html#fractions.Fraction)7778, представляющий точное значение7980*dec*8182, который должен быть экземпляром8384[`decimal.Decimal`](https://python-all.ru/3.1/library/decimal.html#decimal.Decimal)8586.8788#### `limit_denominator(max_denominator=1000000)`8990Находит и возвращает ближайший [`Fraction`](https://python-all.ru/3.1/library/fractions.html#fractions.Fraction) к `self`, у которого знаменатель не превышает max\_denominator. Этот метод полезен для поиска рациональных приближений к заданному числу с плавающей запятой:9192```python93>>> from fractions import Fraction94>>> Fraction('3.1415926535897932').limit_denominator(1000)95Fraction(355, 113)96```9798или для восстановления рационального числа, представленного в виде числа с плавающей точкой:99100```python101>>> from math import pi, cos102>>> Fraction.from_float(cos(pi/3))103Fraction(4503599627370497, 9007199254740992)104>>> Fraction.from_float(cos(pi/3)).limit_denominator()105Fraction(1, 2)106```107108#### `__floor__()`109110Возвращает наибольшее [`int`](https://python-all.ru/3.1/library/functions.html#int) `<= self`. Этот метод также можно вызвать через функцию [`math.floor()`](https://python-all.ru/3.1/library/math.html#math.floor):111112```python113>>> from math import floor114>>> floor(Fraction(355, 113))1153116```117118#### `__ceil__()`119120Возвращает наименьшее121122[`int`](https://python-all.ru/3.1/library/functions.html#int)123124`>= self`125126. Этот метод также можно вызвать через функцию127128[`math.ceil()`](https://python-all.ru/3.1/library/math.html#math.ceil)129130.131132#### `__round__()`133134#### `__round__(ndigits)`135136Первая версия возвращает ближайшее137138[`int`](https://python-all.ru/3.1/library/functions.html#int)139140к141142`self`143144, округляя половину до ближайшего четного. Вторая версия округляет145146`self`147148до ближайшего кратного149150`Fraction(1, 10**ndigits)`151152(логически, если153154`ndigits`155156отрицательно), также округляя половину к четному. Этот метод также можно вызвать через функцию157158[`round()`](https://python-all.ru/3.1/library/functions.html#round)159160.161162#### `fractions.gcd(a, b)`163164Возвращает наибольший общий делитель целых чисел165166*a*167168и169170*b*171172. Если либо173174*a*175176, либо177178*b*179180не равно нулю, то абсолютное значение181182`gcd(a, b)`183184является наибольшим целым числом, которое делит как185186*a*187188, так и189190*b*191192.193194`gcd(a,b)`195196имеет тот же знак, что и197198*b*199200, если201202*b*203204не равно нулю; в противном случае он принимает знак205206*a*207208.209210`gcd(0, 0)`211212возвращает213214`0`215216.217218> **См. также**219>220> **Модуль [`numbers`](https://python-all.ru/3.1/library/numbers.html#module-numbers)**221>222> Абстрактные базовые классы, составляющие числовую иерархию.223