On Apr 3, 10:57 am, [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) > 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 don't know why you're using the "re" module. For this, I would skip it. Change your code so that it looks like this: def evaluatePostfix(expr): tokenList = expr.split(" ") 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() # this worked for me. There may be something wrong with the "re" code in your example, but I don't know enough about that to help in that area. Mike -- http://mail.python.org/mailman/listinfo/python-list