[EMAIL PROTECTED] wrote: > 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)
If you add a print statement here I think you will find that the tokenisation here isn't really what you want: >>> expr = "56 47 + 2 *" >>> re.split(" ([^0-9])", expr) ['56 47', '+', ' 2', '*', ''] > 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? I'd try using tokenList = split(expr) instead - this has the added benefit of removing the spaces, so you can simplify your code by removing the case that handles empty tokens and sapaces, I suspect. regards Steve -- Steve Holden +44 150 684 7255 +1 800 494 3119 Holden Web LLC/Ltd http://www.holdenweb.com Skype: holdenweb http://del.icio.us/steve.holden Recent Ramblings http://holdenweb.blogspot.com -- http://mail.python.org/mailman/listinfo/python-list