本站消息

站长简介/公众号


站长简介:高级软件工程师,曾在阿里云,每日优鲜从事全栈开发工作,利用周末时间开发出本站,欢迎关注我的微信公众号:程序员总部,程序员的家,探索程序员的人生之路!分享IT最新技术,关注行业最新动向,让你永不落伍。了解同行们的工资,生活工作中的酸甜苦辣,谋求程序员的最终出路!

  价值13000svip视频教程,python大神匠心打造,零基础python开发工程师视频教程全套,基础+进阶+项目实战,包含课件和源码

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2020-12(17)

2021-01(48)

python括号匹配(详细注释)

发布于2020-03-11 20:18     阅读(177)     评论(0)     点赞(12)     收藏(4)



        实际编程中,我们经常嵌套使用括号(“{}”、“[]” 、 “()”),如果括号太多,可能会出现括号不匹配的情况,比如“(as))”、“{(bcd})”等。现用栈判断一串字符中的括号是否匹配。此代码不检查小括号是否一定被大级别括号包着,只检查左括号与右括号是否对应。

#括号匹配,用栈实现
#只用判空、压栈、弹栈功能即可   
class Stack:
    def __init__(self):
        self.lista = []#创建空栈

    def isEmpty(self):
        return len(self.lista) == 0
    def push(self,item):
        self.lista.append(item)
    def pop(self):
        if self.isEmpty():
            return "Error:The stack is empty"
        else:
            return self.lista.pop()

def matching(inputstring):#输入是一串字符
    bktStack = Stack()#创建类实例
    leftbkt = "{[("
    rightbkt = "}])"
    #对于每个输入字符
    for i in inputstring:
        #遇到左括号,就将其压栈
        if i in leftbkt:
            bktStack.push(i)
        #遇到右括号
        elif i in rightbkt:
            #若已没左括号与之匹配
            if bktStack.isEmpty():
                #不匹配,结束
                return False
            #左括号按什么顺序入,右括号应按相反顺序消掉。
            #如果匹配,右括号消的始终是栈顶括号。
            #弹栈bktStack.pop(),判断栈顶左括号与当前右括号是否匹配
            if rightbkt.index(i) !=  leftbkt.index(bktStack.pop()):
                #不匹配,结束
                return False
    #若一直没有return而是遍历了一遍,且没有多余左括号留在栈中,则说明匹配。反之不匹配。
    return bktStack.isEmpty()
#测试函数
stringa = input()
print(matching(stringa))   

运行实例:

在这里插入图片描述

原文链接:https://blog.csdn.net/Wang_Runlin/article/details/104770132







所属网站分类: 技术文章 > 博客

作者:小鬼乖乖

链接:https://www.pythonheidong.com/blog/article/252557/07a9663e102373c9c81b/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

12 0
收藏该文
已收藏

评论内容:(最多支持255个字符)