Ошибка сбалансированных скобок Python с индексом и отступом

#python #recursion #indentation

#python #рекурсия #отступ

Вопрос:

Недавно я увлекся 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
 

Комментарии:

1. Вам нужно обрабатывать несколько наборов круглых скобок, например '()()' ?

Ответ №1:

Ваш базовый вариант неверен. Вам нужно обрабатывать пустую строку, а не строку с пробелом в ней.

Измените if s == " ": на if 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