Python 验证字符串时出现问题

Python 验证字符串时出现问题,python,string,recursion,Python,String,Recursion,我目前正在做一个关于codewars的kata,我必须检查一个字符串是否有效 如果使用的所有括号都正确(例如“(())”->correct”)(())“->not correct),则字符串有效 我的想法是使用以下代码使方法递归: import re def doMagic(s, n): if len(s) == 0: return 0 if n < 0: return n if len(s) == 1:

我目前正在做一个关于codewars的kata,我必须检查一个字符串是否有效

如果使用的所有括号都正确(例如“(())”->correct”)(())“->not correct),则字符串有效

我的想法是使用以下代码使方法递归:

import re

def doMagic(s, n):
    
    if len(s) == 0:
        return 0
    if n < 0:
        return n
    if len(s) == 1:
        if s[0] == '(':
            n += 1
        elif s[0] == ')':
            n -= 1
            
        return n
    
    if s[0] == '(':
        n += 1
    elif s[0] == ')':
        n -= 1
    
    n += doMagic(s[1:], n)
    print(n)
    return n

def valid_parentheses(string):
    string = re.sub("[^()]", "", string)
    openPars = 0
    
    return True if doMagic(string, openPars) == 0 else False
重新导入
def doMagic(南、北):
如果len=0:
返回0
如果n<0:
返回n
如果len=1:
如果s[0]=='(':
n+=1
elif s[0]==')':
n-=1
返回n
如果s[0]=='(':
n+=1
elif s[0]==')':
n-=1
n+=doMagic(s[1:],n)
打印(n)
返回n
def有效括号(字符串):
string=re.sub(“[^()]”,“”,string)
openPars=0
如果doMagic(string,openPars)==0,则返回True,否则返回False
(我过滤字符串,因为其中可能有随机字符)

除了输入“()”,代码大部分都有效


有人知道为什么它在这种特定情况下不起作用吗?

您应该尝试调试它并逐步完成代码。检查相关变量并查看它们何时开始给出意外值。我找不到返回
True
的输入,例如:
有效括号((())”
->
False
。我遗漏了什么?当
len(s)==0
时,您应该返回
n
,而不是
0
@MarkMeyer。有趣的是,在codewars上,所有测试用例要么为false,要么为空字符串。我在某个地方防卫性地搞砸了,但我找不到我搞砸的地方。你做过调试吗?我建议您阅读。您应该尝试调试它并逐步完成代码。检查相关变量并查看它们何时开始给出意外值。我找不到返回
True
的输入,例如:
有效括号((())”
->
False
。我遗漏了什么?当
len(s)==0
时,您应该返回
n
,而不是
0
@MarkMeyer。有趣的是,在codewars上,所有测试用例要么为false,要么为空字符串。我在某个地方防卫性地搞砸了,但我找不到我搞砸的地方。你做过调试吗?我建议你读书。