栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python实现中序表达式转换到后序表达式

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python实现中序表达式转换到后序表达式

from stack import Stack#导入栈
import string
def infixToPostfix(infixexpr):
    prec = {}#设定优先级
    prec["*"]=3
    prec["/"]=3
    prec["+"]=2
    prec["-"]=2
    prec["("]=1
    opStack = Stack()
    postfixlist = []#要输出的结果列表
    tokenList = infixexpr.split()#Python split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串
    #str.split(str="", num=string.count(str)).,返回分割后的字符串列表
    for token in tokenList:
        if token in string.ascii_uppercase:
            postfixlist.append(token)#如果是操作数,则把它放到结果列表的最后
        elif token == '(':
            opStack.push(token)#如果是左括号,则将其压入栈中
        elif token == ')':
            topToken = opStack.pop()#如果出现右括号,从栈中不断弹出元素(弹出一次然后进入while条件循环,把栈中取出的每一个运算符都
            while topToken != '(':#添加到结果列表的末尾并且将其弹出。PS.由于第一次的弹出操作还没有将运算符添加到结果列表的末尾,因此我们先调用了
                postfixlist.append(topToken)#append()
                topToken = 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)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/290872.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号