Python:函数打印布尔返回值

时间:2016-12-17 18:45:59

标签: python recursion

我在python中遇到了一个小问题。这是问题 -

给定一个int数组,如果数组包含6,则递归计算。我们将使用仅考虑从给定索引开始的数组部分的约定。通过这种方式,递归调用可以传递索引+ 1以向下移动数组。初始调用将在索引中传递为0。

array6([1, 6, 4], 0) → true
array6([1, 4], 0) → false
array6([6], 0) → true

这是我提出的解决方案。

def array6(intList, index):
    if len(intList) < index + 1:
        print(False)
    else:
        if intList[index] == 6:
            print(True)
        else:
            array6(intList, index + 1)

该脚本似乎工作正常,除非我将print更改为return语句并将其命名为:print(array6([1,6,4],0))它显示&#34; None&#34;在控制台中。为什么是这样?它应该理想地显示真或假 - 对吗?或者我在脚本中遗漏了什么?

3 个答案:

答案 0 :(得分:1)

当执行移动到最内部的else语句时,找不到return语句,因此假定为None

为了解决这个问题,请执行:

return array6(intList, index + 1)

答案 1 :(得分:1)

您似乎忘了return函数array6(intList, index+1)。在递归函数中,if-else-if链的所有块都返回一些东西是至关重要的。只要函数没有返回任何内容,就会得到None

这就是整个代码的样子 - (查看评论以了解出错的地方

def array6(intList, index):
    if len(intList) < index + 1:
        return False
    else:
        if intList[index] == 6:
            return True
        else:
            # you forgot the return here
            return array6(intList, index + 1)

答案 2 :(得分:1)

所有Python函数都返回一些东西。如果未显式返回,则返回值为None。你没有归还任何东西,但你很亲密:

def array6(intList, index):
    if len(intList) < index + 1:
        return False
    else:
        if intList[index] == 6:
            return True
        else:
            return array6(intList, index + 1)

此外,您可以删除这样的缩进级别

def array6(intList, index):
    if len(intList) < index + 1:
        return False
    if intList[index] == 6:
        return True
    return array6(intList, index + 1)

如果if内有return,您可以删除跟随else并删除,因为该功能已经返回。