列表索引超出范围(绊倒新手)

时间:2018-01-01 04:58:56

标签: python python-3.x

我是一名新手程序员,我正在尝试从初级到中级交叉但有时我遇到问题排查并发现我的错误。这是我正在努力的问题。我正在编码一个数独谜题,第一步是确保它是一个完美的正方形或矩阵。所以像3 x 3或9 x 9.在我的下面的代码中,你会看到我得到的是行的计数,然后是列的计数。如果这些数量相等,那么它就是一个完美的正方形。

def check_square(square):
    # Count Row
    i = 0
    j = 0
    countRow = 0
    countCol = 0

    while square[i][j] <= len(square):
        print("This is i:", i, "This is j:",j)
        countRow = countRow + 1
        j = j + 1
        if j == len(square):
            print(countRow)
            break

    i = 0
    j = 0
    while square[i][j] <= len(square):
        print("This is i:", i, "This is j:", j)
        countCol = countCol + 1
        i = i + 1
        if i == len(square):
            print(countCol)
            break

    if countRow == countCol:
        print("True")
        return True
    else:
        print("False")
        return False

当我像这样进入一个完美的广场时:

[[1, 2, 3, 4],
 [2, 4, 1, 3],
 [3, 1, 4, 2],
 [4, 3, 2, 1]]

我的代码传递并打印出“True”。但是当我通过这样一个不完美的方格时:

[[1, 2, 3],
[2, 4, 1],
[3, 1, 4],
[4, 3, 2]]

我的代码失败并提供错误:

Traceback (most recent call last):
  File "/Users/jim/PycharmProjects/Sudoku/sudoku.py", line 113, in <module>
    [4, 3, 2]])
  File "/Users/jim/PycharmProjects/Sudoku/sudoku.py", line 84, in check_square
    while square[i][j] < len(square):
IndexError: list index out of range

我介绍了我的代码并发现它在这一行上失败了:

while square[i][j] <= len(square):

例如,如果我有一个长度为4的正方形,当j = 2且j增加1时我的行中只有3个项目,则会抛出错误,因为它需要更多的条目。我真的被这些错误搞砸了,这真的令人沮丧,因为我还不知道如何修复它们。任何帮助都会很棒。

**编辑** 我的问题不同,因为我正在检查一个不完美的方块。

1 个答案:

答案 0 :(得分:0)

如果square不是正方形,而是矩形,那么您有两种长度可以处理:(a)行数,即len(square),以及(b)数字列,即len(square[0])

在第一个循环中,j遍历行,即在示例中从0..3开始。但它被用作列索引,即使有效列索引仅从0..2开始运行。因此,请检查j == len(square)

,而不是检查j == len(square[0])