Python 如何使用循环沿tic tac toe中的列进行迭代,以查看所有垂直值是否相同?

Python 如何使用循环沿tic tac toe中的列进行迭代,以查看所有垂直值是否相同?,python,arrays,Python,Arrays,这是我的解决方案: #across for i in range(len(myList)): for j in range(len(myList[0])): if (myList[i][j]=='X' OR 'O'): print("player myList[i][j] is the winner" %s) #down for i in range(len(myList)): for j in range(len(myList[0]

这是我的解决方案:

#across
for i in range(len(myList)):
     for j in range(len(myList[0])):
         if (myList[i][j]=='X' OR 'O'):
             print("player myList[i][j] is the winner" %s)
#down
for i in range(len(myList)):
    for j in range(len(myList[0])):
        if (myList[j][i]=='X' OR 'O'): #mylist[0][0] [1][0]
            print("player myList[i][j] is the winner" %s)

然而,让我困惑的是,不清楚是否在i循环之间比较列下的值?

您的两个循环都没有测试所有值是否相同

要测试所有值是否相同,请将值放在变量行或列的第一个条目中,然后使用
all()
函数测试行或列的其余部分

# across
for row in myList:
    first = row[0]
    if first in ['X', 'O'] and all(col = first for col in row[1:]):
        print("Player %s is the winner" % first)
        break
else: # This will only be executed if we didn't break out of the loop
    # down
    for colnum in len(myList[0]):
        first = myList[0][colnum]
        if first in ['X', 'O'] and all(row[colnum] = first for row in myList[1:])
            print("Player %s is the winner" % first)
            break
判断列表是否全部相等的另一种方法是使用
len(set(l))==1
(将列表转换为集合将删除所有重复项,如果它们都是重复项,则将有一个元素),因此您可以编写:

# across
for row in myList:
    first = row[0]
    if first in ['X', 'O'] and len(set(row)) == 1:
        print("Player %s is the winner" % row[0])
        break
else: # This will only be executed if we didn't break out of the loop
    # down
    for colnum in len(myList[0]):
        if first in ['X', 'O'] and len(set(row[colnum] for row in myList))) == 1:
            print("Player %s is the winner" % myList[0][colnum])
            break

myList[i][j]=='X'或'O'
不是测试变量是否包含任何一个值的正确方法。它应该是
myList[i][j]='X'或myList[i][j]='O'
myList[i][j],在['X',O']
中,我终于理解了这里的语法,但是先检查一下?是否有一种更简单的语法来检查所有三个值,我自己基本上无法得出这一点,那么为什么我们要初始化第0行的第一个元素,然后迭代以查看它是否匹配该值?有关测试数组中所有元素是否相等的其他方法,请参阅。但要对列执行此操作,必须将列转换为列表。您可以通过转置数组,然后处理其中的行来完成此操作。
len(set(row))==1
是一种非常简单的语法,用于判断所有元素是否相同。
len(set(row[colnum]表示myList中的行))==1
将判断列是否相同。