fork download
  1. import math
  2. ops = {
  3. '+': float.__add__,
  4. '-': float.__sub__,
  5. '*': float.__mul__,
  6. 'x': float.__mul__,
  7. '/': float.__truediv__,
  8. '//': float.__floordiv__,
  9. '%': float.__mod__,
  10. '^': pow,
  11. '!': math.factorial
  12. }
  13. unary_ops = ('!',)
  14. arg_count = {ops[op]: 1 if op in unary_ops else 2 for op in ops}
  15.  
  16. def evaluate(expr):
  17. stack = []
  18. for token in expr.split():
  19. if token in ops:
  20. op = ops[token]
  21. args = reversed([stack.pop() for _ in range(arg_count[op])])
  22. stack.append(float(op(*args)))
  23. else:
  24. stack.append(float(token))
  25. result = stack[0]
  26. return int(result) if result.is_integer else result
  27.  
  28. print(evaluate('0.5 1 2 ! * 2 1 ^ + 10 + *'))
  29. print(evaluate('1 2 3 4 ! + - / 100 *'))
  30. print(evaluate('100 807 3 331 * + 2 2 1 + 2 + * 5 ^ * 23 10 558 * 10 * + + *'))
Success #stdin #stdout 0s 9992KB
stdin
Standard input is empty
stdout
7
-4
18005582300