检查三分之二是否相等

时间:2016-03-06 17:21:58

标签: python

对于一个学校项目,我正在使用AI在python中进行TicTacToe游戏。现在我有点卡住了一段时间。所以我使用此代码来检查是否有赢家:

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

2 个答案:

答案 0 :(得分:2)

董事会的行是

[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)]

[playField[2-i][i] for i in range(3)] (thanks, @volcano!)

所以你现在正在处理三人名单(或三人名单)。

假设您有一个列表,例如

a = [10, 20, 10]

然后

sum(e == 10 for e in a)

返回项目数等于10.如果此数字为2,则

sorted(enumerate(a), key=lambda (_, e): e == 10)[0][0]

将给出(单个)项目的索引不是10。

我认为这些都是你需要的所有构件。

答案 1 :(得分:1)

根据列表foo = ['A', 'B', 'L', 'L'],您可以使用foo.count('L')检查'L'的数量。