为什么即使不满足“if”语句的条件,“else”语句也没有在我的循环中执行?

时间:2021-06-17 11:03:42

标签: python loops

我正在解决 Leetcode 上的以下问题:https://leetcode.com/problems/valid-parentheses/submissions/

基本上我们有一个括号列表,并且正在检查它是否“有效”。

示例:

Input: s = "()[]{}"
Output: true

Input: s = "(]"
Output: false

基本上括号需要以正确的顺序关闭。

这是我的代码:

def isValid(s: str) -> bool:
    stack = []
    open_brackets = ["(", "[", "{"]

    for bracket in s:
        if bracket in open_brackets:
            stack.append(bracket)

        else:
            if bracket == "]":
                if stack.pop() != "[":
                    return False

            elif bracket == ")":
                if stack.pop() != "(":
                    return False

            elif bracket == "}":
                if stack.pop != "{":
                    return False
        return True

由于某种原因,它没有通过输入测试:s="(]";这显然应该返回 False,但它返回 True。

我在代码的末尾打印了堆栈,得到 ["("],这意味着 else statement 由于某种原因没有执行。任何想法为什么 - 我已经看过很多次并且无法弄清楚。谢谢

2 个答案:

答案 0 :(得分:0)

return True 语句阻止其他代码运行,这意味着它在第一个循环中退出。

取消缩进,您的问题将得到解决。

答案 1 :(得分:0)

取消缩进最后的 return True 以便循环可以遍历输入字符串中的所有字符:

def isValid(s: str) -> bool:
    stack = []
    open_brackets = ["(", "[", "{"]

    for bracket in s:
        if bracket in open_brackets:
            stack.append(bracket)

        else:
            if bracket == "]":
                if stack.pop() != "[":
                    return False

            elif bracket == ")":
                if stack.pop() != "(":
                    return False

            elif bracket == "}":
                if stack.pop != "{":
                    return False
    return True