Creando una Calculadora Personalizada

Tu tarea es crear una clase Number que utilice los métodos mágicos de Python (__add__, __sub__, __mul__, __truediv__) para realizar operaciones matemáticas. Sin embargo, la clase debe ser robusta y ser capaz de manejar varias excepciones que pueden ocurrir durante estas operaciones:
  • Si se intenta una división por cero, se debe generar un ZeroDivisionError con el mensaje Cannot divide by zero.
  • Si alguna de las entradas no puede convertirse a un número, se debe generar un ValueError con el mensaje Invalid number input.
  • Si el operador no es un Number, se debe generar un TypeError con el mensaje Operator must be a Number.
  • Además, debes implementar una excepción personalizada, UnsupportedOperatorError, que herede de ValueError, con el mensaje Unsupported operator. Este error debe generarse si se intenta una operación que no es soportada por la clase. Esto incluye __floordiv__, __mod__, __pow__, __lshift__, __rshift__, __and__, __xor__, __or__.
Todos los métodos mágicos válidos deben devolver un objeto Number.
Nota: No olvides implementar el método mágico __str__ para retornar el valor de Number.
Entrada
Salida
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