我正在使用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
有人可以帮忙吗?
答案 0 :(得分:0)
在for r in range(d)
中,r
会重复从0
到d-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。