2017-10-18 60 views
1

我想檢查井字遊戲中所有可能的贏家條件,我如何以功能性方式重寫?檢查tic-tac-toe的優勝者 - NumPy/Python

board = numpy.array([[0, 0, 0], 
        [0, 0, 0], 
        [0, 0, 0]]) 
player = 1 

if any([(board[0, :] == player).all(), 
     (board[:, 0] == player).all(), 
     (board[1, :] == player).all(), 
     (board[:, 1] == player).all(), 
     (board[2, :] == player).all(), 
     (board[:, 2] == player).all()]): 
    print('Win') 
+2

不要忘記檢查對角線勝。 –

+0

記得@TomKarzes! – Skhaz

回答

3

使用的anyall組合 -

mask = board==player 
out = mask.all(0).any() | mask.all(1).any() 

爲了說明diagonal的,多做一些工作 -

out |= np.diag(mask).all() | np.diag(mask[:,::-1]).all() 
+2

真棒...另外,對於對角線,你可以使用'mask.diagonal()。all()'和'mask [:: - 1] .diagonal()。all()'(如果你想考慮那些) –

+0

真棒Divakar!感謝你們 – Skhaz