当前位置: 首页 > 知识库问答 >
问题:

检查字符串是否用括号平衡

屠华辉
2023-03-14

我得写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和在线可视化调试器,但我无法将递归作为一个整体包装在那里......棘手的情况是,这也是帕森的谜题,我不能只是写得有太大不同。

我哪里做错了?

共有2个答案

夹谷浩宕
2023-03-14

我在朋友的帮助下找到了正确的答案,命令的顺序是错误的,有些意图也没有出现在正确的地方。

我发现这段代码很难读懂,用起来也太复杂了,尽管这可能是一个挑战。带栈的版本对我来说更通用。

有一个工作版本供未来用户使用:

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)
越欣怡
2023-03-14

这会得到您想要的结果:

代码

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以及其他一些