ООП · 24 из 27
Класс «Дробь»
Лабораторная «классы». Борис Аркадьевич запрещает float на весь семестр: «0.1 + 0.2 у Python — не 0.3, а 0.30000000000000004. Для денег и точных вычислений нужны настоящие дроби». Задание — класс Drob, который сам себя сокращает, держит знак в числителе и умеет четыре действия — и с дробями, и с целыми числами.
Что сделать
Напишите класс Drob — несократимую дробь со знаком в числителе, которая складывается, вычитается, умножается, делится и сравнивается с дробями и целыми.
Что приходит
chislitel— числитель, целое числоznamenatel— знаменатель, целое число, по умолчанию 1; ноль —ZeroDivisionError
Что должен уметь
Объект с полями chislitel и znamenatel (дробь несократима, знаменатель больше нуля), действиями + - * / и == с дробями и целыми, видом Drob(3, 4) в repr и 3/4 в str.
Допишите класс Drob в редакторе справа.
Проверка создаёт его объекты и зовёт методы — то, что напечатано,
на проверку не влияет.
Drob(1, 2) + Drob(1, 3): общий знаменатель 6, 3/6 + 2/6 = 5/6 — получается Drob(5, 6). А Drob(2, -4) сразу становится Drob(-1, 2): сокращена, минус переехал в числитель.
Drob(1, 2) + Drob(1, 3)
Drob(5, 6)
Конструктор Drob(chislitel, znamenatel=1) принимает целые числа. Знаменатель 0 — исключение ZeroDivisionError. Дробь сразу сокращается, знаменатель делается положительным (минус переезжает в числитель); ноль хранится как 0/1. Поля — chislitel и znamenatel.
Действия +, -, *, / — с другой дробью или с целым числом, в любом порядке (Drob(1, 2) + 1 и 1 + Drob(1, 2)); результат — новая Drob. Деление на нулевую дробь — ZeroDivisionError.
== сравнивает с дробью или целым по значению: Drob(2, 4) == Drob(1, 2) и Drob(4, 2) == 2 — True.
repr — Drob(3, 4), str — 3/4, а у целого значения — просто число: str(Drob(4, 2)) — 2.
Обсуждение
Вопросов пока нет.
Войдите, чтобы спросить.