2015-11-22 93 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

相關問題