Python回文代码不会返回任何内容

时间:2017-03-30 20:23:07

标签: python-2.7

为什么呢? 它返回:

  if word[0] != word[-1]:
IndexError: list index out of range

如果我改变"打印" Palindrome"" to"返回True"和"返回False"它根本不会返回任何内容。

import sys

exstring = "f"
data = list(exstring)

def palindrome(word):
    if len(word) < 2:
        print "Palindrome"
    if word[0] != word[-1]:
        print "Not Palindrome"
    return palindrome(word[1:-1])

palindrome(data)

2 个答案:

答案 0 :(得分:1)

首先,你需要一个像Hypnic Jerk那样的elif。其次,你需要在打印后返回。

工作代码:

import sys

exstring = "radar"
data = list(exstring)

def palindrome(word):
    if len(word) < 2:
        print "Palindrome"
        return True
    elif word[0] != word[-1]:
        print "Not Palindrome"
        return False
    return palindrome(word[1:-1])

palindrome(data)

答案 1 :(得分:0)

你想要做的是:

def palindrome(word):
    if len(word) < 2:
        return True
    if word[0] != word[-1]:
        return False
    return palindrome(word[1:-1])

在这种情况下你不需要elif。这只是一种很好的做法。除非第一个是假的,否则将不会达到第二个if语句。更“正确”(但仍然完全等效)是:

def palindrome(word):
    if len(word) < 2:
        return True
    elif word[0] != word[-1]:
        return False
    else
        return palindrome(word[1:-1])

此外,最好只让函数决定它是否是回文,而不是打印它。相反,你应该像这样使用它:

if palindrome(word):
    print "Palindrome"
else
    print "Not palindrome"

除非你有充分的理由,否则不要混合功能。