位置: 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操作界面)

  • 小规模纳税人的企业所得税税率
  • 中税协是什么意思
  • 税差理论名词解释
  • 税后净利润怎么算股价
  • 股权转让所得如何申报个税
  • 自然人独资是小规模纳税人吗
  • 企业所得税必须计提吗?什么时候计提?
  • 用友t3普及版价格
  • 怎么识别发票是否含税
  • 自产农产品增值税申报表填10行吗
  • 专用存款账户需要备案吗
  • 车间报销费用的会计分录
  • 一次性付清货款要交税吗
  • 劳动合同的履行包括什么原则
  • 其他货币资金的概念
  • 损失性费用的会计科目有
  • 公司招待技术维护方案
  • 基建拨款账务处理
  • 个人社保费需要交多少年
  • 个税所得期和所得税区别
  • php的api调用方法
  • 教学用具属于什么项目类别
  • PHP:ignore_user_abort()的用法_misc函数
  • 发行债券会计分录怎么写
  • 甘油三血脂高怎么办
  • 最小的成像传感器
  • 矿产资源补偿费计入管理费用吗
  • php的implode
  • 关于商业承兑汇票的多选题有哪些
  • 员工奖励现金如何做账
  • 收到银行承兑汇票
  • 结转损益的凭证需要打印吗
  • 农民专业合作社连续几年未从事经营活动吊销营业执照
  • event loop exception null
  • 小规模纳税人与一般纳税人的区别表现在小规模纳税人
  • 申请开立账户的请示
  • 企业法人需要本人到场吗
  • 怎么定义一个注解
  • sqlserver2019性能
  • 开收据是财务还是出纳
  • 加计抵减和加计扣除是一个意思吗
  • 企业付的房租税费会计分录
  • 盈余公积提取是什么意思
  • 购进固定资产的账务处理
  • 折旧啥意思
  • 按公允价值入账的有哪些
  • 建筑图纸设计费多少钱
  • 退税勾选选成抵扣勾选怎么办
  • 管理费用中的水电费怎么记账
  • 小规模纳税人变更一般纳税人条件
  • 新成立的企业可以申请一般纳税人吗
  • 所附原始凭证的作用是
  • sap批量导入
  • sql语句中截取字符串
  • mysql5.7版本下载
  • Linux下MySQL 5.5/5.6的修改字符集编码为UTF8的方法
  • bios设置或coms设置完整的说法
  • mysql8安装步骤
  • ubuntu命令行中文乱码怎么解决
  • centos文件备份
  • mac 的 safari 浏览器
  • VirtualBOX给CentOS建共享文件夹的方法
  • centos8指令
  • .intro
  • node .js
  • 同一个文件夹中的文件可以同名吗
  • css美化表单 案例
  • vue中父子组件如何通信的
  • Android Studio 1.1.0 配置androidannotations框架
  • android aoa
  • vue实战案例
  • jquery时钟插件
  • JAVAscript字符串类型单引号和双引号意一样吗
  • python坑人代码
  • 非道路机械环保标志图片
  • 河南地税网上个税怎么交
  • 多缴税款可以抵顶以后欠费的税款吗
  • 个体户注销还要交税吗?
  • 上海嘉定小学入学积分
  • 中国税务网官网1732171695993732.2418.61431871
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设