Класс Fraction
Вы разрабатываете простой калькулятор, и ваша задача — создать класс Python
Fraction
, представляющий математическую дробь.Класс должен иметь 5 магических методов:
__add__
: Этот метод принимает другой объект Fraction в качестве аргумента и возвращает новый объект Fraction, который является суммой исходной дроби и дроби-аргумента.
__sub__
: Этот метод принимает другой объект Fraction в качестве аргумента и возвращает новый объект Fraction, который является результатом вычитания дроби-аргумента из исходной дроби.
__mul__
: Этот метод принимает другой объект Fraction в качестве аргумента и возвращает новый объект Fraction, который является результатом умножения исходной дроби на дробь-аргумент.
__truediv__
: Этот метод принимает другой объект Fraction в качестве аргумента и возвращает новый объект Fraction, который является результатом деления исходной дроби на дробь-аргумент. Если числитель дроби-аргумента равен нулю, этот метод должен вызвать исключениеZeroDivisionError
.
__str__
: Этот метод возвращает дробь в форматеnumerator / denominator
. Метод должен возвращать строковое представление дроби в ее упрощенном виде (например, "2 / 3" вместо "4 / 6"). Чтобы упростить дробь, разделите числитель и знаменатель на их наибольший общий делитель (НОД).
Класс Fraction должен иметь возможность создаваться с двумя параметрами:
numerator
и denominator
. Оба параметра должны быть целыми числами, при этом denominator
по умолчанию равен 1
, если не указан. Если знаменатель равен 0, программа должна вызвать исключение ValueError
в методе __init__
.Ввод | Вывод |
f1 = Fraction(1, 2); f2 = Fraction(1, 3); f3 = f1 + f2; print(f3) | 5 / 6 |
f1 = Fraction(1, 2); f2 = Fraction(1, 3); f3 = f1 - f2; print(f3) | 1 / 6 |
f1 = Fraction(1, 2); f2 = Fraction(1, 3); f3 = f1 * f2; print(f3) | 1 / 6 |
f1 = Fraction(1, 2); f2 = Fraction(1, 3); f3 = f1 / f2; print(f3) | 3 / 2 |
f1 = Fraction(1, 2); f2 = Fraction(0, 3); f3 = f1 / f2; print(f3) | ZeroDivisionError: You can't divide by zero! |
f1 = Fraction(1, 0); | ValueError: The denominator cannot be zero! |
Constraints
Time limit: 1 seconds
Memory limit: 512 MB
Output limit: 1 MB