arrays - 条件检查后如何在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"]]
提前致谢。我知道这可能是一个愚蠢的问题,但我被困在这里。
解决方案
当你这样做
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"
您正在永久更改列表中的值。
推荐阅读
- display - 在 ViewportLayout 中扩展 Eyeshot Solid 和显示的问题
- bash - Bash:运行命令并在进程因错误退出时退出的优雅方式
- java - 找不到适合 jdbc.mysql 的驱动程序
- python - 使用 python cassandra 驱动程序在 Cassandra 中写入超时错误
- html - 服务器错误 - 405 - 不允许用于访问此页面的 HTTP 谓词
- android - FirebaseInstanceId.getInstance() 返回 null
- azure - 使用私有 TFS 在 Azure 中进行 VS 负载测试
- typescript - TS 林廷。禁用强制私有方法需要方法文档
- laravel - Laravel Passport 自定义哈希以创建令牌
- java - 仅在声明最后一个数组时出现的神秘错误