3.4 טיפול בשגיאות פתרון
def main() -> None:
welcome()
start_calculator()
print("bye!")
def welcome() -> None:
"""
welcoming the user """ welcome_message = "Amit calculator! \n" \
"syntax: > number operation number \n" \
"example: 1 + 3 \n" \
"avilable operations: +,-,*,/ \n" \
"enter /q for exit the program!"
print(welcome_message)
def start_calculator() -> None:
while True:
first_number, operation, second_number = handle_input()
if operation == "quit":
return
result = handle_calculate(first_number, operation, second_number)
print(f"res: {result}")
def handle_input() -> (int, str, int):
while True:
command = input("> ")
if command == "/q":
return 0, "quit", 0
try:
first_number, operation, second_number = command.split(" ")
first_number, second_number = int(first_number), int(second_number)
return first_number, operation, second_number
except Exception:
print("Please enter valid expression!")
def handle_calculate(first_number: int, operation: str, second_number: int) -> int:
try:
result = calculate(first_number, operation, second_number)
except ZeroDivisionError:
print("Can't divide by zero! ")
result = 0
except KeyError:
print(f"Operation {operation} doesn't exist!")
result = 0
finally:
return result
def calculate(first_number: int, operation: str, second_number: int) -> int:
"""
calculate result by given 2 integers and operation -> can be only +,-,*,/ """ actions = {
"+": add,
"-": sub,
"*": mul,
"/": div
}
function = actions[operation]
result = function(first_number, second_number)
return result
def add(first_number: int, second_number: int) -> int:
"""
Adding 2 given parametrs and return """ return first_number + second_number
def sub(first_number: int, second_number: int) -> int:
"""
Subtracting 2 given parameters and return """ return first_number - second_number
def mul(first_number: int, second_number: int) -> int:
"""
Multiplying 2 given parameters and return """ return first_number * second_number
def div(first_number: int, second_number: int) -> float:
"""
Dividing 2 given parameters and return """ return first_number / second_number
if __name__ == "__main__":
main()