如何通过0-8数字输入设置Tic-Tac-Toe(井字棋)棋盘位置?
井字棋棋盘位置映射的优化实现
你需要的是将0-8的线性位置转换为3x3数组的行列索引,完全不需要硬编码判断,用整数除法和取余就能高效解决:
核心实现代码
def set(f, pos, type): row = pos // 3 # 计算行索引:0-2对应第0行,3-5对应第1行,6-8对应第2行 col = pos % 3 # 计算列索引:每个行内的位置0-2对应列0-2 f[row, col] = type return f
完整可运行代码
import numpy as np class main(): FIELD = np.zeros((3,3), dtype=int) @staticmethod # 原代码的set方法无self参数,需添加静态方法装饰器避免调用报错 def set(f, pos, type): row = pos // 3 col = pos % 3 f[row, col] = type return f main.set(main.FIELD, 2, 1) print(main.FIELD)
运行后输出与预期一致:
[[0 0 1] [0 0 0] [0 0 0]]
原有代码的问题说明
你之前的实现不仅效率低下,还存在逻辑错误:
pos == (0 or 1 or 2)等价于pos == 0,因为0 or 1 or 2的布尔运算结果是0,只有pos=0时会匹配第一个分支,像1、2这类同属第0行的位置会被错误分配到其他行。- 硬编码区间判断完全没必要,通过简单的数学计算就能直接完成位置映射,代码更简洁且不易出错。
内容的提问来源于stack exchange,提问作者tryg
相关产品推荐
相关产品推荐

