Python 回文算法与UnboundLocalError

Python 回文算法与UnboundLocalError,python,algorithm,palindrome,Python,Algorithm,Palindrome,这是我查找字符串中最长回文的代码。 我收到以下错误消息: “UnboundLocalError:赋值前引用的局部变量'Current\u Pal'” 我知道变量‘Current_Pal’应该在isPal函数中,但如果我这样做,则变量将在每个循环中初始化为零 def isPalindrome(s): Current_Pal = '' Longest_Pal = '' def toChars(s): s = s.lower() ans= ''

这是我查找字符串中最长回文的代码。 我收到以下错误消息: “UnboundLocalError:赋值前引用的局部变量'Current\u Pal'”

我知道变量‘Current_Pal’应该在isPal函数中,但如果我这样做,则变量将在每个循环中初始化为零

def isPalindrome(s):
    Current_Pal = ''
    Longest_Pal = ''

    def toChars(s):
       s = s.lower()
       ans= ''
       for c in s:
           if c in 'abcdefghijklmnopqrstuvwxyz':
                ans = ans+ c
       return ans

    def isPal(s):
        if len(s) <= 1:
             return Current_Pal + s
        else:
            if s[0] == s[-1]:
                Current_Pal = Current_Pal + s[0]

        else:
            if Current_Pal > Longest_Pal:
                Longest_Pal = Current_Pal
                Current_Pal = ''
        return isPal(s[1:-1])
return isPal(toChars(s))

Palin = isPalindrome("HYTBCABADEFGHABCDEDCBAGHTFYW1234567887654321ZWETYGDE")
print(Palin)
def isPalindrome:
当前_Pal=“”
最长的朋友=“”
def toChars(多个):
s=s.下()
ans=“”
对于s中的c:
如果“abcdefghijklmnopqrstuvxyz”中的c:
ans=ans+c
返回ans
def isPal(s):
如果len(s)最长\u Pal:
最长\u Pal=当前\u Pal
当前_Pal=“”
返回isPal(s[1:-1])
返回isPal(toChars)
佩林=isPalindrome(“hytbcabadefghabcdabaghtfyw1234567887654321zwetygde”)
印刷(佩林)

您有一个递归函数,因此需要传入一个初始的
当前\u Pal
,并将该变量一直传递给后续调用;您也可以对
最长的\u Pal
执行相同的操作,如下所示:

def isPal(s, Current_Pal='', Longest_Pal=''):
    if len(s) <= 1:
         return Current_Pal + s
    else:
        if s[0] == s[-1]:
            Current_Pal = Current_Pal + s[0]

    else:
        if Current_Pal > Longest_Pal:
            Longest_Pal = Current_Pal
            Current_Pal = ''
    return isPal(s[1:-1], Current_Pal, Longest_Pal)

在每次调用
isPal()
时,将
Current\u Pal
的值作为参数传入。理解,谢谢!
def isPal(s, Current_Pal='', Longest_Pal=''):
    if len(s) <= 1:
         return Current_Pal + s
    elif s[0] == s[-1]:
            Current_Pal = Current_Pal + s[0]
    elif Current_Pal > Longest_Pal:
            Longest_Pal = Current_Pal
            Current_Pal = ''
    return isPal(s[1:-1], Current_Pal, Longest_Pal)