2015-11-22 134 views
0

IM接收"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") 
+3

我建议你在第二部分前打印'board'。这不是你想象的那样。 – TigerhawkT3

回答

0

你做的方式,板是一个清单,(行+的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']] 
+0

这是有道理的,但现在我得到的反馈是“返回的值是一个<类'NoneType'>,而不是一个列表。” –

+0

@kristofsole - 那么也许你应该'返回'的东西。请检阅您的课本或其他课程资料。 – TigerhawkT3

+0

我有一个全局董事会在功能的末尾使用以后的功能 –

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将创建一个列表,其中可以放置在每行中的'C'的数量为cols

+0

即时通讯不太确定如何解决这个代码 –

+0

它给我我需要什么,但在后面的代码部分即时通讯将不得不打电话给个人n_row,并且n_col值 –

+0

您可以通过board [n_row] [n_col]'访问或更新电路板中的任何项目。 – Noah

相关问题