如何检查字符串是否包含匹配的括号()

时间:2019-05-20 07:03:32

标签: python

编辑:忘记提及工作簿中的原始问题,即: 编写一个接受字符串并检查是否包含匹配括号的函数,即()。如果返回True 可以,否则为False。

我正在尝试制作一个小程序,用于检查字符串是否具有匹配的括号。我的工作簿指出:“考虑使用变量来保存未封闭的括号的数量:+1表示开括号,而-1表示闭括号。使用此方法来检查您在打开一个括号之前没有关闭过一个,并且所有括号都已被关闭。最后关闭”。这应该主要用于循环和字符串方法。

doctest应该证明我的意思:

def match_brackets(s):
    """
    >>> match_brackets('(7 - 4) * (3 + 2)')
    True
    >>> match_brackets('((2 + 5) / (13 +12)')
    False
    """

这是我到目前为止尝试过的:

    unclosed = 0
    opening = "("
    closing = ")"
    for ch in s:
        if ch in opening:
            unclosed += 1
            return True
        elif ch in closing:
            unclosed -= 1
            return False
    return unclosed

但是它每次都返回True。在过去的20分钟里,我一直试图弄清楚这一点,但无法克服。

我感谢所有帮助,并在必要时可以提供更多信息(尽管我认为提供的信息就足够了。)

1 个答案:

答案 0 :(得分:3)

您可以使用count,但由于返回得太早而使代码无法正常工作;如果是return True,也应该0,否则应使用{{1} }:

return False

因此,我只需要首先检查def match_brackets(s): """ >>> match_brackets('(7 - 4) * (3 + 2)') True >>> match_brackets('((2 + 5) / (13 +12)') False """ return s.count('(') == s.count(')') and all([x < y for x, y in zip([i for i, x in enumerate(s) if x == '('], [i for i, x in enumerate(s) if x == ')'])]) 的数量和(的数量(如果它们相等),就可以在)子句中继续另一条语句,否则返回{{1 }}已经并继续执行,下一条语句正在检查所有and是否都在False之前,并使用两个(的列表理解之间的zip(它们只是获取它们的索引)搜索值)并进行外部列表理解,即简单地检查所有)是否都在enumerate之前,然后使用(来查看它们是否全部为{{1} }。