Stack experiment

Terry Reedy tjreedy at udel.edu
Tue Apr 3 12:30:54 EDT 2007


<tom at finland.com> wrote in message news:5QuQh.152$9L1.108 at read3.inet.fi...
| 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)

To see what is wrong, print tokenList.
tokenList = expr.split() is probably what you want

|     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?
| -- 
| http://mail.python.org/mailman/listinfo/python-list
| 






More information about the Python-list mailing list