【发布时间】:2018-06-23 13:59:38
【问题描述】:
我要写Python补充函数:
def find(searched, open)
用于递归检查输入字符串是否具有平衡括号的函数:
def balanced (text):
#....
return find(text, None)[1]
我不能使用堆栈。我必须包含选项,当输入字符串为空时,当括号打开和关闭时(以及一个小提示,不是每个右括号我们都应该做出相同的反应)并包括对括号以外的字符的反应。 补充函数必须返回未处理的文本和以前的结果。
我有代码,遗憾的是它不适用于我找到的每个示例:
PAIRS = {'(' : ')', '[' : ']'}
def balanced(text):
#supp. f.
def find(searched, open):
if not searched:
return "", open is None
rest, val = find(searched[1:], searched[0])
if searched[0] in PAIRS.keys():
return find(rest, open)
elif searched[0] in PAIRS.values():
if val is False:
return rest, False
elif open is not None and searched[0] == PAIRS [open]:
return searched[1:], True
else:
return find(searched[1:], open)
return find(text, None)
if __name__ == '__main__':
print("No string: ")
print(balanced(""))
print("########################")
print("-----abc: ")
print(balanced("abc"))
print("########################")
print("-----(a): ")
print(balanced("(a)"))
print("########################")
print("-----)a(: ")
print(balanced(")a("))
print("########################")
print("-----((a): ")
print(balanced("((a)"))
print("########################")
print("-----((a(: ")
print(balanced("((a("))
print("########################")
print("-----))a): ")
print(balanced("))a)"))
print("########################")
print("-----()(a): ")
print(balanced("()(a)"))
print("########################")
print("-----a(a): ")
print(balanced("a(a)"))
在测试中,返回错误答案
((a)
和
((a(
我尝试使用 pythontutor.com 的 pdb 和在线可视化调试器,但我无法将递归作为一个整体包装在那里......棘手的情况是这也是帕森的谜题,我不能只是写得不一样。
我哪里出错了?
【问题讨论】:
-
编写一个正则表达式来查找任何
()[]的出现,并为每个左括号增加一个计数器,为每个结束减少一个计数器。如果 (1) 计数器从不为负,并且 (2) 最终计数器值为 0,则括号是平衡的。也许您需要为()和[]设置不同的计数器。 -
@MichaelButscher 我知道解决这个问题的这种方法,最后我包含了额外的信息,这是帕森的谜题 - 所以我只需要处理 while 行和缩进,我无法编辑代码...我几乎使用了所有这些,除了
return searched[1:], False
标签: python string debugging recursion