有条件检查后如何在python中更改数组中的元素

时间:2019-03-20 14:13:00

标签: arrays python-3.x

嘿,我是Python初学者,作为一个学习项目,我正在使用pygame模块制作井字游戏。 (用红色和绿色代替“ X”和“ O”)我有这个问题:我想检查谁赢了,所以用这样的字段做了一个数组

all = [["00", "01", "02"],
      ["10", "11", "12"],
      ["20", "21", "22"]]

它包含了tictactoe网格中的所有可能位置,并且当玩家用鼠标单击网格时,我检查他单击的位置并将该信息提供给循环,这应该将网格中的值更改为简单的标记,因此我知道单击的是红色还是绿色。

红色的示例循环:

  for r in all:
            for c in r:
                if c == str(row) + str(column):


                    c = "R"

最后一部分无效。它不会将值分配给数组,并且如果我打印该数组,它将保持不变。它只将其分配给变量c,但是我想要这个。 (例如,我点击表格第01部分广告红色):

all = [["00", "R", "02"],
      ["10", "11", "12"],
      ["20", "21", "22"]]

先谢谢了。我知道这可能是一个愚蠢的问题,但我被困在这里。

2 个答案:

答案 0 :(得分:0)

这样做的时候

c = "R"

您不是覆盖 c中的值,而是替换。换句话说,当c最初指向列表中的某个位置时,您将指向一个完全不同的数据源。原始数据源-列表-保持不变。

解决此问题的最简单方法是改为使用 indices

for r in range(len(all)):
    for c in range(len(all[r])):
        if all[r][c] == str(row) + str(column):
            all[r][c] = "R"

这样,当您这样做

all[r][c] = "R"

您正在永久更改列表中的值。

答案 1 :(得分:0)

变量c只是您的位置。

如果您想坚持使用代码,只需使用rowcolumn索引来设置数组all中的正确位置

for r in all:
    for c in r:
        if c == str(row) + str(column):
            all[row][column] = "R"

编辑:使用for x in range();)

for r in range(len(all)):
    for c in range(len(all[r])):
        if all[r][c] == str(row) + str(column):
            all[r][c] = "R"