最初的问题是:对于一个给定的3x3tic-tac-toe板,检查是否有一个玩家赢了。
到目前为止,我提出的最简单的解决方案是旋转矩阵并对每一行求和:
board
[[0, 1, 2], [3, 4, 5], [6, 7, 8]]
pr(board)
0 1 2
3 4 5
6 7 8
pr(zip(*board))
0 3 6
1 4 7
2 5 8
上面的0..9个数字只是用来显示棋盘上的位置,通常情况下,1号玩家的数字是1,2号玩家的数字是-1,0号玩家的数字是0。一排一排地走,如果加起来是3或-3,这就是获胜的一块。
但是,不检查对角线。有没有什么方法可以用优雅+高效的方式从这样的矩阵中提取对角线?我不是指“手动”使用普通索引(0,1,2),而是得到n x n矩阵的对角线。
P.S.pr只是打印二维列表的辅助函数:
def pr(x):
for row in x:
print ' '.join(map(str, row))
最佳答案
用魔方给你的游戏场编号
2|9|4
7|5|3
6|1|8
现在,在三次移动后进行总结,并检查总和是否为15-->赢家。你必须为每个玩家检查这个。当然你必须在第四步和第五步后重新检查(只有开始游戏的玩家)
这就是我在第一个Java类中解决这个问题的方法。
关于python - 检查二维列表中的对角线(Python),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15100735/