编辑:忘记提及工作簿中的原始问题,即:编写一个函数,该函数接受一个字符串并检查它是否包含匹配的括号 ie ()。如果是,则返回 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 分钟里,我一直在试图解决这个问题,但我无法解决它。
我感谢所有帮助,并在必要时提供更多信息(尽管我认为我提供的信息已经足够了)。
您可以使用count
,并且您的代码不起作用,因为您返回的太早了,return True
如果是0
,您也应该这样做,否则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 == ')'])])
所以我简单地首先检查(
s 的数量和数量)
s,如果它们相等,我继续在and
子句中的另一个语句,否则False
已经返回,并继续,下一个语句检查是否所有(
s 都在)
s之前,使用之间的 zip两个列表推导式enumerate
(它们只是获取其搜索值的索引)并执行外部列表推导式,该推导式仅检查所有(
s 是否在)
s之前,然后用于all
查看它们是否都为True
.
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句