Python 列表分配索引超出范围(创建扫雷板)
im接收到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
“列表分配索引超出范围”
按照您的方式,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