http://openbookproject.net/thinkcs/python/english3e/stacks.html
class Stack:
def __init__(self):
self.items = []
def __len__(self):
return len(self.items)
def push(self, item):
self.items.append(item)
def pop(self):
return self.items.pop()
def is_empty(self):
return len(self.items == 0)
s = Stack()
s.push(54)
s.push(45)
s.push('+')
from IPython.display import IFrame
src = """
http://pythontutor.com/iframe-embed.html#code=class%20Stack%3A%0A%20%20%20%20def%20__init__%28self%29%3A%0A%20%20%20%20%20%20%20%20self.items%20%3D%20%5B%5D%0A%20%20%20%20%0A%20%20%20%20def%20__len__%28self%29%3A%0A%20%20%20%20%20%20%20%20return%20len%28self.items%29%0A%20%20%20%20%0A%20%20%20%20def%20push%28self,%20item%29%3A%0A%20%20%20%20%20%20%20%20self.items.append%28item%29%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20def%20pop%28self%29%3A%0A%20%20%20%20%20%20%20%20return%20self.items.pop%28%29%0A%20%20%20%20%0A%20%20%20%20def%20is_empty%28self%29%3A%0A%20%20%20%20%20%20%20%20return%20len%28self.items%20%3D%3D%200%29%0A%20%20%20%20%20%20%20%20%0As%20%3D%20Stack%28%29%0As.push%2854%29%0As.push%2845%29%0As.push%28'%2B'%29&codeDivHeight=400&codeDivWidth=350&cumulative=false&curInstr=0&heapPrimitives=false&origin=opt-frontend.js&py=3&rawInputLstJSON=%5B%5D&textReferences=false
"""
IFrame(src, width=900, height=500)
# given a postfix notation such as: 56 47 + 2 *, the following function evaluates the result using Stack ADT
def eval_postfix(expr):
tokens = expr.split()
stack = Stack()
for token in tokens:
token = token.strip()
if not token:
continue
if token == '+':
s = stack.pop() + stack.pop()
stack.push(s)
elif token == '*':
prod = stack.pop() * stack.pop()
stack.push(prod)
# /, and - are left as exercise
else:
stack.push(int(token))
return stack.pop()
print(eval_postfix('56 47 + 2 *'))
206
# which is same as: (56 + 47) * 2 in infix notation
eval('(56 + 47) * 2')
206