位置: IT常识 - 正文
推荐整理分享用Python举例实现逆波兰表达式(用python写),希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:python的例子,利用python进行,利用python,python运用,利用python进行,利用python进行,python如何用,python如何用,内容如对您有帮助,希望把文章链接给更多的朋友!
逆波兰表达式是编译原理中的一种基本表达式,利用Python语言也可以实现逆波兰表达式的输出,这里举例实践说明:
什么是逆波兰表达式?
逆波兰表达式又叫做后缀表达式。在通常的表达式中,二元运算符总是置于与之相关的两个运算对象之间,所以,这种表示法也称为中缀表示。波兰逻辑学家J.Lukasiewicz于1929年提出了另一种表示表达式的方法。按此方法,每一运算符都置于其运算对象之后,故称为后缀表示。
举例实现:
#-*-coding:utf-8-*-symbol_priority={}symbol_priority[0]=['#']symbol_priority[1]=['(']symbol_priority[2]=['+','-']symbol_priority[3]=['*','/']symbol_priority[4]=[')']defcomparePriority(symbol,RPN_stack,symbol_stack):'''Compareprioritybetweentwosymbols'''globalsymbol_priorityiflen(symbol_stack)>0:symbol_pop=symbol_stack.pop()else:returnforlistinsymbol_priority.values():if(symbolinlist)and(symbol_popinlist):'''samepriority'''symbol_stack.append(symbol_pop)symbol_stack.append(symbol)returnelifsymbolinlist:'''symbolissmaller'''RPN_stack.append(symbol_pop)#recusioncallcomparePriority(symbol,RPN_stack,symbol_stack)returnelifsymbol_popinlist:'''symbolisbigger'''symbol_stack.append(symbol_pop)symbol_stack.append(symbol)returnelse:continuesymbol_stack.append(symbol_pop)returndefscanEveryone(input_string,RPN_stack,symbol_stack):forchininput_string:ifch.isdigit():RPN_stack.append(ch)else:iflen(symbol_stack)>0:ifch=='(':symbol_stack.append(ch)elifch==')':whileTrue:symbol_pop=symbol_stack.pop()ifsymbol_pop=='(':breakelse:RPN_stack.append(symbol_pop)else:comparePriority(ch,RPN_stack,symbol_stack)else:symbol_stack.append(ch)defscanInput(RPN_stack,symbol_stack):input_string=raw_input()input_string+='#'scanEveryone(input_string,RPN_stack,symbol_stack)defcalRPN(RPN_stack):value_stack=[]RPN_stack.append('#')forvalueinRPN_stack:ifvalue=='#':returnvalue_stack.pop()breakifvalue.isdigit():value_stack.append(value)else:right_value=value_stack.pop()left_value=value_stack.pop()cal_string=left_value+value+right_valuevalue_stack.append(str(eval(cal_string)))defmain():RPN_stack=[]symbol_stack=[]scanInput(RPN_stack,symbol_stack)printcalRPN(RPN_stack)if__name__=='__main__':main()#-*-coding:utf-8-*-symbol_priority={}symbol_priority[0]=['#']symbol_priority[1]=['(']symbol_priority[2]=['+','-']symbol_priority[3]=['*','/']symbol_priority[4]=[')']defcomparePriority(symbol,RPN_stack,symbol_stack):'''Compareprioritybetweentwosymbols'''globalsymbol_priorityiflen(symbol_stack)>0:symbol_pop=symbol_stack.pop()else:returnforlistinsymbol_priority.values():if(symbolinlist)and(symbol_popinlist):'''samepriority'''symbol_stack.append(symbol_pop)symbol_stack.append(symbol)returnelifsymbolinlist:'''symbolissmaller'''RPN_stack.append(symbol_pop)#recusioncallcomparePriority(symbol,RPN_stack,symbol_stack)returnelifsymbol_popinlist:'''symbolisbigger'''symbol_stack.append(symbol_pop)symbol_stack.append(symbol)returnelse:continuesymbol_stack.append(symbol_pop)returndefscanEveryone(input_string,RPN_stack,symbol_stack):forchininput_string:ifch.isdigit():RPN_stack.append(ch)else:iflen(symbol_stack)>0:ifch=='(':symbol_stack.append(ch)elifch==')':whileTrue:symbol_pop=symbol_stack.pop()ifsymbol_pop=='(':breakelse:RPN_stack.append(symbol_pop)else:comparePriority(ch,RPN_stack,symbol_stack)else:symbol_stack.append(ch)defscanInput(RPN_stack,symbol_stack):input_string=raw_input()input_string+='#'scanEveryone(input_string,RPN_stack,symbol_stack)defcalRPN(RPN_stack):value_stack=[]RPN_stack.append('#')forvalueinRPN_stack:ifvalue=='#':returnvalue_stack.pop()breakifvalue.isdigit():value_stack.append(value)else:right_value=value_stack.pop()left_value=value_stack.pop()cal_string=left_value+value+right_valuevalue_stack.append(str(eval(cal_string)))defmain():RPN_stack=[]symbol_stack=[]scanInput(RPN_stack,symbol_stack)printcalRPN(RPN_stack)if__name__=='__main__':main()上一篇:Uncaught SyntaxError: Unexpected token '<' (at 报错
下一篇:pycharm操作redis(pycharm操作界面)
友情链接: 武汉网站建设