位置: IT常识 - 正文

用Python举例实现逆波兰表达式(用python写)

编辑:rootadmin

推荐整理分享用Python举例实现逆波兰表达式(用python写),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词: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()
本文链接地址:https://www.jiuchutong.com/zhishi/304618.html 转载请保留说明!

上一篇:Uncaught SyntaxError: Unexpected token '<' (at 报错

下一篇:pycharm操作redis(pycharm操作界面)

  • 房产税一律按房产价值计征
  • 一般纳税人是否可以开普票
  • 做网站的费用会计分录
  • 库存商品损失怎么做账
  • 个人劳务所得税税率表最新2022
  • 物业代收费:有关法律
  • 商品削价准备怎么算
  • 银行转账短信提醒还要收费吗
  • 免税货物开成含税率的怎么报税?
  • 退款给客户怎么记分录
  • 注册资本没有到账怎么做账
  • 发票作废税金怎么算
  • etc预付卡发票能不能报销
  • 会计人员应掌握的知识
  • 购物发票的税是由谁承担
  • 野生药才收购网
  • 无票收入冲回会计分录
  • 全资子公司效益怎么算
  • 子公司能转让吗
  • 小规模纳税人有销无进是什么意思
  • 业务招待费例子
  • 表格怎样打印在一张a4纸上
  • 调整低电量通知怎么设置
  • 毛利润,纯利润
  • 主营业务成本与其他业务成本的区别
  • mgaqdesk.exe进程有什么作用 mgaqdesk进程查询
  • 增资导致的股权稀释涉税吗
  • python字符串操作作业
  • 销售滞后税务处理
  • vue pending
  • PHP中spl_autoload_register()函数用法实例详解
  • php数据查询
  • php高级程序招聘
  • 研发的无形资产
  • html+css网页设计
  • Spring Boot 3.0 正式发布,王炸!!
  • db2数据库备份文件为bkd格式
  • mongodb聚合函数详解
  • 固定资产处置是当月还是下月
  • 普通发票可抵税吗
  • sql server 实例
  • 清洁费用属于哪个会计科目
  • 增值税纳税申报类型有哪些
  • 收据能否入账
  • 公司买的材料做什么分录
  • 如何降低应收账款成本
  • 销售货物的运费的税率怎么算
  • 失业保险金退回短信
  • 分公司和总公司在一个地方
  • 存货毁损损失应计入的科目是
  • 公对公房产过户
  • 小规模纳税人年收入不能超过多少
  • 金税盘维护费抵减分录
  • 增值税版本升级
  • 坏账准备纳税调增吗
  • 公司网站维护费用计哪个科目
  • 采购成品油会计分录
  • 数据库设计三大范式
  • SQL Server 2008 到底需要使用哪些端口?
  • sqlserver升级到2016
  • win7怎么打开程序
  • win8.1企业版激活密钥最新
  • win7系统硬盘
  • winxp教程
  • win10系统如何清洗打印机喷头
  • 如何灵活使用蒙恬
  • 如何彻底解决win10自动重启
  • win10系统自带杀毒软件
  • win10家庭版如何设置永不更新
  • Linux CentOS系统下tomcat配置ssl教程
  • Android自定义控件高级进阶与精彩实例
  • opengl渲染流程图
  • js四舍五入两位小数
  • vue-cli 使用 报错
  • vue组件互相嵌套
  • Unity的WWW类的用法整理
  • 手机运行node.js
  • js类的静态属性
  • 北京市国家税务局电话
  • 进口哪些情况要交税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设