Сравнение Fraction с int в Python
@python_quizРазберем этот квиз
Коротко: приведённый код выведет True. Ниже — почему так происходит, разбор предложенных вариантов и несколько демонстраций.
Условие и исходный код
Код, который рассматриваем:

Здесь используется класс Fraction из стандартного модуля fractions, который хранит рациональные числа как пару числитель/знаменатель.
Что происходит и почему результат — True
- Fraction(1, 2) представляет рациональное число 1/2.
- Умножение Fraction на целое число возвращает новый объект Fraction, представляющий результат (в данном случае 1/2 * 2 = 1/1).
- Сравнение между Fraction и int выполняется корректно на уровне рациональных чисел: дробь 1/1 равна целому 1, поэтому выражение дает True.
Важно: здесь не происходит приведения Fraction к float перед сравнением. Модуль fractions обеспечивает точную арифметику и корректное сравнение с целыми числами.
Разбор предложенных вариантов (коротко)
- "Выведет True, т.к. Fraction превращается в float перед сравнением" — неверно: сравнение с int происходит как сравнение числовых значений без ненужного приведения к float.
- "Выведет False, т.к. сравниваются разные типы (Fraction и int)" — неверно: Python поддерживает сравнение чисел разных числовых типов по их значению, и Fraction сравнивается с int корректно.
- "Выведет True, т.к. Fraction(1, 2) * 2 даёт Fraction(1,1), равный целому 1" — верное объяснение причины результата.
- "Будет
TypeErrorпри умножении Fraction на int" — неверно: умножение поддерживается и не вызывает исключения.
Демонстрация и дополнительные примеры
Посмотрим на поведение прямо в коде:

Пример с float, чтобы видеть отличие в работе с плавающей точкой:

Заметка: сравнение Fraction с float может быть подвержено особенностям представления float (округления). Сравнение с int безопаснее и точнее в смысле рациональной арифметики.
Итог
Fraction даёт точную рациональную арифметику. Умножение Fraction на int возвращает Fraction, и сравнение с целым числом происходит по значению: когда результат арифметики действительно равен единице, выражение вернёт True. Ошибок типа TypeError здесь не возникает, и приведения к float для сравнения с int не требуется.