调用函数时遇到一些问题。
import random
board = []
solution=[]
def isConflict(x, y):
for (i, j) in board:
if x == i:
return True
if y == j:
return True
if abs(x - i) == abs(y - j):
return True
else:
return False
def solve(x,y):
for y in range(1, 9):
if isConflict(x, y)==False:
board.append((x, y))
solve(x + 1,y)
board.remove((x,y))
if x > 8:
solution.append(list(board))
if len(solution)==92:
return solution[random.randint(1,91)]
a=solve(1,1)
print(a)
这将给出无。但是,如果我将最后一部分更改为:
if x > 8:
solution.append(list(board))
if len(solution)==92:
print(solution[random.randint(1,91)])
solve(1,1)
我能得到答案。 因此,我无法对该函数执行任何操作,因为它总是变成Nonetype,我想在其他函数中使用它。我该怎么办?非常感谢!!
答案 0 :(得分:1)
片刻似乎很神奇,但后来我注意到解决方案是递归的。条件为真,但不在最顶层的调用中。
您应该使用solve的值而不是仅仅调用它。我将其更改为:
def solve(x,y):
if x > 8:
solution.append(list(board))
if len(solution)==92:
return solution[random.randint(1,91)]
for y in range(1, 9):
if isConflict(x, y)==False:
board.append((x, y))
s = solve(x + 1,y)
board.remove((x,y))
if s is not None:
return s
如果函数的所有路径都没有返回值,通常会出错。
答案 1 :(得分:-1)
solve
只会在x > 8
时返回任何内容。在Python中,如果你的函数因为它的执行结束(而不是return
)而结束,那么它将返回None
。
如果您想在x <= 8
时退回某些内容,则应添加else
并将其返回。