繁体   English   中英

在Python中测试Palindrome

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

在真正的回文上,我得到'无'。 当结果不是回文时,我得到'Not a palindrome'的预期值。

切换到以下行:

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情况下没有返回路径。 当您退出递归时,您只返回“是一个回文”到关于它的级别,但除此之外,您将返回一个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"))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM