我得写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和在线可视化调试器,但我无法将递归作为一个整体包装在那里......棘手的情况是,这也是帕森的谜题,我不能只是写得有太大不同。
我哪里做错了?
我在朋友的帮助下找到了正确的答案,命令的顺序是错误的,有些意图也没有出现在正确的地方。
我发现这段代码很难读懂,用起来也太复杂了,尽管这可能是一个挑战。带栈的版本对我来说更通用。
有一个工作版本供未来用户使用:
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)
这会得到您想要的结果:
代码
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)
作为一名java(和编程)新手,我在完成分配给我们的任务时遇到了麻烦。作业分为三部分,检查给定的字符串是否有平衡括号。 “规则”如下: -是平衡的
问题内容: 我想测试输入的String是否平衡。如果有匹配的左,右括号,括号或花括号,则将是平衡的。 我在选择做什么时遇到问题。我是否应该将每个左括号或右括号,方括号或大括号放在堆栈中,然后弹出它们?如果我将它们弹出,那对我有什么帮助? 问题答案: 1)对于每个开口支架:将其推入堆栈。 2)对于每个右括号:从堆栈中弹出并检查括号的类型是否匹配。如果不退货; 即 String中的当前符号是,如果从堆
我想测试输入字符串是否平衡。如果有一个匹配的开始和结束括号、括号或大括号,这将是平衡的。 我在选择做什么时遇到了问题。我是否应该将每个开始或结束的括号、括号或大括号放在一个堆栈中,然后将它们弹出?如果我把它们拿出来,这对我有什么帮助?
问题内容: 假设我有一个包含一些字母和标点符号的String数组 在字母[3]中,我们带有“。” 如何检查字符串是否为标点符号?我们知道有许多可能的标点符号(,。?!等) 到目前为止,我的进度: 问题答案: 您是否还需要检查更多标点符号? 如果是这样,您可以执行此操作。
如何检查字符串是否正确分组。例如,以下组是正确完成的: 接下来的操作不正确: 正确的字符串不能以错误的顺序关闭组、打开组但无法关闭组或在打开组之前关闭组。 可能包含任何符号 "()" "{}" 或“[]”以创建组的输入字符串。如果字符串为空或以其他方式正确分组,则输出返回,如果分组不正确,则返回。 有人能给我一些提示吗?
问题内容: 我有一个isNotEmpty函数,如果字符串不为空,则返回true;如果字符串为空,则返回false。我发现如果我通过它传递一个空字符串,它将无法正常工作。 使用isNotEmpty验证字符串: 如果该字符串为空,则其他字符串将不会执行,我不明白为什么,请有人对此有所帮助。 问题答案: 实际上是简单的问题。更改: 至 可以说,您可能还想将其更改为: 因为如果您传递的是数字0以及其他一些