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

  • 计提本月个人所得税
  • 会费收入增值税申报
  • 车辆购置税退税计算
  • 民办非企业收到捐赠固定资产
  • 管理费用与税金及附加哪个会影响利润
  • 没有收入可以不给抚养费吗
  • 纳税申报期限是纳税期限期满后的时间
  • 申领的发票多久过期
  • 公司成立前发生业务 成立后开票
  • 洗车费怎么做会计分录
  • 已抵扣发票冲红会计分录
  • 增值税免税是否计入营业外收入
  • 材料含税价怎么算
  • 外包代发工资怎么做账
  • 一般纳税人企业所得税政策最新2023税率
  • 管理费用和财务费用算营业成本吗
  • 发票对方认证不了怎么回事
  • 过路过桥费抵扣2021新规定
  • 管理费用进项抵扣比例是多少?怎么算
  • 金税盘没有清卡可以开票吗
  • 电器以旧换新的套路
  • 建筑业劳务分包怎样算税
  • 失控发票的账务处理
  • 税收滞纳金变化
  • 公司付电费发票怎么做账
  • 结转完工产品成本的计算
  • 哪些情况需要补钙
  • 购货方收到红字发票计入进项税转出还是进项税额负数?
  • 企业备用金多久还款
  • 员工冲借款应该怎么做账
  • 定向增发后送股成本价
  • 记账凭证填制的依据
  • 买货没发票如何入账
  • uniapp按钮
  • yii2框架的优缺点
  • 运输中合理损耗计入存货成本吗
  • 原材料按实际成本核算需设置的科目包括
  • 激光器原理及应用
  • 区块链技术开发入门
  • 热闻丨ChatGPT会替代你我吗?让它写了封情书后,我得到答案
  • php curl cookie
  • js工厂模式创建对象
  • 企业应收账款的主要内容
  • 入库单正确填写方法
  • 其他综合收益 综合收益
  • 帝国cms移动端
  • 软件销售收入确认时点
  • 银行代发工资必须要本行的卡吗
  • 使用sql server
  • mysql load local
  • c#获取局域网ip
  • 专项应付款如何记账
  • 劳务费用如何做账
  • 企业取得的财政补贴是否缴纳增值税
  • 发表文章开什么发票
  • 发放股票股利如何影响计算基本每股收益
  • 销售方开红字发票需要什么信息
  • 公司不营业需要交税吗
  • 汽车行业的财务会计
  • 企业构建固定资产无形资产和其他长期资产支付
  • 福利设施的定义
  • 纳税人虽设置账簿,但账目混乱
  • 商业企业固定资产一次性扣除
  • mysql -u -p -s
  • sqlserver批处理
  • win8 重装系统
  • ubuntu更换版本
  • linux使用yum
  • node.js使用教程
  • js 根据时间排序
  • shell实现的实验步骤
  • nodejs cgi
  • javascript怎么学
  • 小规模纳税人开专票可以抵扣吗
  • 税控盘开票软件下载官网
  • 个人出租商铺个人所得税计算
  • 地方税务局部门有哪些
  • 湖南社保费申报测算管理系统登录不了
  • 税法上接受捐赠是什么
  • 个人工资所得税缴纳标准2023年
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设