列表索引在2d数组中超出范围

时间:2017-10-05 18:24:10

标签: python-3.x

我正在使用Python 3编写一个代码,该代码可以播放十五个游戏。我正在研究移动瓷砖的功能,但我似乎无法继续前进。这是我现在的功能:

def move(tile, d, board):
    for r in range(d):
        for c in range(d):
            if tile == board[r][c]:
                if board[r][c + 1] == "00":
                    # execute a swap algorithm
                if board[r][c - 1] == "00":
                    # execute a swap algorithm
                if board[r - 1][c] == "00":
                    # execute a swap algorithm
                if board[r + 1][c] == "00":
                    # execute a swap algorithm
    return False

d是用户提供的电路板的尺寸,例如用户类型4,电路板将是4x4正方形,其中数字为00 - 15。 我在这里想要完成的是检查列表的右边,左边,底部或顶部的值是否等于两个零,因为这就是我编码的方式,我会在完成后更改它。当我运行我的程序时,它打印板,但是一旦我输入一个触发移动功能的命令,我就会得到 这个错误:

 08 07 06
 05 04 03
 02 01 00
Tile to move: 1
Traceback (most recent call last):
  File "fifteen.py", line 58, in <module>
    if move(tile, d, board) == False:
  File "fifteen.py", line 30, in move
    if board[r + 1][c] == "00":
IndexError: list index out of range

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

for r in range(d)中,r会重复从0d-1的值。因此,当r等于d-1时,r + 1会给你d,这超出了范围。您必须检查r + 1是否在范围内。对于代码中的每个if语句也是如此。

尝试类似:

def isWithinBounds(x, lower, upper):
    return x >= lower and x < upper

其中lower = 0且upper = board of dimension。