Erstellen eines benutzerdefinierten Taschenrechners
Deine Aufgabe ist es, eine
Number
-Klasse zu entwickeln, die die magischen Methoden von Python (__add__
, __sub__
, __mul__
, __truediv__
) nutzt, um mathematische Operationen auszuführen. Die Klasse muss jedoch robust sein und verschiedene Ausnahmen behandeln können, die während dieser Operationen auftreten können:- Wenn eine Division durch Null versucht wird, sollte ein
ZeroDivisionError
mit der MeldungCannot divide by zero
ausgelöst werden.
- Wenn eine der Eingaben nicht in eine Zahl konvertiert werden kann, sollte ein
ValueError
mit der NachrichtInvalid number input
ausgelöst werden.
- Wenn der Operator keine
Number
ist, sollte einTypeError
mit der MeldungOperator must be a Number
ausgelöst werden.
- Außerdem solltest du eine benutzerdefinierte Ausnahme
UnsupportedOperatorError
implementieren, die vonValueError
erbt und die MeldungUnsupported operator
enthält. Dieser Fehler sollte ausgelöst werden, wenn eine von der Klasse nicht unterstützte Operation versucht wird. Dazu gehören__floordiv__
,__mod__
,__pow__
,__lshift__
,__rshift__
,__and__
,__xor__
,__or__
.
Alle gültigen magischen Methoden sollten ein
Number
-Objekt zurückgeben.Hinweis: Vergiss nicht, die magische Methode
__str__
zu implementieren, um den Wert der Number
zurückzugeben.Eingabe | Ausgabe |
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