位置: 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-ml
  • 运输发票符合什么要求
  • 年底帐务处理
  • PHP:imagefontwidth()的用法_GD库图像处理函数
  • php获取文章内容图片
  • 生产企业免抵退税实例
  • 红字专用发票开具的规定
  • php如何做app
  • linux mput命令
  • python简单九宫格拼图游戏
  • 收到退税款怎么做账
  • 印花税减半征收减免性质代码
  • 金税三期可以申报个税吗
  • 适用会计准则或会计制度(填写代码)
  • 车票怎么抵扣增值税税率
  • 所有者权益期末余额-年初余额=净利润吗?
  • 成本核算步骤
  • 招待费专票不可以抵扣
  • 社保缴费基数应该怎么算
  • 什么是叫资产负债表项目
  • 本年利润必须转入利润分配吗
  • 土地增值税是什么税种类型
  • 实收资本入账需要算设备安装费吗
  • 收客户利息怎么处理
  • 应发工资应税工资
  • 会计的凭证怎么做账
  • 工程施工明细科目结转吗
  • sql server的相关技术知识
  • win8 重装系统
  • phpstudy中phpmyadmin无法访问
  • 如何使用airplay2
  • win10装老版本
  • windows xp系
  • linux系统服务器怎么进入桌面
  • win7安装kb4534310补丁失败
  • win7报错0x0000007b
  • 系统自动保存文件在哪里
  • 安卓好用的倒计时
  • 从0开始
  • rd命令是什么
  • perl格式化输出 %s
  • 模板创造
  • css ul显示为表格
  • 区分例假和怀孕前乳头疼
  • android升级是什么意思
  • eclipse安转
  • JavaScript中的数据类型分为两大类
  • 北京国税办税服务厅
  • 四川税局官网发票
  • 湖北税务发票查询系统网
  • 重庆税务局查询缴费记录
  • 上海微电子现状
  • 传统媒介和新媒介
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设