函数返回None,即使我有return命令

时间:2017-10-14 03:51:18

标签: python function recursion

我有一个函数来测试字符串是否是回文:

def palindrome(raw_text):
    # first to convert raw_text to a string of lower case letters and remove the space
    text = raw_text.lower()
    text = text.replace(' ', '')

    print('text is now', text)
    print('length of text is', len(text))
    if len(text) == 1 or len(text) == 0:
        return True
    else:
        if text[0] == text[-1]:
            print('so far so good')
            palindrome(text[1:-1])
        else:
            return False

为了清楚地进行调试,我添加了一些打印命令来帮助我。 如果我尝试:

raw_text = 'abcba'
print(palindrome(raw_text))

我会得到:

text is now abcba
length of text is 5
so far so good
text is now bcb
length of text is 3
so far so good
text is now c
length of text is 1
None

那么为什么我最后会得到一个无?我确实拥有return True

len(text) == 1 or 0命令

如果我只是给raw_text = 'a',它会给我:

text is now a
length of text is 1
True

2 个答案:

答案 0 :(得分:3)

你忘记了正确递归。

return palindrome(text[1:-1])

答案 1 :(得分:0)

谢谢,正如@Ignacio Vazquez-Abrams所说,我没有正确递归。 实际上代码不需要这么复杂。 我把它修改为:

def palindrome(raw_text):
    # first to convert raw_text to a string of lower case letters and remove the space
    text = raw_text.lower()
    text = text.replace(' ', '')

    print('text is now', text)
    print('length of text is', len(text))

    if len(text) <= 3:
        return text[0] == text[-1]
    else:
        return text[0] == text[-1] and palindrome(text[1:-1])