如何先迭代列,然后迭代行

2024-05-15 15:27:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一个tic-tac-toe游戏,我被困在代码应该检查一个玩家是否垂直获胜的步骤,我认识c++的朋友告诉我先遍历列,然后遍历行,以使过程更简单。不知道它在python中是如何工作的。你知道吗

例如,玩家进入4x4表,一段时间后这就是他的结果。

[0,1,0,0]
[0,1,0,0]
[0,1,0,0]
[0,1,0,0]

他说如果我先遍历列,然后遍历行,那么会是这样的:

CHECK,1,0,0
CHECK,1,0,0
CHECK,1,0,0
CHECK,1,0,0

然后列索引变为1

0,CHECK,0,0
0,CHECK,0,0
0,CHECK,0,0
0,CHECK,0,0

抱歉,解释不好。。。你知道吗


Tags: 代码游戏过程check玩家步骤朋友tic
2条回答

像这样的?你知道吗

In [22]: import numpy as np

In [23]: a=np.array(range(15)).reshape(3,5)

In [24]: a
Out[24]: 
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])

In [25]: [ [x[i] for x in a] for i in range(a.shape[1])]
Out[25]: [[0, 5, 10], [1, 6, 11], [2, 7, 12], [3, 8, 13], [4, 9, 14]]

您可以使用内置的all()函数检查所有元素是否都为True,
Row-to-Column Transpositionzip(*table)符号

mytable1 = [[0,0,0,0],[1,1,1,1],[0,0,0,0],[0,0,0,0]]
mytable2 = [[0,0,1,0],[0,0,1,0],[0,0,1,0],[0,0,1,0]]
mytable3 = [[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]]
mytable4 = [[0,0,0,1],[0,0,1,0],[0,1,0,0],[1,0,0,0]]
mytable5 = [[0,1,0,0],[0,0,1,0],[0,1,0,0],[1,0,0,0]]
mytable6 = [[2,1,0,0],[2,0,1,0],[2,1,0,0],[2,0,1,0]]
mytable7 = [[2,1,0,0],[0,2,1,0],[0,1,2,0],[0,0,1,2]]

def hasWon(table,player_no):
    #check rows
    for row in table: 
        if all([e==player_no for e in row]):
            return True
    #check columns
    for column in zip(*table): 
        if all([e==player_no for e in column]):
            return True
    #check diagonals
    if all([table[i][i]==player_no for i in range(len(table)) ]): 
        return True
    if all([table[-i-1][i]==player_no for i in range(len(table))]):
        return True
    return False



print(hasWon(mytable1,1))
print(hasWon(mytable2,1))
print(hasWon(mytable3,1))
print(hasWon(mytable4,1))
print(hasWon(mytable5,1))
print(hasWon(mytable6,2))
print(hasWon(mytable7,2))

输出:

True
True
True
True
False
True
True

相关问题 更多 >