高阶python | 堆栈列表:RPN应用(模拟逆波兰式功能实现)

news/2025/2/15 20:00:05/

python版本:3.10

在列表中,append和pop方法有一个特殊的用途。可以在列表上使用这两个方法让列表变成一个堆栈使用。

这就是一个栈,它是先进后出,类似单门轿厢电梯一样的设计,出入口共用

堆栈最有用的应用之一就是做逆波兰式表达法(RPN)的解释器。RPN使用后缀表达式,至于人类怎么将自己常用的数学式转换为RPN表达式,可以搜本账号先前发布的文章《odoo14 | odoo中domain的复杂写法》中前半部分的基础教学来学习转换过程。

使用RPN的好吃就是,可以用明确的方式将这两个操作数和运算符放在一起而不需要使用括号,例如:

10 5 * 7 3 + /

这个表达式等价于下面的常用表达式(中缀表达式),结果为 5.0:

(10 * 5) / (7+3)

下面是一个实现RPN逻辑的python代码

the_stack = []def push(v):the_stack.append(v)def pop():return the_stack.pop()def main():s = input('enter rpn string:')a_list = s.split()for item in a_list:if item in '+-*/':op2 = pop()op1 = pop()if item == '+':push(op1 + op2)elif item == '-':push(op1 - op2)elif item == '*':push(op1 * op2)else:push(op1 / op2)else:push(float(item))print(pop())main()# 输入:2 3 +
# 要有空格

>>> enter rpn string: 2 3 * 4 5 + *
54.0

只要识别到运算符就将堆栈中的倒一和倒二取出并进行运算后再将结果放回,直到运行到最后一个运算符,将堆栈中的最后两个结果运算后将最终结果放回,执行到最后再将堆栈中的唯一存在的结果取出输出到终端。


http://www.ppmy.cn/news/470147.html

相关文章

Java作业:多级映射,HashMap的多级嵌套

2.在上机练习4第1、2题的基础上,设计一个简单的成绩管理系统(GradeManager)。主要功能包括: (1)每个学生可以选修多门课程,每门课程也可以有多个学生选修。 (2)记录每个学生每门课程的成绩,以百分制计算&am…

STM32 使用sprintf 导致死机的一个解决方法

我在使用sprintf 进行字符串格式化处理的时候,一执行到sprintf,STM32就死机(必死),看了很多博客,包括 STM32硬件错误HardFault_Handler的处理方法 关于STM32 使用sprintf 死机问题! 关于单片机…

煤矿智能更衣柜管理系统解决方案

1.总则 随着各煤矿对矿山智慧化发展方面要求的不断提高,建设高水准的智能更衣柜系统成为了员工工作环境和员工工作幸福度提高的建设重点之一,拓展更衣柜管理新模式,将电子化智能设备充分运用于更衣室日常工作中,提高更衣柜工作效…

量子计算(6)pyqpanda编程1:量子程序与量子线路

目录 一、概述 1、前言 2、构建量子程序前的几个步骤 ①导入pyqpanda包 ②创建量子虚拟机 ③申请量子比特和经典寄存器 二、QGate类 1、量子比特门 ①单量子比特无角度 ②单量子比特有角度 ③多量子比特无角度 ④多量子比特有角度 2、接口 ①对矩阵进行伴随…

输入10个学生5门课成绩,分别用函数实现下列功能

1、 计算每个学生平均分&#xff1b; 2、 计算每科平均分 &#xff1b; 3 、找出五十个分数中最高分&#xff0c;和对应的学生和课程&#xff1b; 4、求出平均分方差&#xff1a;σ1/n∑xi2-(∑xi/n)2&#xff0c;xi为某一学生的平均分。 #include<stdio.h> #include…

【数字电路基础】——逻辑门电路

数字电路基础——逻辑门电路 逻辑门电路 随着新技术的发展&#xff0c;集成数字电路类型层出不穷&#xff0c;大量使用大规模功能模块已成为现实。数字电路在众多领域已取代模拟电路&#xff0c;可以肯定&#xff0c;这一趋势将会继续发展下去。 一、逻辑门电路是什么&#…

python入门基础(14)

列表的最大与最小 描述 牛牛刚学循环语句&#xff0c;你能教他使用for语句创建一个从10到50的数字列表吗&#xff1f;请输出完整列表&#xff0c;并输出列表的首尾元素检验是否是从10到50. 输入描述&#xff1a; 无 输出描述&#xff1a; 第一行输出完整列表。 第二行输…

硬件设计中与门、或门、非门电路详解

目录 ​第一&#xff1a;与门电路 ​第二&#xff1a;或门电路 ​第三&#xff1a;非门电路 ​第四&#xff1a;门电路应用实例 ​第五&#xff1a;触摸键控电路 门电路是数字电路中最基本的逻辑单元。它可以使输出信号与输入信号之间产生一定的逻辑关系。在数字电路中&am…