python括号匹配(详细注释)

        实际编程中,我们经常嵌套使用括号(“{}”、“[]” 、 “()”),如果括号太多,可能会出现括号不匹配的情况,比如“(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))   

运行实例:

在这里插入图片描述

发布了12 篇原创文章 · 获赞 1 · 访问量 895

猜你喜欢

转载自blog.csdn.net/Wang_Runlin/article/details/104770132