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))   

运行实例:

在这里插入图片描述

  • 7
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值