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

news2024/12/23 23:11: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.coloradmin.cn/o/518377.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【社区团购】预制菜零售如何打造精准社群?

预制菜作为现代生活的新型“网红”食品,其受欢迎程度日益提高。而在商业竞争日益激烈的当下,如何让你的预制菜零售业务(文章编辑ycy6221)具有巨大的竞争优势呢?社区团购是一个不错的切入点,这不仅是为了扩大…

5月12号软件资讯更新合集.....

Vue 3.3 “浪客剑心” 发布 Vue 3.3 已正式发布&#xff0c;代号 "Rurouni Kenshin"&#xff08;浪客剑心&#xff09;。 公告写道&#xff0c;此版本专注于改进开发者使用体验 —— 特别是 SFC<script setup> 与 TypeScript 的结合使用。一同发布的还有 Vue…

【C语言】操作符详解(上)

操作符详解&#xff08;上&#xff09; 1.操作符分类2.算数操作符3.移位操作符3.1 右移3.2 左移 4.位操作符4.1位操作符发的应用 5.赋值操作符6.单目操作符7.关系操作符8.逻辑操作符 1.操作符分类 算术操作符移位操作符位操作符赋值操作符单目操作符关系操作符逻辑操作符条件操…

Vue3-黑马(四)

目录&#xff1a; &#xff08;1&#xff09;vue3-基础-axios-获取数据 &#xff08;2&#xff09;vue3-基础-axios-发送数据 &#xff08;3&#xff09;vue3-基础-axios-baseURL &#xff08;1&#xff09;vue3-基础-axios-获取数据 第三方库axios是对xhr的封装&#xff0…

智安网络|网络安全威胁风险分析:识别以及预防黑客和钓鱼攻击

随着网络技术的不断发展和普及&#xff0c;网络安全问题日益严峻。黑客、病毒、恶意软件、钓鱼攻击等威胁不断涌现&#xff0c;给个人、企业、国家的信息安全带来了极大的威胁。如何识别、分析和预防网络安全威胁已成为所有人必须要解决的问题。本篇文章将从黑客攻击和钓鱼攻击…

proc文件系统

proc介绍 (1)proc是虚拟文件系统&#xff0c;虚拟的意思就是proc文件系统里的文件不对应硬盘上任何文件&#xff0c;我们用去查看proc目录下的文件大小都是零,是接受到请求才动态生成的&#xff1b; (2)proc文件系统是开放给上层了解内核运行状态的窗口&#xff0c;通过读取pro…

如何通过品牌矩阵号赋能品牌?

小红书作为年轻人的“消费决策”平台、逐步成为越来越多用户的消费指南&#xff0c;同时也变成众多品牌的营销基地。在小红书运营矩阵账号可以很好的树立品牌形象、增加粉丝粘性、节约广告成本&#xff0c;那么在搭建矩阵的过程中如何管理品牌矩阵号也成为众多品牌必须要思考的…

3.操作系统

文章目录 1.操作系统概述&#xff08;1&#xff09;当前操作系统的主要类型&#xff08;2&#xff09;操作系统的特点&#xff08;3&#xff09;五种主要的功能&#xff08;4&#xff09;考点分布 2.进程&#xff08;1&#xff09;进程的状态&#xff08;2&#xff09;进程的定…

jeecg低代码主从表打印

1.在在线开发菜单栏中选择online表单开发&#xff0c;新建两张表&#xff0c;分别为主表和附表。 2.首页进入报表设计——积木报表设计。 3.进入报表管理——打印设计&#xff0c;选择一个模板或者新建都可以。 4.进入设计页面&#xff0c;点击数据集管理右边的添加数据表&a…

高通开发系列 - 驱动模块Oops后如何找到出错位置

By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 目录 问题概述问题现象出错定位问题概述 加载驱动模块时发生:Kernel panic - not syncing: Fatal exception 那么如何找到驱动模块出错的…

抖音AI绘画变成真人软件

