Stack experiment

tom at finland.com tom at finland.com
Tue Apr 3 11:57:53 EDT 2007


Hi! Im new to Python and doing exercise found from internet. It is 
supposed to evaluate expression given with postfix operator using 
Stack() class.

class Stack:
     def __init__(self):
         self.items = []

     def push(self, item):
         self.items.append(item)

     def pop(self):
         return self.items.pop()

     def isEmpty(self):
         return (self.items == [])

def evaluatePostfix(expr):
     import re
     tokenList = re.split(" ([^0-9])", expr)
     stack = Stack()
     for token in tokenList:
         if token == '' or token == ' ':
             continue
         if token == '+':
             sum = stack.pop() + stack.pop()
             stack.push(sum)
         elif token == '*':
             product = stack.pop() * stack.pop()
             stack.push(product)
         else:
             stack.push(int(token))
         return stack.pop()

print evaluatePostfix("56 47 + 2 *")

Errormsg:
Traceback (most recent call last):
   File "C:\*\postfix1.py", line 31, in <module>
     print evaluatePostfix("56 47 + 2 *")
   File "C:\*\postfix1.py", line 28, in evaluatePostfix
     stack.push(int(token))
ValueError: invalid literal for int() with base 10: '56 47'

How can I avoid the error and get desired result?



More information about the Python-list mailing list