Логика работы оператора in в строках содержащих скобочную последовательность: "(), {}, []"
Столкнулся с задачей для новичков "Скобочная последовательность", в которой нужно определить, является ли входная строка допустимой. Задачу решил, но с помощью кода, который нашёл в итнернете!
def is_valid(text: str) -> bool:
while '()' in text or '[]' in text or '{}' in text:
text = text.replace('()', '')
text = text.replace('[]', '')
text = text.replace('{}', '')
return not text
Так вот чём вопрос: почему при таком расположении скобок (text = "({}){[}]") в строке функция выдаёт False? Ведь тут открывающие скобки равны по количеству закрывающим?
Каким образом происходит проверка правильной последовательности скобок и замена на пустое значение при такой конструкции?
В документации ничего об этом не нашёл(
Ответы (1 шт):
Условие в цикле проверяет на вхождение () - False, [] - False, {} -True заменяет {} на ''. Получаем "(){[}]". второй заход () - True, [] - False, {} - False. Заменяет (). Получаем "{[}]". () - False, [] - False, {} - False Цикл закончен. В переменной осталась строка "{[}]". выводится False т.к. выражение "{[}]" - это не строка является ложным.