#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