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

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.mfbz.cn/a/19328.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何解决请求参数为JSON时,采用IO流读取,只能请求一次的问题?

如何解决请求参数为JSON时,采用IO流读取,只能请求一次的问题? 一、错误演示1. 创建项目,添加所需依赖2. 配置redis环境3. 写一个简单的测试请求4. 写一个拦截器,拦截请求5. WebConfig 注册拦截器6. 测试请求 二、问题解…

VR全景园区:数字化旅游业的新未来

VR全景园区是未来数字化旅游业的一种新兴形式。它利用高清晰度的3D图像和360度全景拍摄技术,将景区中的自然风光、历史文化和人文风情等元素呈现在游客面前。VR全景园区不仅可以为游客提供身临其境的参观体验,还可以有效地推广当地的文化和旅游资源。 【…

调试和优化遗留代码

1. 认识调试器 1.1 含义 一个能让程序运行、暂停、然后对进程的状态进行观测甚至修改的工具。 在日常的开发当中使用非常广泛。(PHP开发者以及前端开发者除外) 1.2 常见的调试器 Go语言的自带的 delve 简写为 “dlv”GNU组织提供的 gdbPHP Xdebug前端浏览器debug 调试 1.3…

English Learning - L3 作业打卡 Lesson2 Day8 2023.5.12 周五

English Learning - L3 作业打卡 Lesson2 Day8 2023.5.12 周五 引言🍉句1: The color green is natural for trees and grass.成分划分弱读语调 🍉句2: But it is an unnatural color for humans.成分划分弱读连读语调 🍉句3: A person who h…

1.SpringBoot基础篇

SpringBoot 文档更新日志 版本更新日期操作描述v1.02021/11/14A基础篇 前言 ​ 很荣幸有机会能以这样的形式和互联网上的各位小伙伴一起学习交流技术课程,这次给大家带来的是Spring家族中比较重要的一门技术课程——SpringBoot。一句话介绍这个技术,…

自学软件测试,从10K到40K的技术路线,也就是这些东西...

如果有一天我从梦中醒来时,发现自己的几年自动化测试工程师经验被抹掉,重新回到了一个小白的状态。我想要重新自学自动化测试,然后找到一份自己满意的测试工作,我想大概只需要6个月的时间就够了,如果比较顺利的话&…

头部企业走入无人区,国产数智化厂商挑大梁

本文转自数智前线 文|石兆 编|游勇 央国企数智化与信创化双重需求叠加,国产厂商挑大梁,助力企业升级数智化底座,实现价值化国产替代。 4月,在北京用友产业园的数智剧院里,近千位来自30个行业…

uniapp实现微信小程序横屏适配问题demo效果(整理)

使用VMIN进行布局 先了解css3的两个属性vmax和vmin vmax 相对于视口的宽度或高度中较大的那个。其中最大的那个被均分为100单位的vmax vmin 相对于视口的宽度或高度中较小的那个。其中最小的那个被均分为100单位的vmin竖屏布局的时候,750rpx就是竖屏布局屏幕的宽度…

Golang每日一练(leetDay0062) BST迭代器、地下城游戏

目录 173. 二叉搜索树迭代器 Binary Search Tree Iterator 🌟🌟 174. 地下城游戏 Dungeon Game 🌟🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 …

ASEMI代理LT8609AJDDM#WTRPBF原装ADI车规级芯片

编辑:ll ASEMI代理LT8609AJDDM#WTRPBF原装ADI车规级芯片 型号:LT8609AJDDM#WTRPBF 品牌:ADI /亚德诺 封装:DFN-10 批号:2023 安装类型:表面贴装型 引脚数量:10 工作温度:-40C~125C 类型…

python基础语法

一、配置python环境 (1)设置环境变量 path添加 C:\Program Files\Python3_11 C:\Program Files\Python3_11\Scripts (2)了解pip 什么是pip? pip是pyton包管理器,pypi(Python Package Ind…

前端开发之Echarts 图表渐变两种实现方式和动态改变图表类型

前端开发之Echarts 图表渐变两种实现方式 前言效果图一、echarts中存在两种渐变方式1、color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{},{},{}])简单案例 2、{type: linear,x: 0,y: 0,x2: 0,y2: 1, [{},{},{}]}案例 二…

Codeforces Round 872 (Div. 2)

Problem - D2 - Codeforces 思路: 我们设good点到所有k点的距离和为dis。 假设good点不止一个,那么我们good点的dis应该都是相等的(废话)。设当前点u是good点,如果他往儿子v移动,儿子有w个点属于k&#…

怎么把mkv格式改成mp4?不妨试试这几种方法吧!

怎么把mkv格式改成mp4?mp4是一种多媒体封装格式,不过我们通常会将它说成是视频格式,它可以在一个文件中容纳无限数量的视频、音频、图片或字幕轨道,mp4格式也是被我们每个人所熟知,因为我们每个人几乎每天都会接触或者…

美团太细了,HashMap可以存null,ConcurrentHashMap不可以,为什么?

△Hollis, 一个对Coding有着独特追求的人△ 这是Hollis的第 420 篇原创分享 作者 l Hollis 来源 l Hollis(ID:hollischuang) 我们知道,ConcurrentHashMap在使用时,和HashMap有一个比较大的区别,那就是HashM…

springboot 多模块项目

比起传统复杂的单体工程,使用Maven的多模块配置,可以帮助项目划分模块,鼓励重用,防止POM变得过于庞大,方便某个模块的构建,而不用每次都构建整个项目,并且使得针对某个模块的特殊控制更为方便。…

Java系统环境变量配置

PATH环境变量 PATH环境变量用于保存一系列命令(可执行程序)的路径,每个路径之间以分号分隔。当在命令行窗口运行一个命令时,操作系统首先会在当前目录下查找是否存在该命令对应的可执行文件,如果未找到,操作…

模糊PID(重心法解模糊梯形图FC)

模糊PID的模糊化请参看下面的博客文章: 博途PLC模糊PID三角隶属度函数指令(含Matlab仿真)_plc 模糊pid_RXXW_Dor的博客-CSDN博客三角隶属度函数FC,我们采用兼容C99标准的函数返回值写法,在FB里调用会更加直观,下面给大家具体讲解代码。常规写法的隶属度函数FC可以参看下…

使用auto-gpt来写一篇技术文章(如何部署autogpt+遇到的问题+如何使用)

文章目录 前言一、autogpt本地部署1.clone代码2.启动虚拟环境3.运行项目 二、使用aotogpt生成文章1.人设描述2.设置目标3.文章的生成过程4.文章的生成内容 总结 前言 最近AI技术的发展非常迅猛,尤其是和GPT相关的技术,备受瞩目。近日,Autogp…

IPv6有哪些优势?

现有的互联网是在IPv4协议的基础上运行的。IPv6是下一版本的互联网协议,也可以说是下一代互联网的协议,它的提出最初是因为随着互联网的迅速发展,IPv4定义的有限地址空间将被耗尽,而地址空间的不足必将妨碍互联网的进一步发展。 为…