我在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;在控制台中。为什么是这样?它应该理想地显示真或假 - 对吗?或者我在脚本中遗漏了什么?
答案 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
并删除,因为该功能已经返回。