在 Python 中测试回文

Testing for a Palindrome in Python

我现在知道有更好的解决方案,但我很困惑为什么我会得到这样的结果。

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]))

在真正的回文中,我得到 'None'。当结果不是回文时,我得到的期望值是'Not a palindrome'.

更改为以下行:

return isPalindrome(test[1:-1])

您必须 return 一个值,否则 return 的值是 None

你的问题:第 7 行应该是:

return isPalindrome(test[1:-1])

没有return,调用函数,return None.

此外,如其他帖子所述,偶数字符串存在问题,因此添加 len(test)==0 的条件。

  • if --> True 的情况下没有return路径。当你 return 退出递归时,你只会 return "Is a palindrome" 到它的级别,但除此之外你是 return 将 Null 字符串传递给 main 函数。

  • 你没有考虑到递归何时变成空字符串。所以条件 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"))

另一个建议

 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])