在 Python 中测试回文

问题描述 投票:0回答:4

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

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

在真正的回文上,我得到“无”。当结果不是回文时,我得到“不是回文”的期望值。

python string palindrome splice
4个回答
7
投票

更改为以下行:

return isPalindrome(test[1:-1])

你必须返回一个值,否则返回的值是

None


1
投票

另一个建议

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

0
投票

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

return isPalindrome(test[1:-1])

如果没有返回,则调用该函数,并返回 None。

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


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"))
© www.soinside.com 2019 - 2024. All rights reserved.