Мне нужно что-то для недавнего проекта, и я решил, что смогу немного развить решение ОП. Он позволяет проверять шаблоны комментариев, цитаты и скобки, игнорируя при этом окружающий текст. Я специально сделал это более общим, чем нужно, чтобы другие могли взять то, что они хотят, и вырезать то, что они не делают.

у иметь возможность объединить все скобки в строку, если они не связаны, то они получают свой индекс и False. Кажется, что он повторяет некоторые значения снова и снова, т.е. cl == pop [1]. Я пытался понять, в чем проблема, но не вижу, как бы я ни старался. Поэтому я спрашиваю, может ли кто-нибудь помочь мне найти ошибку и, возможно, даже улучшить мой код;)

def check_parentheses(string):
    pending = 0
    brackets = []
    '''Checks if parens are paired, otherwise they are bad.'''
    parenstack = collections.deque()
    for ch in string:
        if ch in lrmap:
            try:
                cl = string.index(ch, pending)
                pending = cl + 1

            except:
                cl = False

        if ch in lparens:
            parenstack.append([ch, cl])
            print parenstack

        elif ch in rparens:
            try:
                pop = parenstack.pop()

                if lrmap[pop[0]] != ch:
                    print 'wrong type of parenthesis popped from stack',\
                    pop[0], ch, pop[1], cl

                    brackets.append([pop[1], False])
                    brackets.append([cl, False])
                else:
                    brackets.append([pop[1], cl])

            except IndexError:
                print 'no opening parenthesis left in stack'
                brackets.append([cl, False])

    # if we are not out of opening parentheses, we have a mismatch
    for p in parenstack:
        brackets.append([p[1],False])
    return brackets

Ответы на вопрос(9)

Ваш ответ на вопрос