Python 检查三分之二是否相等

Python 检查三分之二是否相等,python,Python,对于一个学校项目,我正在用python和AI开发一个Tictatcoe游戏。现在我有点困了一段时间。因此,我使用此代码检查是否有赢家: playField = [['.','.','.'],['.','.','.'],['.','.','.']] def checkWinner(L): return ((playField[0][0] == L and playField[0][1] == L and playField[0][2] == L) or #Line 1 horizontal

对于一个学校项目,我正在用python和AI开发一个Tictatcoe游戏。现在我有点困了一段时间。因此,我使用此代码检查是否有赢家:

playField = [['.','.','.'],['.','.','.'],['.','.','.']]
def checkWinner(L):
    return ((playField[0][0] == L and playField[0][1] == L and playField[0][2] == L) or #Line 1 horizontal
        (playField[1][0] == L and playField[1][1] == L and playField[1][2] == L) or #Line 2 horizontal
        (playField[2][0] == L and playField[2][1] == L and playField[2][2] == L) or #Line 3 horizontal
        (playField[0][0] == L and playField[1][0] == L and playField[2][0] == L) or #Colomn a vertical
        (playField[0][1] == L and playField[1][1] == L and playField[2][2] == L) or #Colomn b vertical
        (playField[0][2] == L and playField[1][2] == L and playField[2][2] == L) or #Colomn c vertical
        (playField[0][0] == L and playField[1][1] == L and playField[2][2] == L) or #Diagonal left-top to right-bot
        (playField[0][2] == L and playField[1][1] == L and playField[2][0] == L)) #Diagonal right-top to left-bot
这很有效,但对于我的人工智能,我想检查他是否有两个在一排,或者“敌人”有两个在一排。所以基本上我想检查三分之二是否等于L,我不知道如何重写函数,或者用另一种方法检查三分之二是否等于L

帮帮忙太好了

问候,
Jeroen

给定一个列表
foo=['a','B','L','L']
,您可以使用
foo.count('L')
检查“L”的数量

[playField[i] for i in range(3)]
董事会的各栏是:

[[playField[i][j] for i in range(3)] for j in range(3)]
对角线是

[playField[i][i] for i in range(3)]

因此,您现在正在处理三人列表(或三人列表)


假设您有一个列表,如

a = [10, 20, 10]
然后

返回等于10的项数。如果这个数字是2,那么

sorted(enumerate(a), key=lambda (_, e): e == 10)[0][0]
将给出不是10的(单个)项的索引



我认为这些都是您需要的构建块。

请发布一个最小、完整、可验证的示例,编写一个
check\u row
函数,该函数接收三个值并检查三个值中的两个。然后为8行中的每一行调用它。如果每个posible“一行三个”都是一个分开的列表,那么这就行了,但基本上我必须相互检查列表中的索引。这也是可能的吗?在这种情况下,我想你可以构造一个包含列的列表,使用例如
[field[I][0]for I In range(3)]
for column 0,然后调用
.count()
。另外[playField[2-I][I]for I In range(3)]-作为另一个对角线。@volcano谢谢-绝对正确,错过了那一个。非常感谢,这非常有帮助,所以通过这一点,我可以找到在lst中使用“L”的次数,但是有什么好方法可以返回不等于“L”的索引呢。例如:X。X。应该返回[0][1]。@Jeroen我认为自己尝试这样做会很好。如果你陷入困境,写一个问题。我可以写下答案,但是你基本上可以从中得到如何解决一个tic-tac-toe问题——这本身不是很有用。我尝试使用:def checktworw(L):columns=[[playField[I][j]代表范围(3)]代表范围(3)中的I][j]#Rows返回和(e==L代表列中的e),然后调用print(checktworw(“X”),但它一直返回0。我是python的高手,所以请原谅我的愚蠢问题:P。
sum(e == 10 for e in a)
sorted(enumerate(a), key=lambda (_, e): e == 10)[0][0]