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 messaggioCannot divide by zero
.
- Se uno degli input non può essere convertito in un numero, dovrebbe essere sollevata un'eccezione
ValueError
con il messaggioInvalid number input
.
- Se l'operatore non è un
Number
, dovrebbe essere sollevata un'eccezioneTypeError
con il messaggioOperator must be a Number
.
- Inoltre, dovresti implementare un'eccezione personalizzata,
UnsupportedOperatorError
, che eredita daValueError
, con il messaggioUnsupported 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