如果可能的话,需要最后一点脚本的帮助

时间:2015-10-27 15:53:37

标签: python

以下是我的脚本的先决条件

.house__door .house__door__knob, .house__door .house__door__knob--red, .house__door .house__door__knob--blue {
  width: 10px;
  height: 10px;
}

"

我已经想出了这个并且认为我已经完成了,但是我只是认为它并没有完全克服这条线,因为我得到了一个积极的结果" []] ["

有人可以帮助我实现这一部分"成对的开/关括号(按顺序),"

.house__door__knob, .house__door__knob--red, .house__door__knob--blue {
  width: 10px;
  height: 10px;
}

2 个答案:

答案 0 :(得分:2)

这是一个有趣的小想法。它基本上是通过查看是否可以将所有括号对转换为单个列表来实现的:

from ast import literal_eval

def valid(s):
    if any(c not in '[]' for c in s): return False
    try:
        literal_eval(s.replace('[]', '[],'))
        return True
    except SyntaxError:
        return False

这(我相信)应该每次都有用,包括你给出的例子:

>>> valid('[]')
True
>>> valid('][')
False
>>> valid('[][]')
True
>>> valid('][][')
False
>>> valid('[[][]]')
True
>>> valid('[]][[]')
False

答案 1 :(得分:1)

最简单的方法是使用Staks。下面的代码将为您提供答案:

from pythonds.basic.stack import Stack

def parChecker(symbolString):
    s = Stack()
    balanced = True
    index = 0
    while index < len(symbolString) and balanced:
        symbol = symbolString[index]
        if symbol in "([{":
            s.push(symbol)
        else:
            if s.isEmpty():
                balanced = False
            else:
                top = s.pop()
                if not matches(top,symbol):
                       balanced = False
        index = index + 1
    if balanced and s.isEmpty():
        return True
    else:
        return False

def matches(open,close):
    opens = "([{"
    closers = ")]}"
    return opens.index(open) == closers.index(close)


print(parChecker('{{([][])}()}'))
print(parChecker('[{()]'))

在此代码中,每个开始符号都被简单地推到堆栈上,以等待匹配的结束符号出现在序列的后面。当出现结束符号时,我们必须检查以确保它正确匹配堆栈顶部的开头符号的类型。如果两个符号不匹配,则字符串不平衡。如果整个字符串被处理并且堆栈上没有任何内容,则字符串被正确平衡。