0
def check(s):
    result = 0
    for a in s:
        if "(" and "[" and "{" in a:
            result += 1
        elif ")" and "]" and "}" in a:
            result -= 1
        if result < 0:
            return "Есть ошибка"
    if result > 0:
        return "Есть ошибка"
    return "Все правильно"
print(check(input("Введите скобки: ")))

Вот такой код. Если написать )(, то будет выведено на экран, что есть ошибка, это понятно, если (), что всё правильно. Однако, ([)] тоже напишет, что все правильно, но это не так. Как теперь нужно дописать код, чтобы программа это проверяла?

Есть идея, написать условие при котором между двумя скобками, которые обязательно должны быть повернуты в разные стороны и быть 1 типа. В коде это += 1 и -= 1. Между ними допускаются только закрытые скобки, внутри которых также могут быть закрытие скобки. ((([])))

Как это реализовать в питоне я правда не придумал. Может есть идеи лучше?

  • Нужно не просто считать количество скобок, а записывать конкретный их вид. Почитайте другие вопросы на сайте на эту тему https://ru.stackoverflow.com/questions/587694 – andreymal Feb 04 '22 at 13:16
  • Кроме того, написанный вами код считает только фигурные скобки и не считает круглые и квадратные, потому что вы неправильно записали условия if/elif – andreymal Feb 04 '22 at 13:18

1 Answers1

0

А ничего "придумывать" на недо. Все уже придумано и изучается в курсе "структуры данных". Эта задача решается весьма просто с использованием структуры типа "стек". Если хотите изучить и понять, как сделать нормально, а не велосипедно - можете начать, например, вот отсюда: http://aliev.me/runestone/BasicDS/BalancedSymbols(AGeneralCase).html

passant
  • 11,753