Creare una Calcolatrice Personalizzata

Il tuo compito è creare una classe Number che utilizzi i metodi speciali di Python (__add__, __sub__, __mul__, __truediv__) per eseguire operazioni matematiche. Tuttavia, la classe deve essere robusta e in grado di gestire varie eccezioni che possono verificarsi durante queste operazioni:
  • Se viene tentata una divisione per zero, dovrebbe essere sollevata un'eccezione ZeroDivisionError con il messaggio Cannot divide by zero.
  • Se uno degli input non può essere convertito in un numero, dovrebbe essere sollevata un'eccezione ValueError con il messaggio Invalid number input.
  • Se l'operatore non è un Number, dovrebbe essere sollevata un'eccezione TypeError con il messaggio Operator must be a Number.
  • Inoltre, dovresti implementare un'eccezione personalizzata, UnsupportedOperatorError, che eredita da ValueError, con il messaggio Unsupported operator. Questa eccezione dovrebbe essere sollevata se viene tentata un'operazione non supportata dalla classe. Questo include __floordiv__, __mod__, __pow__, __lshift__, __rshift__, __and__, __xor__, __or__.
Tutti i metodi speciali validi dovrebbero restituire un oggetto Number.
Nota: Non dimenticare di implementare il metodo speciale __str__ per restituire il valore di Number.
Input
Output
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