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)),而不是在各处硬编码列表的长度。