Сравнение Fraction с int в Python

Сравнение Fraction с int в Python

@python_quiz

Разберем этот квиз

Коротко: приведённый код выведет True. Ниже — почему так происходит, разбор предложенных вариантов и несколько демонстраций.

Условие и исходный код

Код, который рассматриваем:

python

Здесь используется класс 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" — неверно: умножение поддерживается и не вызывает исключения.

Демонстрация и дополнительные примеры

Посмотрим на поведение прямо в коде:

python

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

python

Заметка: сравнение Fraction с float может быть подвержено особенностям представления float (округления). Сравнение с int безопаснее и точнее в смысле рациональной арифметики.

Итог

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

Report Page