这个平衡的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)
;在这种情况下不需要,因为相等比较的结果总是布尔值)。
我没有收到任何错误或任何结果,所以我不能完全查明问题所在。 它基于 '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)
;在这种情况下不需要,因为相等比较的结果总是布尔值)。