2017-03-18 89 views
1

這是我的代碼:如何在Python中填充二維數組?

empty = ' ' 
board = [[empty, empty, empty], [empty, empty, empty], [empty, empty, empty]] 

def print_board(): 
    for idx, val in enumerate(board): 
     print(val) 

def board_update(x,y,player): 
    board[x:y] = player; 

game_is_running = True 
player = 'x' 
print_board() 



while game_is_running: 
    if player == 'x': 
     print ('x turn') 
     ver = int(input('input vertical of x ')) 
     hor = int(input('input horizontal of x ')) 
     board_update(ver, hor, player) 
     player = 'o' 
    print_board() 

    if player == 'o': 
     print ('o') 
     vertical = int(input('input vertical of o ')) 
     horizontal = int(input('input horizontal of o ')) 

每當我運行的代碼,它只是放在這樣的信:

[' ', ' ', ' '] 

x 

[' ', ' ', ' '] 

[' ', ' ', ' '] 

我如何使它看起來像這樣:

[' ', ' ', ' '] 

[' ', x , ' '] 

[' ', ' ', ' '] 
+2

'board [x:y] = player'不會做你認爲它做的事。你需要'board [x] [y] = player'。 – L3viathan

回答

1

這裏的問題在線

board[x:y] = player; 

[x:y]符號是用於分配的範圍,而你真正需要的可能是

board[x][y] = player 

通常情況下,你會得到一個錯誤,因爲以一個指定範圍內的單值都將拋出TypeError。在這種情況下,你正在分配字符串,python把它看作是一個字符列表。

0

board[x:y]是切片語法。在你的情況下,你似乎已經嘗試board[1:1] = "x"。讓我們來看看是什麼呢:

board[1:1]是指從索引1到索引列表1的部分(空白部分,但仍然部分):

['','',''], ['','',''], ['','',''] 
0   1   2   3 
      ⇈ 

既然你設置切片"x"(和一個字符串是一個序列),列表現在變成了:

['','',''], 'x', ['','',''], ['','',''] 
0   1 2   3   4 

你想要做的,而不是什麼是訪問列表(board[1])內的第二列表,以及內部列表()的第1個要素board[1][1]

board[x:y] = player