带索引和缩进的Python平衡括号错误

带索引和缩进的Python平衡括号错误,python,recursion,indentation,Python,Recursion,Indentation,我最近接触了python,在编写解决方案以检查一系列括号是否平衡时遇到了这个问题。我检查了关于缩进的不同帖子,但这似乎没有帮助。它在elif行上给了我一个索引超出范围的错误,这是我在访问第一个和最后一个字符后没有得到的。任何帮助和反馈都将不胜感激 def nest_paren(s): if s == " ": return True elif len(s) % 2 == 1 or s[0] != '(' or s[-1] != ')': return

我最近接触了python,在编写解决方案以检查一系列括号是否平衡时遇到了这个问题。我检查了关于缩进的不同帖子,但这似乎没有帮助。它在elif行上给了我一个索引超出范围的错误,这是我在访问第一个和最后一个字符后没有得到的。任何帮助和反馈都将不胜感激

def nest_paren(s):
  if s == " ":
    return True
  elif len(s) % 2 == 1 or s[0] != '(' or s[-1] != ')':
    return False
  return nest_paren(s[1:-1])

nest_paren(s="(())")  # This should return True
nest_paren(s="((())") # This should return False

你的基本情况不正确。您需要处理空字符串,而不是带有空格的字符串

如果s==”:将
更改为
如果s==”:
,它应该可以工作

我假设您只接受一组嵌套的括号,形式为
(…(())…)
。如果您还需要识别存在多个相邻的非嵌套平衡圆括号集的位置(如
(())()
),则需要更复杂的算法。这里有一种简单的方法,可以通过对字符串进行迭代而不是递归来实现:

def nest_paren(s):
    open_count = 0
    for c in s:
        if c == '(':
            open_count += 1
        elif c == ')'
            open_count -= 1
            if open_count < 0:
                return False
        else:  # non-parenthesis character, you could ignore these instead
            return False
    return open_count == 0
def嵌套参数:
打开计数=0
对于s中的c:
如果c=='(':
打开计数+=1
elif c==')'
打开\u计数-=1
如果打开\u计数<0:
返回错误
else:#非括号字符,您可以忽略这些字符
返回错误
返回打开的\u计数==0

您是否需要处理多组括号,如
“()”
?是的,它工作正常,谢谢!!