You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

括号匹配代码出现严重运行时错误,寻求调试帮助

调试你的括号匹配代码

嘿,我来帮你排查这个括号匹配代码的运行时问题~首先看你的核心匹配逻辑其实是没问题的,但有几个小细节可能导致了错误,我先给你修复后的完整代码,再逐一解释:

def is_matched(expression):
    opening = tuple('({[')
    closing = tuple(')}]')
    mapping = {'(': ')', '{': '}', '[': ']'}
    # 把变量名改成stack更贴合实际用途,避免混淆
    stack = []
    for letter in expression:
        if letter in opening:
            stack.append(mapping[letter])
        elif letter in closing:
            # 如果栈为空,或者弹出的闭括号和当前字符不匹配,直接返回False
            if not stack or letter != stack.pop():
                return False
        # 这里可以根据需求添加:如果遇到非括号字符,是否要返回False?
        # 如果你的需求是输入只能包含括号,就加上下面这行:
        # else:
        #     return False
    # 遍历结束后,栈为空说明所有括号都匹配
    return not stack

if __name__ == '__main__':
    # 补充完整的输入处理逻辑
    try:
        expr = input("请输入要验证的括号字符串:").strip()
        if len(expr) > 10000:
            print("输入长度超过限制,请输入小于10000字符的字符串")
        else:
            print("括号匹配" if is_matched(expr) else "括号不匹配")
    except Exception as e:
        print(f"运行时错误:{str(e)}")

可能的问题点及修复说明:

  • 变量名误导:你原来用queue作为存储结构,但实际用的是栈的pop()操作(默认弹出最后一个元素),改成stack更直观,避免后续维护混淆。
  • main函数不完整:你提供的代码里if __name__ == '__main...'没有写完,这会导致代码无法正确接收输入并执行匹配逻辑,甚至触发语法错误。我补充了完整的输入处理,包括长度校验和异常捕获,能帮你定位具体的运行时错误。
  • 可选的非括号字符处理:如果你的需求是输入字符串只能包含括号,那么可以取消注释代码里的非括号字符判断,遇到非括号字符直接返回False;否则代码会自动忽略这些字符(比如输入"a(b)"会被判定为匹配)。

测试用例验证:

  • 匹配的情况:"()[]{}" → 返回True
  • 不匹配的情况:"([)]" → 返回False
  • 空字符串:"" → 返回True(如果允许空输入)
  • 单括号:"(" → 返回False

内容的提问来源于stack exchange,提问作者Gareth Ma

火山引擎 最新活动