错误的返回值,未获得“真实”收益,Python

时间:2018-09-01 23:01:15

标签: python return-value palindrome

我期望返回True,但是返回None。

我在代码中放入了一些打印语句,以帮助调试。它显示了'print(“ Got True”)'语句已运行,因此我知道代码最终在'return True'之前位于代码的右分支中,但由于某种原因,我得到了'None'。但是,当我输入不是回文的单词时,“ return False”非常有效。

感谢您的帮助。

def first(word):
    return word[0]

def last(word):
    return word[-1]

def middle(word):
    return word[1:-1]

def is_palindrome(word):
    print(word)
    if len(word) <= 1:
        print("Got True")
        return True
    else:
        print(len(word))
        if first(word) == last(word):
            is_palindrome(middle(word))
        else:
            print("Got False")
            return False

print(is_palindrome('allen'))
print("\n")
print(is_palindrome('redivider'))

输出:

allen
5
Got False
False


redivider
9
edivide
7
divid
5
ivi
3
v
Got True
None

3 个答案:

答案 0 :(得分:1)

即使在递归函数中,也必须使用return语句返回值:

   if first(word) == last(word):
        return is_palindrome(middle(word))

答案 1 :(得分:1)

您需要返回函数的每个分支,例如:

def is_palindrome(word):
    print(word)
    if len(word) <= 1:
        print("Got True")
        return True
    else:
        print(len(word))
        if first(word) == last(word):
            return is_palindrome(middle(word))  # **Added return**
        else:
            print("Got False")
            return False

但是您可以简化结构,因为如果您return则不需要else:子句,因为它无法到达,因此可以这样写:

def is_palindrome(word):
    print(word)
    if len(word) <= 1:
        print("Got True")
        return True

    print(len(word))
    if first(word) == last(word):
        return is_palindrome(middle(word))

    print("Got False")
    return False

答案 2 :(得分:0)

您应该在所有可能的条件分支中返回结果。您可以直接使用return语句,也可以将is_palindrome函数的结果捕获到某个变量中,然后在令人困惑的情况下返回它。