相关原理
理论部分请参照上面的博客,写的很清楚。

好的我们来看代码

举个栗子

(9-((1+3)*2))/2
结果是0.5

def infix_to_prefix(expression):assert type(expression)==listexpression.reverse()priority={'+':0,'-':0,'*':1,'/':1}operator_list=[]#运算符的英文是operatoroperand_list=[]#操作数的英文是operandfor each_element in expression:if each_element not in priority and each_element not in ['(',')']:operand_list.append(each_element)#操作数直接push到操作数栈else:if each_element not in ['(',')']:#表明此时是运算符,不是括号if len(operator_list)==0 or operator_list[-1]==')':#如果运算符栈为空,或者栈顶元素是右括号,那么直接pushoperator_list.append(each_element)elif priority[each_element]>=priority[operator_list[-1]]:#如果这个运算符的优先级大于栈顶运算符的优先级,直接pushoperator_list.append(each_element)else:#此时需要将运算符栈顶的运算符弹出来放到操作数栈中operand_list.append(operator_list.pop())else:#此时是括号if each_element==')':#右括号直接入栈operator_list.append(each_element)else:assert each_element=='('#左括号的时候从运算符栈中弹出运算符,直到遇到右括号为止,将这对括号中间的运算符放到操作数栈中while(operator_list[-1]!=')'):operand_list.append(operator_list.pop())operator_list.pop()while(len(operator_list)!=0):operand_list.append(operator_list.pop())operand_list.reverse()           return operand_list

上面的函数已经将中缀表达式转化为了前缀表达式,相关原理那篇博文已经说的很清楚了。

但是那篇博客没有介绍如何根据前缀表达式计算结果,这里我说一下

  • 定义一个栈,从右向左扫描前缀表达式
  • 如果是操作数,则将操作数压入栈中
  • 如果是运算符,则从栈中取出来两个操作数,计算结果,再放回栈中

下面我们根据前缀表达式计算结果

def compute_prefix_expression(prefix):stack=list()for i in range(len(prefix)-1,-1,-1):element=prefix[i]if element not in ['+','-','*','/']:stack.append(element)else:a=stack.pop()b=stack.pop()stack.append(str(eval(a+element+b)))assert len(stack)==1return eval(stack[0])

结果:

中缀表达式转为前缀表达式,然后根据前缀表达式计算结果相关推荐

  1. 九、中缀表达式转为后缀表达式

    使用栈将中缀表达式转为后缀表达式并计算 一.中缀表达式转换为后缀表达式 由于后缀表达式适合计算式进行计算,但是人对于较长的中缀表达式,很难将中缀表达式直接转换为后缀表达式,于是我们使用栈来实现中缀表达 ...

  2. Java堆栈的应用2----------中缀表达式转为后缀表达式的计算Java实现

    1.堆栈-Stack 堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除 ...

  3. Algs4-1.3.10中序表达式转为后序表达式(第二次实现)

    1.3.10编写一个过滤器InfixToPostfix,将算术表达式由中序表达式转为后序表达式.  答:本次做这个题时离上次做这个题有一个半月了,已经忘记了当时的算法.经过两个小时的研究(远低于第一次 ...

  4. 利用MATLAB中 MuPADNotebook组件将程序语言表达式转为数学表达式

    前言 在论文写作或数模竞赛中,常需要把已经在程序中列写好的方程或表达式转为数学表达式,呈现在论文或其他书面文本中,利用MATLAB中 MuPADNotebook组件可以在保证高转换准确度的同时,提高我 ...

  5. 信息学奥赛一本通 1198:波兰表达式 | OpenJudge NOI 2.2 1696:波兰表达式

    [题目链接] ybt 1198:波兰表达式 OpenJudge NOI 2.2 1696:波兰表达式 注:ybt上描述的其实是波兰表达式,而题目中的文字都是逆波兰表达式,是笔误了,应该当做波兰表达式看 ...

  6. 有趣的数据结构算法10——后缀表达式(PRN)介绍及利用栈计算后缀表达式的结果

    有趣的数据结构算法10--后缀表达式(PRN)介绍及利用栈计算后缀表达式的结果 解题思路 实现代码 GITHUB下载连接 在前一天已经利用栈完成2进制到8进制的转换.但是栈的应用方面还有很多,本次我将 ...

  7. 浏览器兼容--条件样式,选择符前缀,样式属性前缀

    浏览器兼容--条件样式,选择符前缀,样式属性前缀 2012-12-05 09:20 by greenal, 1570 阅读, 0 评论, 收藏, 编辑 原文地址-- http://www.w3cplu ...

  8. 浏览器兼容--条件样式,选择符前缀,样式属性前缀(转)

    浏览器兼容--条件样式,选择符前缀,样式属性前缀 2012-12-05 09:20 by greenal, 1570 阅读, 0 评论, 收藏, 编辑 原文地址-- http://www.w3cplu ...

  9. php表达式生成工具,thinkPHP5.0数据查询表达式生成技巧

    thinkPHP的查询表达式大揭秘 主要使用where(条件表达式)方法 语法一:where('字段','条件','值'): 等于:EQ 解析为"=" 不等于:NEQ 解析为&qu ...

  10. 三元表达式、列表推导式、生成器表达式、递归、匿名函数、内置函数(day4)

    一.三元表达式.列表推导式.生成器表达式 1.三元表达式name=input('姓名>>: ')res='SB' if name == 'alex' else 'NB'print(res) ...

最新文章

  1. android studio3.0升级,升级androidStudio3.0的问题
  2. 文巾解题 1433. 检查一个字符串是否可以打破另一个字符串
  3. micropython esp32手册_使用ESP32控制板(二):燒錄MicroPython韌體
  4. SAP Spartacus cost center Add按钮的href属性生成逻辑分析
  5. java执行多次post请求_同样的post请求代码在Java和android中执行结果不同。
  6. EventThread线程对VSync的接收
  7. Windows API一日一练(69)GetTickCount函数
  8. 直流电机驱动电路设计
  9. 查手机服务器ip和端口网站,如何查询服务器ip地址和端口号
  10. Avant Browser
  11. 斯坦福用算法降低:令欧洲头大的难民犯罪率
  12. MapReduce强化实验
  13. ElasticSearch Java 客户端连接ElasticSearch
  14. phpstudy安装yar扩展
  15. 毕业设计-基于机器视觉的手写字识别系统
  16. PlantCV中文文档
  17. 海信E5K电视怎么样,海信E5K 65、75、100英寸选哪个好
  18. 【联盛德W806上手笔记】八、SPI及其DMA
  19. 系统集成十大项目管理(1)
  20. pytorch 问题:_, term_width = os.popen(‘stty size‘, ‘r‘).read().split()

热门文章

  1. G2自定义图例,数据更新时渲染问题。
  2. python抖音接口_「docker实战篇」python的docker-抖音分析接口数据分析(21)
  3. 【c语言】 我使用c语言基础做了一个老少皆宜的”国民小游戏(三字棋)“
  4. 海思AI芯片(Hi3519A/3559A)方案学习(十七)开发板上运行yolo3模型的代码分析
  5. 基石为勤能补拙的迷宫之旅——第八天(Python文件操作)
  6. vue 页面调用另一个页面的方法
  7. 算法岗面经总结(京东)
  8. Spring配置dbcp数据源
  9. 《西部世界》中“人工智能”之上的类人类嗅觉,初步实现了!
  10. 编程学不进去?如何才能拯救你的编程能力?