如何在Python中填写2D数组?

时间:2017-03-18 11:18:43

标签: python arrays python-3.x 2d

这是我的代码:

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 个答案:

答案 0 :(得分:1)

这里的问题是在行

board[x:y] = player;

[x:y]符号用于指定范围,而您真正需要的可能是

board[x][y] = player

通常您会收到错误,因为将单个值分配给某个范围会抛出TypeError。在这种情况下,您将分配字符串,python将其视为字符列表。

答案 1 :(得分: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]),以及该内部列表的第一个元素(board[1][1]):

board[x:y] = player