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

  • 递延所得税如何影响所得税费用
  • 递延所得税负债怎么算
  • 企业所得税季报和年报的区别
  • 企业所得税上个月没有计提本月怎么计提
  • 报废的机器设备怎么处理
  • 抵扣白条账单是怎么回事
  • 想要自己开厂应该怎么做
  • 蔬菜坏了还能吃吗
  • 自创商誉企业所得税可以扣除吗
  • 收到利息计入哪个会计科目
  • 银行汇兑计入哪个会计科目?
  • 应付利息与应付利息区别
  • 提供物业管理服务税率
  • 涉农贷款损失
  • 房产企业可计入开发成本的利息如何确定?
  • 增值税预缴税额可以改吗
  • 免征增值税转入什么科目
  • 金税盘百旺和航天
  • 多交附加税怎么做账
  • 车辆的增值税和消费税
  • 农业合作社零申报流程
  • 融资租赁固定资产会计处理
  • php怎么把数组变成字符串
  • 代购机票骗局
  • 房地产企业销售无产权车位
  • 辞退补偿金额怎么做账
  • 个人补缴的养老全部划入个人账户
  • 工业企业采购部门职责
  • 村集体经济组织架构
  • 房地产开发企业会计制度
  • 来料加工企业转型是转成两个企业吗
  • 劳务报酬所得缴纳税款是公司代缴吗
  • 持有至到期投资账务处理
  • 命令行mkdir创建文件夹
  • PHP+Apache+Mysql环境搭建教程
  • php判断字符串是否包含字母
  • 花生油代加工厂
  • 个人个税汇算清缴怎么做
  • 帝国cms怎么调用文章随机段落
  • 开票额度超了怎么办
  • 建筑业周转材料
  • 如果租房没有合同怎么办
  • 农产品税率2020年计算
  • 账务核对包括哪些内容
  • 上月暂估的成本这月收到票怎么做
  • 跨月报销的算当月还是上个月的
  • 个税滞纳金影响企业吗
  • 原材料暂估的业务包括
  • 消防公司会计分录
  • 资金结存属于资产类吗
  • 车船税怎么抵扣进项
  • 开服装店如何做销售
  • 所有者权益是什么意思
  • 小规模纳税人如何建账记账及流程
  • sqli
  • linux下mysql 5.7.16 免安装版本图文教程
  • 如何彻底释放k50至尊版性能
  • docker untagged
  • mac屏幕共享软件
  • win7精简版安装net4.0
  • ubuntu root账户默认密码
  • centos文本编辑器
  • sethook.exe - sethook进程是什么文件 有何作用
  • Linux使用scp命令进行文件远程的上传或下载
  • linux k
  • 深入解析windows第7版
  • win7安装要求配置
  • jquery网站开发
  • 你所不知道的童话动画版免费观看第二季
  • unity mesh编程
  • 主机端口扫描程序设计python
  • JavaScript的函数中只能写一条代码语句
  • jquery使用教程
  • 发票在国家税务总局网站查不到能用吗
  • 湖北税务网上登录
  • 武汉市国税局长
  • 减免税的三种方式
  • 小微企业 2018
  • 撤销存款证明需要什么手续
  • 上海房产税交易中心电话
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设