Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 列表分配索引超出范围(创建扫雷板)_Python_Python 3.x - Fatal编程技术网

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

Python 列表分配索引超出范围(创建扫雷板),python,python-3.x,Python,Python 3.x,im接收到“列表分配索引超出范围” 按照您的方式,board是一个包含(rows+cols)空列表的列表,而不是一个包含行和列的列表,每个列之间都有行和空格。您要做的是创建一个包含行列表的列表,然后附加'C'cols times,如下所示: def createBoard(rows, cols, mines): board = [] for n_row in range(rows): board.append([]) for n_row in range

im接收到
“列表分配索引超出范围”


按照您的方式,board是一个包含(rows+cols)空列表的列表,而不是一个包含行和列的列表,每个列之间都有行和空格。您要做的是创建一个包含行列表的列表,然后附加'C'cols times,如下所示:

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']]

在嵌套的
for
循环中,您试图将电路板中的每个位置初始化为
(“C”)
,您正在索引位置,其值等于
cols
。但是,在
createBoard
中,您正在将空列表附加到
board
对象。因此,
board[n_row][n_col]
所引用的位置实际上不存在,因此出现错误

您应该在创建后打印
电路板
,以确保它是您期望的尺寸


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

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

用于范围内的n_行(行)
提供
行数
行数
['C']*cols
将创建一个列表,其中包含
cols
可放置在每行中的'C'编号

我建议您在第二部分之前打印
。这不是你想象的那样。这是有道理的,但现在我得到的反馈是“返回的值是一个,而不是一个列表。”@Kristofole-那么也许你应该
返回
一些东西。请阅读您的课本或其他课程资料。我在课程结束时有一个全球板,供以后使用functions@kristofsole-那么无论自动检查器给你什么“返回的值…”错误消息都不希望你这样做。@Kristofole我在最后添加了返回值。我已经测试过了,它可以在我的电脑上运行。只需获得您的全局板,然后执行
global\u board=createBoard(3,3,5)
或任何您想要使用的值,它会提供我所需的,但在代码的后面部分,我将不得不调用单个n\u行,n\u列值您可以通过
board[n\u行]
访问或更新板中的任何项目。
def createBoard(rows, cols, mines):
    board = []
    for n_row in range(rows):
        row = []
        row.extend(['C'] * cols)
        board.append(row)
    return board