在CS1的一个Python项目中工作,我遇到了一个奇怪的问题,我和我的室友都无法解决。代码的一般作用域是使用数字填充0的网格,用一定大小的形状填充该空间,我们必须一路检查以确保不会将形状放在已经存在形状的位置。我这里有两个函数,它们实际上都做相同的事情,但是不管出于什么原因,当falsechecker返回列表时,它会将其作为NoneType返回。为什么会这样?
def falseChecker(binList, r, c, size):
sCheck = isSpaceFree(binList, r, c, size)
if sCheck == True:
for x in range(c, c+size):
for y in range(r, r+size):
binList[x][y] = size
return binList
else:
c += 1
if c > len(binList):
c = 0
r += 1
if r > len(binList):
return binList
falseChecker(binList, r, c, size)
def iChecker(binList, blockList):
r = 0
c = 0
for i in blockList:
check = isSpaceFree(binList, r, c, i)
if check == True:
for x in range(c, c+i):
for y in range(r, r+i):
binList[x][y] = i
c += 1
if c > len(binList):
c = 0
r += 1
if r > len(binList):
return binList
else:
binList = falseChecker(binList, r, c, i)
return binList
main()
递归行:
必须是
或者递归函数结束,外部函数继续因为它还没有返回。然后它不返回就结束了,因此返回
None
。在
sCheck == True
为false的情况下,您不需要return
任何东西。在Python中,不显式return
的函数返回None
。如果您试图递归调用自己并返回结果,则需要:
在
falseChecker
结尾处需要一个return
:在Python中,如果函数在自身结束时没有返回,则默认返回
None
。此外,当首次运行falseChecker
时,如果sCheck
是False
,则它将执行else
块。此代码块不包含return
。因此,falseChecker
的最终返回值将是None
。相关问题 更多 >
编程相关推荐