import numbers
import sys
[docs]class CalculatorError(Exception):
"""An exception class for Calculator"""
[docs]class Calculator:
"""A terrible calculator."""
[docs] def add(self, a, b):
self._check_operand(a)
self._check_operand(b)
return a + b
[docs] def subtract(self, a, b):
return a - b
[docs] def multiply(self, a, b):
return a * b
[docs] def divide(self, a, b):
try:
return a / b
except ZeroDivisionError:
raise CalculatorError("Can't divide by zero.")
def _check_operand(self, operand):
if not isinstance(operand, numbers.Number):
raise CalculatorError(f"'{operand}'' was not a number")
if __name__ == "__main__":
print("Let's calculate!")
calculator = Calculator()
operations = [
calculator.add,
calculator.subtract,
calculator.multiply,
calculator.divide,
]
while True:
for i, operation in enumerate(operations, start=1):
print(f"[{i}]: {operation.__name__}")
print("q: quit")
operation = input("Pick an operation: ")
if operation == "q":
sys.exit()
op = int(operation)
a = float(input("What is a? "))
b = float(input("What is b? "))
try:
result = operations[op - 1](a, b)
print(f"Result is: {result}")
except CalculatorError as ex:
print(ex)
except IndexError as ex:
print(f"WARNING: choosen operation is not in the list above. \n{ex}")