Skip to content

Instantly share code, notes, and snippets.

@olls
Last active August 29, 2015 13:57
Show Gist options
  • Save olls/9660547 to your computer and use it in GitHub Desktop.
Save olls/9660547 to your computer and use it in GitHub Desktop.
from math import sin, cos, tan, radians, pi, e, log
inp = 'e 2 ^ ln 3 * 60 cos 8 * + 4 0.5 ^ 3 * 1 - /'.split(' ')
stack = []
operators = {
'+': (2, lambda j, k: j + k),
'-': (2, lambda j, k: j - k),
'*': (2, lambda j, k: j * k),
'/': (2, lambda j, k: j / k),
'^': (2, lambda j, k: j ** k),
'sin': (1, lambda j: sin(radians(j))),
'cos': (1, lambda j: cos(radians(j))),
'tan': (1, lambda j: tan(radians(j))),
'ln': (1, lambda j: log(j)),
'e': (0, lambda: e),
'pi': (0, lambda: pi)
}
while inp:
try:
i = float(inp[0])
num = True
except ValueError:
i = inp[0]
num = False
if num:
stack.append(i)
else:
o = operators[i]
nums = []
for n in range(o[0]):
nums.insert(0, stack.pop())
stack.append( o[1](*nums) )
inp.remove(inp[0])
print(stack[0])
@olls
Copy link
Author

olls commented Mar 26, 2014

@olls
Copy link
Author

olls commented Mar 26, 2014

Currently powers should be written like this: base exponent ^

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment