对于一个学校项目,我正在使用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
答案 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'的数量。