:order_dic = {‘*’:4,’$’:5,’/’:4,’+’:3,’-‘:3}if op1 == ‘(‘ or op2 == ‘(‘:op2 == ‘)’::if order_dic[op1] < order_dic[op2]:::prefix = ”stack = []string_tmp = ”for s in string[::-1]:if s == ‘(‘:string_tmp += ‘)’elif s == ‘)’:string_tmp += ‘(‘else:string_tmp += sfor s in string_tmp:if s.isalpha():prefix = s + prefixelse:while len(stack) and opOrder(stack[-1],s):op = stack.pop()prefix = op + prefixif len(stack) == 0 or s != ‘)’:stack.append(s)else:stack.pop()if len(stack):prefix = ”.join(stack) + prefixreturn prefixif __name__ == ‘__main__’:for string in [‘A+B*C’,'(A+B)*C’,'((A-(B+C))*D)$(E+F)’]:print string,’==>’,infix2prefix(string)
输出
>>> A+B*C ==> +A*BC(A+B)*C ==> *+ABC((A-(B+C))*D)$(E+F) ==> $*-A+BCD+EF
,最困难之时,就是我们离成功不远之日。