2017-03-18 1 views
1

Ceci est mon code:Comment remplir un tableau 2D en 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 ')) 

Chaque fois que je lance le code, il met juste la lettre comme ceci:

[' ', ' ', ' '] 

x 

[' ', ' ', ' '] 

[' ', ' ', ' '] 

Comment puis-je faire ressembler à ceci:

[' ', ' ', ' '] 

[' ', x , ' '] 

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

'board [x: y] = player' ne fait pas ce que vous pensez. Vous voulez 'board [x] [y] = player'. – L3viathan

Répondre

1

Le problème ici est dans la ligne

board[x:y] = player; 

la notation [x:y] est pour l'attribution des plages tout ce que vous avez vraiment besoin est probablement

board[x][y] = player 

Normalement, vous obtenez une erreur car attribution d'une valeur unique à une gamme va jeter TypeError. Dans ce cas, vous affectez une chaîne que python traite comme une liste de caractères.

0

board[x:y] est une syntaxe de découpage. Dans votre cas, vous semblez avoir essayé board[1:1] = "x". Voyons voir ce que ça fait:

board[1:1] fait référence à la partie de la liste de l'indice 1 à l'indice 1 (une partie vide, mais une partie quand même):

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

Puisque vous définissez cette tranche à "x" (et une chaîne est une séquence), la liste devient maintenant:

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

Qu'est-ce que vous voulez faire est plutôt accéder à la deuxième liste dans la liste (board[1]), et le 1er élément de cette liste intérieure (board[1][1]):

board[x:y] = player