Advertisement
Guest User

Untitled

a guest
Mar 21st, 2019
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.96 KB | None | 0 0
  1. #!/bin/python
  2.  
  3. OPERATORS = ['+', '-', '*', '/']
  4.  
  5. def maybe(func):
  6. """Turns Exceptions into return values."""
  7. def inner(*args):
  8. for a in args:
  9. if isinstance(a, Exception):
  10. return a
  11. try:
  12. return func(*args)
  13. except Exception as e:
  14. return e
  15. return inner
  16.  
  17. def repeat(func, until):
  18. """Repeats a function until its return value meets the stop criterion."""
  19. def inner(*args):
  20. while True:
  21. result = func(*args)
  22. if until(result):
  23. return result
  24. return inner
  25.  
  26. is_int = lambda i: isinstance(i, int)
  27. get_number = lambda: int(input('Enter an integer: '))
  28. safe_get_number = repeat(maybe(get_number), until=is_int)
  29.  
  30. is_operator = lambda o: o in OPERATORS
  31. get_operator = lambda: input('Enter an operator (+, -, *, /): ')
  32. safe_get_operator = repeat(get_operator, until=is_operator)
  33.  
  34. calculate = lambda number1, operator, number2: \
  35. number1 + number2 if operator == '+' \
  36. else number1 - number2 if operator == '-' \
  37. else number1 * number2 if operator == '*' \
  38. else number1 / number2 if operator == '/' \
  39. else None
  40.  
  41. main = lambda: calculate(
  42. safe_get_number(),
  43. safe_get_operator(),
  44. safe_get_number(),
  45. )
  46.  
  47. forever = lambda _: False
  48. main_loop = repeat(lambda: print(main()), until=forever)
  49.  
  50. main_loop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement