这个平衡的paren问题是怎么回事?没有结果也没有错误

What is going on with this balanced paren problem? getting no results and no error

我没有收到任何错误或任何结果,所以我不能完全查明问题所在。 它基于 'stack' 数据结构。

def is_match(p1, p2):
    return (p1,p2) in ['(,)', '{,}', '[,]']

def is_open(param):
    return param in '([{'

def is_balanced(exp):
    stack = []
    for i in range(len(exp)):
        if is_open(exp[i]):
            stack.append(exp[i])
        else:
            top = stack.pop()
            if not is_match(top,str(exp[i])):
                return False

    if stack == []:
        return True
    else:
        return False


is_balanced('{[}')

首先,你没有打印任何东西。您的函数总是 returns False,但没有 print,结果将被丢弃。

其次,你的逻辑有问题。最明显的一个是 ('(', ')') 永远不等于 '(,)'。而如果在pop的时候不去测试栈是否为空,那么在输入'}'这样的情况下,就会报错。 str(exp[i]) 是多余的,exp[i] 已经是一个字符串了。最后,

if condition:
    return True
else:
    return False

是一个反模式;你可以简单地说 return condition (或者,如果它不是布尔值而你希望它是 return bool(condition);在这种情况下不需要,因为相等比较的结果总是布尔值)。