【发布时间】:2014-09-22 06:16:58
【问题描述】:
我想为前缀转换器做一个中缀。当我运行代码时,字符串中的运算符将所有运算符发送到返回字符串的开头。
如何修复下面的代码?
class Stack:
def __init__(self):
self.a = []
def isEmpty(self):
return self.a == []
def push(self,i):
self.a.append(i)
def pop(self):
return self.a.pop()
def peek(self):
return self.a[len(self.a)-1]
def infixToPrefix(s):
prec = {'/':3,'*':3,'+':2,'-':2,'^':4,'(':1}
opStack = Stack()
prefixList = []
temp = []
for token in s:
if token in "ABCDEFGHIJKLMNOPQRSTUVWXYZ" or token in "0123456789":
prefixList.append(token)
elif token == '(':
opStack.push(token)
elif token == ')':
topToken = opStack.pop()
while topToken != '(':
temp.append(topToken)
topToken = opStack.pop()
prefixList = temp + prefixList
temp = []
else:
while (not opStack.isEmpty()) and \
(prec[opStack.peek()]>= prec[token]):
temp.append(opStack.pop())
prefixList = temp + prefixList
temp = []
opStack.push(token)
while not opStack.isEmpty():
temp.append(opStack.pop())
prefixList = temp + prefixList
return ''.join(prefixList)
print infixToPrefix("(A+B)*C-(D-E)*(F+G)")
【问题讨论】:
-
放置您的代码而不是其他站点
-
您的代码无效。最后一行
while...语法错误。 -
预期输出是:
-*+ABC*-DE+FG吗?您是否尝试过将一些print语句放入您的Stack方法和循环中的战略位置,以便您可以了解正在发生的事情?您是否尝试过用铅笔和纸手动运行您的算法,以确保它符合您的预期? -
我还应该提到您的数字标记需要修复,除非您只向程序提供单个数字。
-
在这种情况下我只输入一位数字
标签: python prefix infix-notation