Python中的中缀到前缀转换
我想做一个中缀到前缀的转换器。当我运行代码时,字符串中的运算符发送返回字符串开头的所有运算符 如何修复下面的代码Python中的中缀到前缀转换,python,prefix,infix-notation,Python,Prefix,Infix Notation,我想做一个中缀到前缀的转换器。当我运行代码时,字符串中的运算符发送返回字符串开头的所有运算符 如何修复下面的代码 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
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)")
不要重新发明轮子。改用解析器生成器。例如,(Python
lex
-yacc
)是一个很好的选择。您可以从查看开始,或者在产生式规则本身中进行转换,或者生成一个抽象语法树,该树配备了返回前缀、中缀或后缀符号的扁平化方法。请注意,这三者之间的区别在于,在语法树的深度优先遍历过程中,运算符是按前置、中间还是后置顺序插入的(可以作为单个函数实现,也可以递归实现,后者会导致更简单、更模块化的代码)。发布此答案可能已经晚了,但我也将此作为其他人的参考。看起来,你已经解决了从中缀到后缀的转换问题。如果是这样,您可以使用相同的算法和代码将文本转换为前缀符号
您所需要做的就是先反转文本,然后通过算法传递文本。反转文本后,还可以将文本存储在已反转的堆栈中。处理完后,您需要将文本再次反转为原始形式,然后您将获得前缀符号
不过,请确保跟踪您在字典中比较的内容,您将不再将操作数和“(”进行比较
希望这能有所帮助。将您的代码放在其他位置而不是其他位置您的代码无效。while…的最后一行
语法不正确。预期的输出是:-*+ABC*-DE+FG
?您是否尝试过通过循环将一些打印
语句放入堆栈
方法和策略位置,以便您可以执行以下操作发生了什么事?你有没有试过用铅笔和纸手工运行你的算法,以确保它达到你期望的效果?我还应该提到,你的数字标记化需要修复,除非你只向程序输入一位数。在这种情况下,我只输入一位数。一个手工制作的解决方案可以是建立