2017-12-22 14 views
-1

この質問は、pythonを使ったtic tac toe問題に関連しています。リストを持っているとしましょう。my_list = ['X', 'O', 'X', 'O', 'X', '-', 'O', 'X', 'X']私はrange(0, 2) or range(3, 5) or range(6, 8) == X内のすべての項目は、これまでのところ、私は次のことを試してみましたかどうかを確認したいのですが、構文エラーを取得:範囲内のすべての項目が特定の値と等しいかどうかを調べる

my_list = ['X', 'O', 'X', 'O', 'X', '-', 'O', 'X', 'X'] 

for i in range(0, 3): 
    if all(board[i]) == 'X': 
     print('X is the winner') 
    elif all(board[i]) == 'Y': 
     print('Y is the winner') 

問題は本当に二行目に範囲を設定するから茎が、私はまた私を感じますall関数を正しく使用していません。私の間違いをここで軽く払拭できますか?また、インデックス「items[0, 3, 6]」、「[1, 4, 7]」、「[2, 5, 8]」、「列」、および対角線インデックス[0, 4, 8]および[6, 4, 2]がすべて特定の値であるかどうかを確認する必要があります。明示的に勝者のインデックスをリスト

+1

「範囲(0,1,2)」は数字0,1,2ではありません。[docs](https://docs.python.org/3/library/)を参照してください。 stdtypes.html#typesseq-range)。 – user2357112

+0

範囲を編集しました。申し訳ありませんが、私はPythonを初めて使いこなし、混乱させました。 – jcbridwe

+0

'print(I)in the loop'を追加します。これがうまくいかないことがわかります。 –

答えて

2

は動作します:

my_list = ['X', 'O', 'X', 'O', 'X', '-', 'O', 'X', 'X'] 

winner_indices = [[0, 1, 2], [3, 4, 5], [6, 7, 8], 
        [0, 3, 6], [1, 4, 7], [2, 5, 8], 
        [0, 4, 8], [6, 4, 2]] 

no_winner = True 
for indices in winner_indices: 
    selected = [my_list[index] for index in indices] 
    for party in ['X', 'O']: 
     if all(item == party for item in selected): 
      print('{} is the winner'.format(party)) 
      no_winner = False 
if no_winner: 
    print('nobody wins') 
-1

勝者を決定する際に、すべての勝ちの組み合わせを考慮していません。 私が使用しようとしているアプローチは、一般的な方法でコンペティティブコンビネーショングリッドを生成するために使用できます。あなたが拡大縮小したい場合でもそれは助けになります。

私の解決策はnumpyパッケージを使用しています。まだインストールしていない場合はインストールしてください。

import numpy as np 
from itertools import chain 

#Define size of your grid 
n_dim = 3 

#Input list from players 
my_list = ['X', 'O', 'X', 'O', 'X', '-', 'O', 'X', 'X'] 

#Generate a n_dim*n_dim grid and reshape it in rows and columns 
grid = np.arange(n_dim*n_dim).reshape(n_dim, n_dim) 

#Get all rows and columns out from the grid as they all are winning combinations 
grid_l = list(chain.from_iterable((grid[i].tolist(), grid[:,i].tolist()) for i in range(n_dim))) 

#Get the forward diagonal 
grid_l.append(grid.diagonal().tolist()) 

#Get reverse diagonal 
grid_l.append(np.diag(np.fliplr(grid)).tolist()) 

#Check if any player's combination matches with any winning combination 
result = [i for i in grid_l if all(my_list[k] == 'X' for k in i) or all(my_list[k] == 'O' for k in i)] 
#result [[0,4,8]] 
関連する問題