Python中的Indexerror原因不明

时间:2016-07-17 15:33:14

标签: python python-3.x pygame

我做了连接4,我试图找出一个算法来确定胜利者。下面的一个确定水平获胜者,虽然由于某种原因,当计数器像这样垂直定位时会发生错误。 导致此错误的原因是什么?如何解决?

董事会[5] [5] == 1(红筹)

董事会[4] [5] == 1(红筹)

董事会[3] [5] == 1(红筹)当这是错误造成的

#Check for horizontal win   
 for y in range(6):
        for x in range(7 - 3):
            if board[x][y] == 1 and board[x+1][y] == 1 and board[x+2][y] == 1 and board[x+3][y] == 1:
                return True

Game Image ERROR:

  if board[x][y] == 1 and board[x+1][y] == 1 and board[x+2][y] == 1 and board[x+3][y] == 1:
    IndexError: list index out of range

更新: 这有效但现在垂直测试不起作用,我做了什么?

# check vertical spaces
for x in range(6):
    for y in range(7 - 3):
        if board[x][y] == 1 and board[x][y+1] == 1 and board[x][y+2] == 1 and board[x][y+3] == 1:
            return True

更新2:我选择垂直时的索引错误,当筹码位于以下相同位置时发生

检查垂直空间

for x in range(6):

    for y in range(7 - 3):

        if board[y][x] == 1 and board[y+1][x] == 1 and board[y+2][x] == 1 and board[y+3][x] == 1:

            return True

1 个答案:

答案 0 :(得分:1)

看起来你的电路板的尺寸是混合的。您发布的图片显示插入的芯片按垂直顺序插入并更改y。

board[5][5] == 1 (red chip)

board[4][5] == 1 (red chip)

board[3][5] == 1 (red chip) # Like so

因此,实际上应使用Board[y][x]访问您的电路板布局。

但是当您在水平空间中搜索时,您会使用Board[x][y]查看电路板。尝试将其更改为

#Check for horizontal win   
 for y in range(6):
        for x in range(7 - 3):
            if board[y][x] == 1 and board[y][x + 1] == 1 and board[y][x + 2] == 1 and board[y][x + 3] == 1:
                return True

编辑:要修复垂直,只需在我们解决水平检查问题时切换x和y

Edit2:确保在使用否定词时打印并检查索引,太大的数字会给你索引错误,但负数不会给你列表索引中的任何错误。在胜利检查失败之前,你不会意识到这个问题。