Создание собственного калькулятора
Ваша задача — создать класс
Number
, использующий магические методы Python (__add__
, __sub__
, __mul__
, __truediv__
) для выполнения математических операций. Кроме того, ваш класс должен быть надежным и уметь обрабатывать различные исключения, которые могут возникнуть при этих операциях:- Если будет попытка деления на ноль, должно быть вызвано исключение
ZeroDivisionError
с сообщениемCannot divide by zero
.
- Если любой из входных аргументов не может быть преобразован в число, должно быть вызвано исключение
ValueError
с сообщениемInvalid number input
.
- Если оператор не является экземпляром
Number
, должно быть вызвано исключениеTypeError
с сообщениемOperator must be a Number
.
- Также вам нужно реализовать собственное исключение
UnsupportedOperatorError
, которое наследуется отValueError
и имеет сообщениеUnsupported operator
. Это исключение должно вызываться, если предпринимается попытка выполнения операции, не поддерживаемой классом. К таким операциям относятся:__floordiv__
,__mod__
,__pow__
,__lshift__
,__rshift__
,__and__
,__xor__
,__or__
.
Все поддерживаемые магические методы должны возвращать объект
Number
.Примечание: Не забудьте реализовать магический метод
__str__
, чтобы возвращать значение Number
.Ввод | Вывод |
a=Number(10); b=Number(2); print(a+b); print(a/b); | 12
5 |
a=Number(10); b=Number(0); print(a/b); | Cannot divide by zero |
a=Number('ten'); b=Number(2); print(a+b); | Invalid number input |
a=Number(10); b=Number(2); print(a**b); | Unsupported operator |
a=Number(10); b=2; print(a+b); | Operator must be a Number |
a = Number(10); b = Number(2); c = Number(a * b); print(c.value) | 20 |
a = Number(10); b = Number(2); c = Number((a - b) ** 2); print(c.value) | Unsupported operator |
Constraints
Time limit: 2 seconds
Memory limit: 512 MB
Output limit: 1 MB