如何将列表索引设置为字典中的值?

2024-10-03 17:19:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个嵌套的列表名为“board”,它应该像一个3x3网格(这是一个Tictaoe程序,我是一个完全的初学者):

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

要访问/更改此嵌套列表中的单个值,我相信我会使用两个索引,就像这样,在本例中更改第一个值:

board[0][0] = 'X'

我不想为了移动而同时输入两个坐标,所以我想给数字1-9分配一个特定的坐标或板上的位置,所以只需按一次键。我试着用字典来做这件事:

dicBoard = {7: [0][0], 8: [0][1], 9: [0][2],
            4: [1][0], 5: [1][1], 6: [1][2], 
            1: [2][0], 2: [2][1], 3: [2][2]}

但这不起作用,调用print(dicBoard[7])不会像我希望的那样输出[0][0],而只是0。因此,如果我尝试使用board[dicBoard[7] = 'X'作为特定值的目标,例如,计算机将其读取为board[0],而不是board[0][0],这意味着它以列表的整个第一行为目标

我还尝试将字典重写为dicBoard = {7: board[0][0]...}等等,但这不起作用,因为我无法通过字典中的单个输入更改原始列表“board”中的任何值dicBoard[7] = 'X'不会将board[0][0]更改为“X”,它只是更改字典本身中的值

我不能只使用字典而不使用列表的原因是,我检查一行中的三个X或O的方式需要一个带有坐标的“2D”列表,而且我认为我无法为字典分配坐标。使用字典检查是否成功显然有不同的方法,但我尝试在不硬编码TictaToe的每个组合的情况下进行检查。

我可能把自己弄得太复杂了,但这并不是什么严肃的事情,只是我需要学习,我更愿意接受挑战,去理解如何做这个字典+列表的东西

)谢谢


Tags: 程序board网格目标列表字典计算机原因
2条回答

您可以使用使用索引更改列表的帮助器函数来解决此问题。 修改字典以将索引存储为元组

dicBoard = {7: (0, 0), 8: (0, 1), 9: (0, 1),
            4: (1, 0), 5: (1, 1), 6: (1, 2), 
            1: (2, 0), 2: (2, 1), 3: (2, 2)}

您可以编写一个函数来使用字典更新列表中的值

def set_value(idx, val):
    if idx in dicBoard:
        i, j = dicBoard.get(idx)
        board[i][j] = val

您可以通过调用传递两个参数的方法set_value(move_number, value)来设置该值

set_value(7, 'X')

你可以在这里使用元组

>>> dict_board = {7: (0,0), 8: (0,1), 9: (0,2),
                  4: (1,0), 5: (1,1), 6: (1,2),
                  1: (2,0), 2: (2,1), 3: (2,2)}

>>> dict_board(7)
(0,0)

现在您可以将position_integer and value作为用户的输入。现在您可以编写ifelifelse条件来验证条目

示例:7,1

建议:

你甚至不需要考虑[0 ] [0 ]的位置。您可以要求用户在位置1,2,3,…9处输入并维护一个字典{1:'0',2:'x',…9:'x'},现在验证tic

相关问题 更多 >