Stack experiment

kyosohma at gmail.com kyosohma at gmail.com
Tue Apr 3 12:23:26 EDT 2007


On Apr 3, 11:17 am, Steve Holden <s... at holdenweb.com> wrote:
> t... 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

Steve,

How do you do "tokenList = split(expr)"? There is no builtin called
"split".

Mike




More information about the Python-list mailing list