Skip to content

Instantly share code, notes, and snippets.

@gmcclure
Created April 27, 2013 22:53
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save gmcclure/5475073 to your computer and use it in GitHub Desktop.
Programming Praxis, RPN
import sys
class RPN(object):
def __init__(self):
self._stack = []
self._expr = ''
self._operators = '+-*/'
def read_expr(self, out=sys.stdout):
self._expr = raw_input('? ')
out.write('{0:.4f}'.format(self.process_expr()) + "\n")
def process_expr(self):
tokens = self._expr.split()
for token in tokens:
if token not in self._operators:
self._stack.append(token)
else:
if len(self._stack) < 2:
print "Too few operands"
else:
op1 = self._stack.pop()
op2 = self._stack.pop()
self._stack.append(str(eval(op2 + token + op1)))
return float(self._stack[-1])
if __name__ == '__main__':
rpn = RPN()
while True:
rpn.read_expr()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment