Criando uma Calculadora Personalizada
O seu desafio é criar uma classe
Number
que utiliza os métodos mágicos do Python (__add__
, __sub__
, __mul__
, __truediv__
) para realizar operações matemáticas. No entanto, a classe precisa ser robusta e capaz de lidar com várias exceções que podem ocorrer durante essas operações:- Se uma divisão por zero for tentada, deve ser levantada uma
ZeroDivisionError
com a mensagemCannot divide by zero
.
- Se qualquer uma das entradas não puder ser convertida em um número, deve ser levantada uma
ValueError
com a mensagemInvalid number input
.
- Se o operador não for um
Number
, deve ser levantada umaTypeError
com a mensagemOperator must be a Number
.
- Além disso, você deve implementar uma exceção personalizada,
UnsupportedOperatorError
, que herda deValueError
, com a mensagemUnsupported operator
. Este erro deve ser levantado se uma operação que não é suportada pela classe for tentada. Isso inclui__floordiv__
,__mod__
,__pow__
,__lshift__
,__rshift__
,__and__
,__xor__
,__or__
.
Todos os métodos mágicos válidos devem retornar um objeto
Number
.Nota: Não se esqueça de implementar o método mágico
__str__
para retornar o valor do Number
.Entrada | Saída |
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