最初的问题是:对于一个给定的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/

10-11 10:33
查看更多