我现在知道有更好的解决方案,但我很困惑为什么会得到这样的结果。
import sys
def isPalindrome(test):
if len(test) == 1:
return("Is a palindrome")
else:
if test[0] == test[-1]:
isPalindrome(test[1:-1])
else:
return("Not a palindrome")
print(isPalindrome(sys.argv[1]))
在真正的回文上,我得到“无”。当结果不是回文时,我得到“不是回文”的期望值。
更改为以下行:
return isPalindrome(test[1:-1])
你必须返回一个值,否则返回的值是
None
。
另一个建议
def isPalindrome (test):
if test[0] != test[-1]: return ("It is NOT a Palindrome")
if len(test) == 1: return ("It is a Palindrome")
else:return test[0] == test[-1] and isPalindrome(test[1:-1])
您的问题:第 7 行应该是:
return isPalindrome(test[1:-1])
如果没有返回,则调用该函数,并返回 None。
此外,正如其他帖子中提到的,偶数字符串存在问题,因此请添加 len(test)==0 的条件。
if --> True 情况下没有返回路径。当您从递归中返回时,您仅将“Is a palindrome”返回到有关它的级别,但除此之外,您还将向主函数返回一个 Null 字符串。
您还没有考虑到递归何时变成空字符串。所以条件
test[0] == test[-1]
给出 *** IndexError: string index out of range
这有效:
def isPalindrome(test):
if (len(test) == 1 or len(test)==0):
return("Is a palindrome")
else:
print test[0] == test[-1]
if test[0] == test[-1]:
return isPalindrome(test[1:-1])
else:
print('Not')
return("Not a palindrome")
print(isPalindrome("aa"))