Stack experiment

Steve Holden steve at holdenweb.com
Tue Apr 3 18:17:52 CEST 2007


tom at finland.com 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




More information about the Python-list mailing list