Python 回文算法与UnboundLocalError
这是我查找字符串中最长回文的代码。 我收到以下错误消息: “UnboundLocalError:赋值前引用的局部变量'Current\u Pal'” 我知道变量‘Current_Pal’应该在isPal函数中,但如果我这样做,则变量将在每个循环中初始化为零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= ''
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)