我编写了以下代码来检查函数的某些输入是否包含平衡括号:
def balanced_brackets(text):
brackets = [ ('(',')'), ('[',']'), ('{','}'),('<','>')]
s = 0
e = 1
st = Stack()
for i in text:
for pair in brackets:
if i == pair[s]:
st.push(i)
elif i == pair[e] and not st.isEmpty() and st.pop() != pair[s]:
return False
if st.isEmpty():
return True
else:
return False
此代码适用于输入,例如'()(())()'但是当我为'zn()((b)())q())()l()d尝试输入时它失败了(R)”。任何人都可以帮我确定问题所在吗?感谢。
答案 0 :(得分:3)
问题在于and not st.isEmpty()==0
。当它到达不平衡')'
时,所有先前的都已平衡,因此st 为空。
你现在拥有的,在条件1中,只是继续前进。你需要改变那里的条件,以便它兼顾两者,或者有两个elifs。前者可以通过一些嵌套和ors来实现。
顺便说一下;除非你想用它做一些奇特的事情,否则没有必要实现堆栈。您可以使用l.pop,len(l)和l.append。来使用列表答案 1 :(得分:0)
这很有效。它需要一个堆栈模块来导入。它将跟踪匹配的对。
def multi_bracket_validation(input):
""" test for matching brackets and return bool """
if type(input) is str:
open_b = '({]'
closed_b = ')}]'
compare = Stack()
for brac in input:
if brac in open_b:
compare.push(brac)
elif brac in closed_b:
if compare.top is None:
return False
if closed_b.index(brac) != open_b.index(compare.pop().val):
return False
return compare.top is None
return False