这是我在String中查找最长回文的代码。 我收到以下错误消息: " UnboundLocalError:局部变量' Current_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)
答案 0 :(得分:1)
你有一个递归函数,所以你需要传入一个初始Current_Pal
并继续将该变量传递给后续调用;您也可以对Longest_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)
这种方式设置为''
,然后其他更改会不断传递到方法中,并保留其先前的值。
另外,你应该重写你的其他陈述:
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)