抖音AI绘画成人软件的发展可能包括以下几个方面&#xff1a; 算法优化&#xff1a;随着深度学习算法的不断发展&#xff0c;未来该技术可能会通过改进模型架构、优化训练方式等手段&#xff0c;提高生成图像的质量和自然度。 多样化的绘画风格&#xff1a;为了满足用户…

【软考备战·希赛网每日一练】2023年5月12日

文章目录 一、今日成绩二、错题总结第一题第二题第三题第四题 三、知识查缺 题目及解析来源&#xff1a;2023年05月12日软件设计师每日一练 一、今日成绩 二、错题总结 第一题 解析&#xff1a; 一般情况下&#xff0c;一旦Web服务器向浏览器发送了请求数据&#xff0c;它就要…

2021 第十二届蓝桥杯大赛软件赛决赛, 国赛,C/C++ 大学B组题解

2021 第十二届蓝桥杯大赛软件赛决赛, 国赛&#xff0c;C/C 大学B组题解 文章目录 第1题 —— 带宽 &#xff08;5分&#xff09;第2题 —— 纯质数 &#xff08;5分&#xff09;第3题 —— 完全日期 &#xff08;10分&#xff09;第4题 —— 最小权值 &#xff08;10分&#xf…

MySQL之快速查询的秘籍 【B+树索引】

前言 本文章收录在MySQL性能优化原理实战专栏&#xff0c;点击此处查看更多优质内容。 本文摘录自 ▪ 小孩子4919《MySQL是怎样运行的&#xff1a;从根儿上理解MySQL》 &#x1f604;学完前面我们讲解了InnoDB数据页的7个组成部分&#xff0c;知道了各个数据页可以组成一个双…

Linux 多线程(3)多线程应用、信号量、线程池、单例模式

应用 生产者与消费者模型 生产者与消费者模型---设计模式的一种 设计模式--程序员针对一些典型的应用场景所给出的一种典型的解决方案 应用场景--在有大量数据任务产生的同时需要进行任务处理的场景 如果采用单执行流解决&#xff1a; 效率低下 资源利用不一定合理&#xff08;…

【Python数据分析】常用内置函数(一)

&#x1f64b;‍ 哈喽大家好&#xff0c;本次是python数据分析、挖掘与可视化专栏第四期 ⭐本期内容&#xff1a;常用内置函数 &#x1f3c6;系列专栏&#xff1a;Python数据分析、挖掘与可视化 &#x1f44d;“总有一段时光悄悄过去然后永远怀念.” 文章目录 前言类型转换int(…

Vue---列表渲染

目录 一、列表渲染的基本使用 &#xff08;1&#xff09;渲染数组数据 &#xff08;2&#xff09;渲染对象数据 二、v-for指令的高级用法 三、列表过滤 四、列表排序 一、列表渲染的基本使用 使用v-for指令可以将数组&#xff0c;对象数据渲染成列表视图 &#xff08;1&a…

前端自学好还是培训好?女生有多适合学前端,我来告诉你!

2023年了&#xff0c;你是否还在迷茫或者每个月拿着5/6k做着卷死的工作&#xff0c;不但存不下钱还不能好好享受生活&#xff0c;如果是&#xff0c;那你真该考虑一下转行了。 好程序员先说说前端到底怎么开始学&#xff1a; 有的伙伴说今年28岁了&#xff0c;学的会计&#xf…

Vue中的MVVM【第三篇】

大纲&#xff1a; MVVM图示 &#x1f308; 一、MVVM简介 简单来说&#xff1a;MVVM&#xff08;M-VM-M&#xff09;&#xff0c;一种更好的UI模式解决方案&#xff0c;MVVM通过数据双向绑定让数据自动地双向同步。 M(Model)&#xff1a;Model数据模型&#xff0c;json格式数据…

Revit中如何创建曲面嵌板及一键成板

一、Revit中如何创建曲面嵌板 在我们的绘图过程中可能会遇见一些曲面形状&#xff0c;而我们的常规嵌板没办法满足我们绘制的要求&#xff0c;我们今天学习如何在revit中绘制曲面嵌板。 1.新建“自适应公制常规模型”族&#xff0c;创建4个点图元并为其使用自适应。 2.在相同的…