列表分配索引超出范围(创建扫雷板)

时间:2015-11-22 00:00:03

标签: python python-3.x

我正在接收"list assignment index out of range"

def createBoard(rows, cols, mines):
    board = []
    for n_row in range(rows):
        board.append([])
    for n_col in range(cols):
        board.append([])

 # Place a random letter at each location in the board
 for n_row in range(rows):
     for n_col in range(cols):
         board[n_row][n_col] = ("C")

2 个答案:

答案 0 :(得分:0)

执行此操作的方法,board是一个列表,其中包含(rows + cols)空列表,而不是包含行列的列表,每列都有行间距。你想要做的是创建一个列表,其中包含行列表,然后追加' C' cols时间,如下:

def createBoard(rows, cols, mines):
    board = []
    for n_row in range(rows):
        board.append([])

    for n_row in range(rows):
        for n_col in range(cols):
            board[n_row].append("C")
    return board #add this line if you wish the function to actually return the board

运行

global_board = createBoard(3,3,4)
print(global_board)

给了我:

[['C', 'C', 'C'], ['C', 'C', 'C'], ['C', 'C', 'C']]

答案 1 :(得分:0)

在您尝试将电路板中的每个位置初始化为for的嵌套("C")循环中,您要将位置编入索引,最大值等于cols。但是,在createBoard中,您要将空列表附加到board对象。因此,board[n_row][n_col]引用的位置实际上并不存在,因此也就是错误。

您应该在创建后打印board以确保它是您期望的尺寸。

如果您想在每个位置使用字母C初始化电路板,您可以执行以下操作。您可以将初始化和创建阶段组合在一起。

def createBoard(rows, cols, mines):
    board = []
    for n_row in range(rows):
        row = []
        row.extend(['C'] * cols)
        board.append(row)
    return board

for n_row in range(rows)为您提供rows行数。 ['C'] * cols会创建一个cols个数字为' C'在它中,你可以放在每一行。