[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?
Obviously your tokens are wrong since one of the tokens is '56 47' as the error message indicates. import re print re.split(" ([^0-9])", "56 47 + 2 *") It looks like you'd just want expr.split(). -- http://mail.python.org/mailman/listinfo/python-list