【问题标题】:Incorrect return value, not getting a 'True' return, Python返回值不正确,没有得到“真”返回,Python
【发布时间】:2018-09-01 23:01:15
【问题描述】:

我期待返回 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

【问题讨论】:

  • 如果不返回任何内容,则返回值为None。在某些情况下,您不会返回任何内容,即此处:is_palindrome(middle(word))

标签: python return-value palindrome


【解决方案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】:

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

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

    【讨论】:

      【解决方案3】:

      您应该在每个可能的条件分支中返回结果。您可以直接使用 return 语句或将 is_palindrome 函数的结果捕获到某个变量中,如果混淆,则返回。

      【讨论】:

        猜你喜欢
        • 2020-02-04
        • 2021-06-25
        • 2014-11-26
        • 1970-01-01
        • 2010-10-16
        • 2020-12-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多