2017-03-18 90 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