在Python中使用postix转换

时间:2014-12-21 02:47:32

标签: python stack postfix-notation infix-notation

我已经开始在Python中解决数据结构问题。我正在实施infix到postfix但不能在我的程序中调试错误。我执行连接操作的最终返回语句的输入类型为NONE。

当我开始调试时,我发现在这部分代码中,在第一次推送操作(for *)之后出现了问题。之后,当我正在执行pop()时,它返回NONE而不是返回*。有人可以指出,这里的错误是什么?

    *else:
        while (not s.isEmpty()) and (prec[s.peek()] >= prec[token]):
            #print token
            outlst.append(s.pop())
            #print outlst

        s.push(token)
        print (s.peek())*

中缀到后缀转换:

from StackClass import StackClass

def infixtopostfix(infixexpr):

    s=StackClass()
    outlst=[]
    prec={}
    prec['/']=3
    prec['*']=3
    prec['+']=2
    prec['-']=2
    prec['(']=1
    oplst=['/','*','+','-']

    tokenlst=infixexpr.split()
    for token in tokenlst:
        if token in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' or token in '0123456789':
            outlst.append(token)

        elif token == '(':
            s.push(token)

        elif token == ')':
            topToken=s.pop()
            while topToken != '(':
                outlst.append(topToken)
                topToken=s.pop()
        else:
            while (not s.isEmpty()) and (prec[s.peek()] >= prec[token]):
                #print token
                outlst.append(s.pop())
                #print outlst

            s.push(token)
            print (s.peek())

    while not s.isEmpty():
        opToken=s.pop()
        outlst.append(opToken)
        #print outlst
    return outlst
    #return " ".join(outlst)

print (infixtopostfix("A * B + C * D"))

1 个答案:

答案 0 :(得分:3)

您的代码适用于我,拥有自己的堆栈实现。

我得到['A', 'B', '*', 'C', 'D', '*', '+']的输出。

我怀疑问题可能出在你的堆栈实现中。那是什么样的?

这是我的(我确定不太理想!):

class StackClass:

    def __init__(self, itemlist=[]):
        self.items = itemlist

    def isEmpty(self):
        if self.items == []:
            return True
        else:
            return False

    def peek(self):
        return self.items[-1:][0]

    def pop(self):
        return self.items.pop()

    def push(self, item):
        self.items.append(item)
        return 0