2016-11-05 8 views
0

Ich schreibe ein Tic Tac Toe Spiel und ich bin auf dem Schritt fest, wo Code überprüft werden soll, ob ein Spieler VERTICALLY gewonnen hat, mein Freund, der C++ kennt, sagte mir, zuerst durchzulaufen COLUMNS und dann ROWS, um den Prozess zu erleichtern. Nicht sicher, wie es in Python funktioniert.Wie man zuerst Spalten und dann Zeilen iteriert

So zum Beispiel Spieler tritt 4x4 Tabelle und nach einer Weile ist dies sein Ergebnis.

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

Er sagte, wenn ich durch Spalten durchlaufen und dann Reihen dann würde es sein:

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

und dann Spaltenindex Änderungen 1

0,CHECK,0,0 
0,CHECK,0,0 
0,CHECK,0,0 
0,CHECK,0,0 

Entschuldigung für schlecht Erklärung ...

+0

Haben Sie versucht, schreibe die einfache verschachtelte for-Schleife? –

+0

Ich versuchte 'row> column' aber mein Freund sagte, dass ich durch Spalten innerhalb dieser Reihe und dann die Reihe selbst durchlaufen sollte. –

+0

Vielleicht was Sie suchen. http://stackoverflow.com/questions/903853/how-do-you-extract-a-column-from-a-multi-dimensional-array –

Antwort

0

können Sie das überprüfen eingebaute in all() Funktion verwenden, wenn alle Elemente wahr,
und zip(*table) Notation für 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)) 

Ausgänge sind: zu

True 
True 
True 
True 
False 
True 
True 
+0

Aber wenn der andere Spieler ist "2" und nicht 1. Wie kann ich dann tun? –

+0

@Idontreallywolf hat die Antwort bearbeitet =) –

+0

Vielen Dank Mann: D –

0

so etwas wie das?

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

wenn ich 'für Reihe in der Tabelle:' und innerhalb davon 'für habe Spalte in Zeile "- Wie ändere ich die Reihenfolge? –

+0

Mein 'x in a' entspricht Ihrer' Zeile in der Tabelle'. Auf die Spalte wird in jeder Zeile per Index zugegriffen. Sie benötigen also die Anzahl der Spalten ('shape [1]') und iterieren über sie. – karakfa

Verwandte Themen