广告
返回顶部
首页 > 资讯 > 后端开发 > 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://www.lsjlt.com/news/188096.html(转载时请注明来源链接)

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python——中缀到后缀的转换(Sta
    先贴代码,剩下的结合Pycharm的Debug贴图一一说明#coding:utf-8 from pythonds.basic.stack import Stack from string import * def infixToPos...
    99+
    2023-01-31
    中缀 后缀 Python
  • C++中怎么将中缀表达式转换为后缀表达式
    本篇文章为大家展示了C++中怎么将中缀表达式转换为后缀表达式,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、思路:和中缀表达式的计算类似,只不过不用计算,把表达式输出即可用字符数组存储整行输入的中...
    99+
    2023-06-05
  • C++实现中缀转后缀的示例详解
    单位数加减乘除 例如:2+3*(4-9) 定义一个栈内优先级 运算符号优先级+、-3*、/5(1)6#0 定义一个栈外优先级 运算符号优先级+、-4*、/2(6)1#0 整个过程如下...
    99+
    2022-11-13
  • python中heic后缀图片文件怎样转换成jpg格式
    这篇文章主要介绍python中heic后缀图片文件怎样转换成jpg格式,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!heic_to_jpg.pyimport subprocessimport os...
    99+
    2023-06-07
  • Python的重定向关键字能否在数据类型转换中起到优化作用?
    Python是一门动态、解释性的编程语言,拥有丰富的数据类型和灵活的语法。在Python中,我们可以通过重定向关键字来实现对数据类型的转换,从而优化程序的性能。那么,Python的重定向关键字能否在数据类型转换中起到优化作用呢?下面让我们来...
    99+
    2023-09-12
    重定向 关键字 数据类型
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作