递归 - 返回值两次|蟒蛇

时间:2016-09-21 07:19:53

标签: python recursion

我们获得了一个编写获取列表的方法的赋值,如果所有元素都是正数则返回true,否则返回false。 我们被告知在我们的解决方案中实现递归,所以我写了以下内容:

def positive_list(li):
    if len(li) == 1 and li[0] > 0:
        return True
    else:
        if li[0] < 0:
            return False
        return positive_list(li[1::])

因此该方法工作正常,但对于print positive_list([1, 2, 3, 4]) in将打印:

True
True

为什么这样做?以及如何摆脱额外的布尔值?

*编辑 - 发现我的问题,在我的主要装备工作时,我的笔记本电脑无法正常工作

2 个答案:

答案 0 :(得分:2)

由于您共享的代码中没有print语句,因此永远不会打印任何值。

对于非空列表,您的代码似乎没问题,但如果您的输入列表为空,它将失败。它将失败并显示消息IndexError: list index out of range

为防止这种情况发生,您可以将if len(li) == 1 and li[0] > 0:声明修改为:

if len(li) == 0 or (len(li) == 1 and li[0]) > 0):

答案 1 :(得分:-3)

我不确定你为什么需要递归,但这是一个可能的答案。

def positive_list(given_list):
    for elm in given_list:
        if elm < 0:
            return False
    return True if given_list else False


print positive_list([1, 2, 3, 4])
print positive_list([1, -2, 3, 4])
print positive_list([1, 0, 3, 4])
print positive_list([])

以下是结果:

True
False
True
False