2016-11-05 6 views
0

私はティックタックのトーのゲームを書いています。プレーヤーがVERTICALLYで勝ったかどうかを確認するコードがある段階にはまっています。C++を知っている私の友人は、 COLUMNSを選択し、次にROWSをクリックするとプロセスが簡単になります。どのようにPythonで動作するかわからない。最初に列と行を反復する方法

たとえば、プレーヤーが4x4テーブルに入り、しばらくしてから、これが彼の結果です。

[0,1,0,0] 
[0,1,0,0] 
[0,1,0,0] 
[0,1,0,0] 

彼は私が最初の列を通して反復して、行ならば、それは次のようになるだろうと言った:

CHECK,1,0,0 
CHECK,1,0,0 
CHECK,1,0,0 
CHECK,1,0,0 

と1

0,CHECK,0,0 
0,CHECK,0,0 
0,CHECK,0,0 
0,CHECK,0,0 
悪い申し訳ありません

に、列のインデックスの変更説明...

+0

あなたがしようとしています単純なネストされたforループを記述しますか? –

+0

私は 'row> column'を試しましたが、私の友人は、その行の中の列とそれから行自体をループする必要があると言いました。 –

+0

あなたが探しているかもしれません。 http://stackoverflow.com/questions/903853/how-do-you-extract-a-column-from-a-multi-dimensional-array –

答えて

0

Row-to-Column Transposition

mytable1 = [[0,0,0,0],[1,1,1,1],[0,0,0,0],[0,0,0,0]] 
mytable2 = [[0,0,1,0],[0,0,1,0],[0,0,1,0],[0,0,1,0]] 
mytable3 = [[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]] 
mytable4 = [[0,0,0,1],[0,0,1,0],[0,1,0,0],[1,0,0,0]] 
mytable5 = [[0,1,0,0],[0,0,1,0],[0,1,0,0],[1,0,0,0]] 
mytable6 = [[2,1,0,0],[2,0,1,0],[2,1,0,0],[2,0,1,0]] 
mytable7 = [[2,1,0,0],[0,2,1,0],[0,1,2,0],[0,0,1,2]] 

def hasWon(table,player_no): 
    #check rows 
    for row in table: 
     if all([e==player_no for e in row]): 
      return True 
    #check columns 
    for column in zip(*table): 
     if all([e==player_no for e in column]): 
      return True 
    #check diagonals 
    if all([table[i][i]==player_no for i in range(len(table)) ]): 
     return True 
    if all([table[-i-1][i]==player_no for i in range(len(table))]): 
     return True 
    return False 



print(hasWon(mytable1,1)) 
print(hasWon(mytable2,1)) 
print(hasWon(mytable3,1)) 
print(hasWon(mytable4,1)) 
print(hasWon(mytable5,1)) 
print(hasWon(mytable6,2)) 
print(hasWon(mytable7,2)) 

出力用
zip(*table)表記:

True 
True 
True 
True 
False 
True 
True 
+0

しかし、もう一方のプレーヤーが「2」ではなく、1でない場合はどうすればいいですか? –

+0

@Idontreallywolfは答えを編集しました=) –

+0

ありがとうございました。 –

0

このようなものはありますか?あなたはすべての要素がTrueかどうかを確認するために、内蔵all()機能を使用することができます

In [22]: import numpy as np 

In [23]: a=np.array(range(15)).reshape(3,5) 

In [24]: a 
Out[24]: 
array([[ 0, 1, 2, 3, 4], 
     [ 5, 6, 7, 8, 9], 
     [10, 11, 12, 13, 14]]) 

In [25]: [ [x[i] for x in a] for i in range(a.shape[1])] 
Out[25]: [[0, 5, 10], [1, 6, 11], [2, 7, 12], [3, 8, 13], [4, 9, 14]] 
+0

私は 'for row in table:'と内部に 'for column in row' - 注文をどのように変更するのですか? –

+0

私の 'x in a'はあなたの' row in table'に対応しています。列は各行のインデックスによってアクセスされるので、列数( 'shape [1]')が必要であり、それらを反復処理します。 – karakfa

関連する問題