python 迷宫求解器列表索引超出范围错误
python maze solver list index out of range error
我正在尝试观看演示如何对数独求解器进行编程的视频,但是当函数出现 true 时我遇到了错误。当输入不是有效选项时,我确实得到了错误的 return,所以我想这确实有效。
import numpy as np
grid = [[5, 3, 0, 0, 7, 0, 0, 0, 0],
[6, 0, 0, 1, 9, 5, 0, 0, 0],
[0, 9, 8, 0, 0, 0, 0, 6, 0],
[8, 0, 0, 0, 6, 0, 0, 0, 3],
[4, 0, 0, 8, 0, 3, 0, 0, 1],
[7, 0, 0, 0, 2, 0, 0, 0, 6],
[0, 6, 0, 0, 0, 0, 2, 8, 0],
[0, 0, 0, 0, 8, 0, 0, 7, 9]]
def possible(y, x, n):
global grid
for i in range(0, 9):
if grid[y][i] == n:
return False
for i in range(0, 9):
if grid[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 grid[y0 + i][x0 + j] == n:
return False
return True
print(possible(4, 4, 5))
这是我收到的错误:
Traceback (most recent call last):
File "sudoku.py", line 44, in <module>
print(possible(4, 4, 5))
File "sudoku.py", line 19, in possible
if grid[i][x] == n:
IndexError: list index out of range
Process finished with exit code 1
最后一行通常是您应该首先查看的地方:IndexError: list index out of range
。您还可以从堆栈跟踪中看到错误发生的确切位置。
您基本上是在尝试访问一个索引不存在的元素。这通常发生在索引为 >=
(大于或等于)列表的长度时,就像您的情况一样。
顺便说一句,您可以通过简单地使用 for element in my_list
之类的东西来迭代列表而不使用索引。但是,如果您有充分的理由使用索引,通常最好使用 for i in range(len(my_list))
,而不是在各处硬编码列表的长度。
我正在尝试观看演示如何对数独求解器进行编程的视频,但是当函数出现 true 时我遇到了错误。当输入不是有效选项时,我确实得到了错误的 return,所以我想这确实有效。
import numpy as np
grid = [[5, 3, 0, 0, 7, 0, 0, 0, 0],
[6, 0, 0, 1, 9, 5, 0, 0, 0],
[0, 9, 8, 0, 0, 0, 0, 6, 0],
[8, 0, 0, 0, 6, 0, 0, 0, 3],
[4, 0, 0, 8, 0, 3, 0, 0, 1],
[7, 0, 0, 0, 2, 0, 0, 0, 6],
[0, 6, 0, 0, 0, 0, 2, 8, 0],
[0, 0, 0, 0, 8, 0, 0, 7, 9]]
def possible(y, x, n):
global grid
for i in range(0, 9):
if grid[y][i] == n:
return False
for i in range(0, 9):
if grid[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 grid[y0 + i][x0 + j] == n:
return False
return True
print(possible(4, 4, 5))
这是我收到的错误:
Traceback (most recent call last):
File "sudoku.py", line 44, in <module>
print(possible(4, 4, 5))
File "sudoku.py", line 19, in possible
if grid[i][x] == n:
IndexError: list index out of range
Process finished with exit code 1
最后一行通常是您应该首先查看的地方:IndexError: list index out of range
。您还可以从堆栈跟踪中看到错误发生的确切位置。
您基本上是在尝试访问一个索引不存在的元素。这通常发生在索引为 >=
(大于或等于)列表的长度时,就像您的情况一样。
顺便说一句,您可以通过简单地使用 for element in my_list
之类的东西来迭代列表而不使用索引。但是,如果您有充分的理由使用索引,通常最好使用 for i in range(len(my_list))
,而不是在各处硬编码列表的长度。