嘿,我是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"]]
先谢谢了。我知道这可能是一个愚蠢的问题,但我被困在这里。
答案 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只是您的位置。
如果您想坚持使用代码,只需使用row
和column
索引来设置数组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"