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 mensagem Cannot divide by zero.
  • Se qualquer uma das entradas não puder ser convertida em um número, deve ser levantada uma ValueError com a mensagem Invalid number input.
  • Se o operador não for um Number, deve ser levantada uma TypeError com a mensagem Operator must be a Number.
  • Além disso, você deve implementar uma exceção personalizada, UnsupportedOperatorError, que herda de ValueError, com a mensagem Unsupported 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

To check your solution you need to sign in
Sign in to continue