返回顶部
首页 > 资讯 > 后端开发 > Python >Python——中缀到后缀的转换(Sta
  • 420
分享到

Python——中缀到后缀的转换(Sta

中缀后缀Python 2023-01-31 05:01:46 420人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

先贴代码,剩下的结合PyCharm的Debug贴图一一说明#coding:utf-8 from pythonds.basic.stack import Stack from string import * def infixToPos

先贴代码,剩下的结合PyCharm的Debug贴图一一说明

#coding:utf-8

from pythonds.basic.stack import Stack
from string import *


def infixToPostfix(infixexpr):
    # 这里创建一个字典是为了后面 优先级 的比较
    prec = {}
    prec["*"] = 3
    prec["/"] = 3
    prec["+"] = 2
    prec["-"] = 2
    prec["("] = 1

    # 实例化
    opstack = Stack()
    postfixList = []
    
    # 把输入的字符串分割开
    tokenList = infixexpr.split()

    for token in tokenList:
        # 这里用到的是string模块中的两个方法,源代码都是手敲的字母和数字
        if token in ascii_uppercase or token in digits:
            postfixList.append(token)
        elif token == "(":
            opstack.push(token)
        elif token == ")":
            topstack = opstack.pop()
            while topstack != "(":
                postfixList.append(topstack)
                topstack = opstack.pop()
        else:
            while (not opstack.isEmpty()) and (prec[opstack.peek()] >= prec[token]):
                postfixList.append(opstack.pop())
            opstack.push(token)
    while not opstack.isEmpty():
        postfixList.append(opstack.pop())
    return " ".join(postfixList)


# print(infixToPostfix("A * B + C * D"))
print(infixToPostfix("( A + B ) * C - ( D - E ) * ( F + G )"))

咱们开始分析吧!


1、传入参数,这里用的复杂一点的

1.png


2、 实例化、创建最终生成后缀样式的 列表、将传入的字符串分隔开

2.png


3、当token==“(”时,opstack中存入“(”,因为转换成后缀就不需要用“()”表示优先级,存起来是用于做优先级的判断

3.png


4、当token为字母时,会添加到postfixList(postfixList是用于存放最终结果的列表)

4.png


5、传入“ + ”,进入while循环 --> opstack不是空的(还记得第一步是传入的“(”吗) --> 进行对应的prec对应值的比较(也就是优先级的比较) --> 不满足条件循环结束 --> opstack添加新成员“ + ”

5.png


6、传入字母,将添加到postfixList

6.png


7、遇到“)”,我们的操作应该是去掉“( )”,后面加上“ + ”

    2 :去掉opstack内的“ + ” -->  3 :并返回到postfixList里面 -->  5 :删掉opstack内的“(” --> topstack==“(”循环结束


8.png


8、传入“ * ”,由于上一次传值opstack内元素删光了,直接跳出while循环并在opstack中添加“ * ”

8.png


9、传入字母,将添加到postfixList

9.png


10、传入“ - ” --> opstack不是空的(还记得步骤8,存入的“*”吗) --> prec[" * "]>prec[" - "] --> postfixList添加“ * ”并在opstack中添加“ - ”

10.png


11、传入“(”, opstack添加“(”

11.png


12、传入字母,将添加到postfixList

12.png


13、 1 传入“ - ” -->  2 opstack不是空的(还记得之前传入的“(”吗) -->  3 prec[“(”]  !>= prec[“ - ”]跳出while循环 -->  4 opstack追加“ - ”

13.png


14、传入字母,将添加到postfixList

14.png


15、传入“)”--> 将“ - ”从opstack中删除并追加到postfixList中 --> 删除“(”

15.png


16、传入“ * ”,while循环不满足条件跳出,将“ * ”追加到opstack中

16.png


17、传入“(”, opstack添加“(”

17.png


18、传入字母,将添加到postfixList

18.png


19、传入“ + ”,进入while循环 --> opstack不是空的(还记得之前传入的“(”和“ * ”吗) --> 进行对应的prec对应值的比较(也就是优先级的比较) --> 不满足条件循环结束 --> opstack添加新成员“ + ”

19.png


20、传入字母,将添加到postfixList

20.png


21、传入“)”,取出opstack中的“ + ”并返回到postfixList中,接着删掉对应的“(”

21.png


22、tokenList列表遍历完跳出for循环,接下来就是一次取出opstack中的“ * ”和“ - ”并添加到postfixList中,再按规定格式返回结果

22.png


23、我们的答案在此

23.png



我们的代码及思路源自:

Http://interactivePython.org/runestone/static/pythonds/BasicDS/InfixPrefixandPostfixExpressions.html


愿我们共同进步

祝好


--结束END--

本文标题: Python——中缀到后缀的转换(Sta

本文链接: https://lsjlt.com/news/188096.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python——中缀到后缀的转换(Sta
    先贴代码,剩下的结合Pycharm的Debug贴图一一说明#coding:utf-8 from pythonds.basic.stack import Stack from string import * def infixToPos...
    99+
    2023-01-31
    中缀 后缀 Python
  • C++实现中缀转后缀的示例详解
    单位数加减乘除 例如:2+3*(4-9) 定义一个栈内优先级 运算符号优先级+、-3*、/5(1)6#0 定义一个栈外优先级 运算符号优先级+、-4*、/2(6)1#0 整个过程如下...
    99+
    2024-04-02
  • C++中怎么将中缀表达式转换为后缀表达式
    本篇文章为大家展示了C++中怎么将中缀表达式转换为后缀表达式,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、思路:和中缀表达式的计算类似,只不过不用计算,把表达式输出即可用字符数组存储整行输入的中...
    99+
    2023-06-05
  • 如何理解前缀,后缀,中缀表达式转化求值问题
    这篇文章主要讲解了“如何理解前缀,后缀,中缀表达式转化求值问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何理解前缀,后缀,中缀表达式转化求值问题”吧!...
    99+
    2024-04-02
  • Java中缀表达式转后缀表达式流程详解
    目录一、栈1、栈的基本介绍2、栈的底层实现二、中缀表达式转后缀表达式1、拆解中缀表达式2、中缀转后缀的算法3、中缀转后缀代码解析4、对后缀表达式进行计算一、栈 1、栈的基本介绍 栈是...
    99+
    2024-04-02
  • python中heic后缀图片文件怎样转换成jpg格式
    这篇文章主要介绍python中heic后缀图片文件怎样转换成jpg格式,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!heic_to_jpg.pyimport subprocessimport os...
    99+
    2023-06-07
  • C++实现中缀表达式转化为后缀表达式详解
    目录1.题目描述2.输入输出3.解题思路4.样例解析 5.代码实现5.1.优先级确认5.2.转换函数1.题目描述 所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运...
    99+
    2024-04-02
  • C++如何实现中缀表达式转化为后缀表达式
    这篇文章将为大家详细讲解有关C++如何实现中缀表达式转化为后缀表达式,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.题目描述所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象...
    99+
    2023-06-29
  • windows更改文件后缀算不算转换格式
    这篇文章主要介绍“windows更改文件后缀算不算转换格式”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“windows更改文件后缀算不算转换格式”文章能帮助大家解决问题。更改文件后缀算转换格式吗:答...
    99+
    2023-07-02
  • javascript中的后缀是什么
    这篇文章主要讲解了“javascript中的后缀是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“javascript中的后缀是什么”吧! ...
    99+
    2024-04-02
  • python如何获取文件的后缀
    使用python获取文件的后缀的方法:1.新建python项目;2.导入os模块;3.使用os.split()方法文件名;4.使用os.splitext()方法获取文件后缀;具体步骤如下:首先,打开python,并新建一个python项目;...
    99+
    2024-04-02
  • C++ 如何使用栈求解中缀、后缀表达式的值
    目录1. 前言2. 中缀表达式2.1 求值流程2.2 演示表达式4*6^(3+3*3-2*3)-8 的求值过程当2.3 编码实现3.后缀表达式4. 中缀转后缀表达式4.1 流程演示4...
    99+
    2022-11-13
    C++中缀 后缀表达式的值 C++ 栈求解表达式的值
  • Java数据结构和算法之前缀、中缀和后缀表达式的示例分析
    小编给大家分享一下Java数据结构和算法之前缀、中缀和后缀表达式的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1、人如何解析算术表达式如何解析算术表达式?或者换种说法,遇到某个算术表达式,我们是如何计算的:①、求...
    99+
    2023-06-28
  • python 实现format进制转换与删除进制前缀
    10进行十进制,十六进制,八进制,二进制的转换: (#:保留进制前缀) 对于带着进制前缀的,如"0x"“0o”“0b”,可以直接在后面加上'x'‘o''b'进行删除: 其他的一些...
    99+
    2024-04-02
  • 如何删除后台标题中的WordPress后缀
    下面由WordPress教程栏目给大家介绍删除后台标题中的WordPress后缀的方法,希望对需要的朋友有所帮助!WordPress后台标题(title)默认后缀显示-WordPress,如果想隐藏这个后缀,可以将下面代码添加到当前主题fu...
    99+
    2018-12-31
    WordPress
  • 使用golang中的strings.Trim函数去除字符串的指定前缀和后缀
    Golang中使用strings.Trim函数去除字符串的指定前缀和后缀是非常方便的,它可以帮助我们快速处理字符串,简化编码过程。在本文中,我将为您详细介绍如何使用该函数,并提供具体的代码示例。首先,我们需要导入strings包,以便使用其...
    99+
    2023-11-18
    Golang stringsTrim 指定前缀和后缀
  • 详解Python相关文件常见的后缀名
    常见的 Python 文件后缀有:py、pyc 、pyo、 pyi、pyw、 pyd、 pyx 等。 本文只介绍相对常见的一些后缀名,至于一些特别冷门的文件格式,例如一些文章提到的p...
    99+
    2024-04-02
  • Node.js中.pfx后缀文件的处理方法
    前言 nodejs中,在做加密解密的时候,会得到第三方的各种各样的加密文件,其后缀也就那么几种吧,.key/.pem/.pfx等,是不是可以自定义,反正就是一个文件。 但是今天我看了很多的nodejs库好像...
    99+
    2022-06-04
    后缀 文件 方法
  • 电脑中的文件后缀名如何更改
    这篇文章主要讲解了“电脑中的文件后缀名如何更改”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“电脑中的文件后缀名如何更改”吧!下面以文本文件为例:更改txt文件后缀为doc,文件依旧为txt文...
    99+
    2023-06-27
  • 如何使用golang中的io/ioutil.TempDir函数创建带有指定前缀和后缀的临时文件夹
    如何使用golang中的io/ioutil.TempDir函数创建带有指定前缀和后缀的临时文件夹,需要具体代码示例在Go语言的开发中,有时候我们需要创建用于临时存储文件的文件夹,这些文件夹往往是临时的,使用完毕后需要删除。Go语言的标准库中...
    99+
    2023-11-18
    Golang io/ioutil TempDir
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作