独自の計算機を作成する
Pythonのマジックメソッド(
__add__
、__sub__
、__mul__
、__truediv__
)を利用して数値演算を行うNumber
クラスを作成してください。ただし、このクラスは堅牢であり、これらの演算中に発生しうるさまざまな例外を適切に処理できる必要があります。- ゼロによる除算が試みられた場合、
Cannot divide by zero
というメッセージとともにZeroDivisionError
を発生させてください。
- 入力が数値に変換できない場合、
Invalid number input
というメッセージとともにValueError
を発生させてください。
- 演算子が
Number
型でない場合、Operator must be a Number
というメッセージとともにTypeError
を発生させてください。
- また、
ValueError
を継承したカスタム例外UnsupportedOperatorError
を実装してください。この例外はUnsupported operator
というメッセージを持ちます。このエラーは、クラスでサポートされていない操作が試みられた場合に発生させてください。対象となるマジックメソッドは、__floordiv__
、__mod__
、__pow__
、__lshift__
、__rshift__
、__and__
、__xor__
、__or__
です。
有効なマジックメソッドはすべて
Number
オブジェクトを返すようにしてください。注意:
Number
の値を返すために__str__
マジックメソッドを実装することを忘れないでください。入力 | 出力 |
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