07
Ноя
2016

Проверка на верное количество скобок [ { ( ) } ]

Задача следующая, написать код, который проверяет, верно ли расставлены скобки в выражении т.е.


("(5+5)/[4+4]*{2*2}" - True, "(3+[2*3)]" - False .


Код я написал, честно говоря, показывать конечно стыдно, но увы, никто кроме Вас, меня умнее не сделает. Просьба - подскажите, как можно сделать из ЭТОГО, нормальный код? Сам по себе код работает.


def checkio(expression):
    list_backets = []

    for i in expression:
        if i == "[" or i == "]" or i == "(" or i == ")" or i == "{" or i == "}":
            list_backets.append(i) //создаю список нужных нам элементов

    if len(list_backets) == 0: //если нет элементов вовсе
        return True

    elif list_backets.count("[") == list_backets.count("]") and list_backets.count("(") == list_backets.count(")") and list_backets.count("{") == list_backets.count("}"):
      //если количество "(" равно количеству ")" и так далее...
        j = 0
        try:
            while j != range(len(list_backets)): //попытка найти в списке соседние скобки
                if list_backets[j] == "(" and list_backets[j+1] == ")":
                    list_backets.pop(j)
                    list_backets.pop(j)
                    j = 0
                elif list_backets[j] == "{" and list_backets[j+1] == "}":
                    list_backets.pop(j)
                    list_backets.pop(j)
                    j = 0
                elif list_backets[j] == "[" and list_backets[j+1] == "]":
                    list_backets.pop(j)
                    list_backets.pop(j)
                    j = 0
                else:
                    j += 1

        except:
            if (len(list_backets)) == 0:
                return True
            else:
                return False

    else:
            return False

Выглядит стремно и неуклюже, если у Вас будет возможность и время, расскажите как сделать его более "красивым" с пояснениями. Спасибо!

Источник: https://ru.stackoverflow.com/questions/587653/%D0%9F%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B0-%D0%BD%D0%B0-%D0%B2%D0%B5%D1%80%D0%BD%D0%BE%D0%B5-%D0%BA%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%BE-%D1%81%D0%BA%D0%BE%D0%B1%D0%BE%D0%BA

Share

Тебе может это понравится...