【发布时间】:2020-06-26 04:38:20
【问题描述】:
我正在尝试返回一个已通过递归函数传递的数组。但我只返回 None,而不是我预期的 bo Numpy 数组。
import numpy as np
board = [0, 0, 4, 5, 1, 9, 0, 0, 0, 6, 1, 0, 0, 7, 0, 0, 5, 9, 0, 0, 0, 6, 3, 0, 0, 0, 0, 5,
4, 0, 3, 0, 0, 0, 0, 2, 3, 0, 6, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 6, 7, 0, 0, 2, 0,
0, 0, 4, 0, 5, 8, 0, 0, 0, 4, 0, 0, 2, 0, 4, 0, 0, 1, 0, 0, 7, 0, 6]
grid = np.asarray(board).reshape(9, 9)
def possible(bo, y, x, n):
for i in range(0, 9):
if bo[y][i] == n:
return False
for i in range(0, 9):
if bo[i][x] == n:
return False
x0 = (x // 3) * 3
y0 = (y // 3) * 3
for i in range(0, 3):
for j in range(0, 3):
if bo[y0 + i][x0 + j] == n:
return False
return True
def solve(bo):
for y in range(9): # row
for x in range(9): # column
if bo[y][x] == 0:
for n in range(1, 10):
if possible(bo, y, x, n):
bo[y][x] = n
solve(bo)
bo[y][x] = 0
return
return bo
solved = solve(grid)
print(solved)
这是为什么?
我可以将它打印到控制台。但返回值为None。
请注意,第一个return 语句退出递归函数。允许移动到数组中的后续项目。
(上一个问题被标记为重复 - 但链接的问题没有回答我的查询)
编辑:明确我想要做什么。我正在尝试返回修改后的 bo 数组。第一个return 语句退出递归for n in range 语句。然后在范围内用另一个 # 运行。
【问题讨论】:
-
函数
return的第一个语句solve()应该返回一些明确的内容。看看控制流选项here。 -
solve是否按预期修改了grid? -
是的。代码功能但不会返回。我可以通过键入
print(bo)代替函数solve末尾的return 来打印它。但是当我尝试返回bo对象时,它会显示为None。 -
我建议您在两个返回值上方放置一个 print(),以便您自己查看哪个返回值是最后一个。
-
最后返回的是
solve中的最后一个。它打印出预期的结果。但是当我尝试返回时返回None。