我必须编写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 和在线可视化调试器,但是我无法将递归包装在那里......那里的棘手情况是这也是Parson的谜题,我不能用不同的方式写出来。
我哪里出错?
答案 0 :(得分:0)
这会得到您正在寻找的结果:
<强>代码强>
CASES = ["", 'abc', '(a)', ')a(', '((a)', '((a(', '))a)', '()(a)', 'a(a)' ]
left_pairs = ['(','[']
right_pairs = [')',']']
def balanced(case):
count = 0
for char in left_pairs:
count += case.count(char)
for char in right_pairs:
count -= case.count(char)
if count == 0 or count % 1:
return True
else:
return False
for case in CASES:
print(str(balanced(case)) + " " + case)
<强>返回强>
True
True abc
True (a)
True )a(
False ((a)
False ((a(
False ))a)
True ()(a)
True a(a)
答案 1 :(得分:0)
我在朋友的帮助下找到了正确的答案,命令的顺序错了,一些意图也不在正确的位置。
我发现这段代码难以阅读且使用起来太复杂,尽管可能是那里的挑战。 带堆栈的版本对我来说更为普遍。
未来用户有工作版本:
PAIRS = {'(' : ')', '[' : ']'}
def balanced(text):
#supp. f.
def find(searched, open):
if not searched:
return "", open is None
if searched[0] in PAIRS.keys():
rest, val = find(searched[1:], searched[0])
if val is False:
return rest, False
return find(rest, open)
elif open is not None and searched[0] == PAIRS[open]:
return searched[1:], True
elif searched[0] in PAIRS.values():
return searched[1:], False
else:
return find(searched[1:], open)
return find(text, None)