Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/python
- OPERATORS = ['+', '-', '*', '/']
- def maybe(func):
- """Turns Exceptions into return values."""
- def inner(*args):
- for a in args:
- if isinstance(a, Exception):
- return a
- try:
- return func(*args)
- except Exception as e:
- return e
- return inner
- def repeat(func, until):
- """Repeats a function until its return value meets the stop criterion."""
- def inner(*args):
- while True:
- result = func(*args)
- if until(result):
- return result
- return inner
- is_int = lambda i: isinstance(i, int)
- get_number = lambda: int(input('Enter an integer: '))
- safe_get_number = repeat(maybe(get_number), until=is_int)
- is_operator = lambda o: o in OPERATORS
- get_operator = lambda: input('Enter an operator (+, -, *, /): ')
- safe_get_operator = repeat(get_operator, until=is_operator)
- calculate = lambda number1, operator, number2: \
- number1 + number2 if operator == '+' \
- else number1 - number2 if operator == '-' \
- else number1 * number2 if operator == '*' \
- else number1 / number2 if operator == '/' \
- else None
- main = lambda: calculate(
- safe_get_number(),
- safe_get_operator(),
- safe_get_number(),
- )
- forever = lambda _: False
- main_loop = repeat(lambda: print(main()), until=forever)
- main_loop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement