我们获得了一个编写获取列表的方法的赋值,如果所有元素都是正数则返回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
为什么这样做?以及如何摆脱额外的布尔值?
*编辑 - 发现我的问题,在我的主要装备工作时,我的笔记本电脑无法正常工作
答案 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