首页 > 解决方案 > 条件检查后如何在python中更改数组中的元素

问题描述

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

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

它包含tictactoe网格中所有可能的位置,当玩家用鼠标单击网格时,我检查他单击的位置并将该信息提供给一个循环,该循环应该将网格中的值更改为一个简单的标记,所以我知道它是否是点击那里的红色或绿色。

RED 的示例循环:

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


                    c = "R"

最后一部分行不通。它不会将值分配给数组,如果我打印数组,它不会改变。它只将它分配给变量 c,但我想要这个。(例如,我单击网格部分 01 广告 RED):

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

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

标签: arrayspython-3.x

解决方案


当你这样做

c = "R"

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

解决问题的最简单方法是使用索引循环:

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"

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


推荐阅读