Ich versuche mich erneut mit Python und möchte ein textbasiertes Ticktacktoe erstellen.

Derzeit arbeite ich am Layout, wobei 0 die leeren Stellen in den Spielen und Zahlen oben und links für die Koordinaten darstellt. Dies ist, was ich bisher habe:

game = [[0, 0, 0],
        [0, 0, 0],
        [0, 0, 0],]

print('   0  1  2')

for row in enumerate(game):
    print(row)

Welches dies ausgibt:

     0  1  2
(0, [0, 0, 0])
(1, [0, 0, 0])
(2, [0, 0, 0])

Das Problem ist, dass ich möchte, dass es so aussieht:

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

Jetzt habe ich einen Weg gefunden, indem ich 'count' in die for-Schleife eingefügt habe. Aber ich verstehe überhaupt nicht warum. Das Nachschlagen der Python-Dokumentation hat nicht geholfen. Warum passiert dies? Warum werden dadurch die Klammern und Kommas entfernt?

game = [[0, 0, 0],
        [0, 0, 0],
        [0, 0, 0],]

print('   0  1  2')

for count, row in enumerate(game):
    print(count, row)

Bearbeiten: Ich glaube, ich verstehe jetzt. Da enumarate() den Index zurückgibt und der Wert alles, was im Grunde passiert, ist, dass ich dem Index count zugewiesen und dem Wert im Grunde genommen eine Zeile zugewiesen habe? Und deshalb gibt es jetzt Klammern, da der Druck mehr als eine Variable mit einem Leerzeichen druckt? Könnten Sie das bestätigen?

2
itsolidude 19 Feb. 2020 im 21:48

3 Antworten

Beste Antwort

Im ersten Beispiel wird ein Tupel an print() übergeben, das in Klammern angegeben gedruckt wird. In der zweiten Antwort werden die Zeilenanzahl und die Zeile selbst als separate Argumente an print() übergeben. print() gibt dann den Argumentbereich getrennt aus.

1
lumbric 19 Feb. 2020 im 18:56

for row in enumerate(game):

Dadurch wird row gedruckt, ein Tupel. Tupel werden im Format gedruckt (item1, item2, ...)

Beispiel:

>>> row = (5, [0,0,0])
>>> print(row)
(5, [0,0,0]) 

for count, row in enumerate(game): Hier wird das Ergebnis ausgepackt. Was ein Tupel war, wird jetzt in count und row aufgeteilt. print kann eine variable Anzahl von Argumenten annehmen und trennt diese standardmäßig durch ein Leerzeichen.

Beispiel:

>>> count = 5
>>> row = [0,0,0]
>>> print(count, row)
5 [0,0,0]

Verschachtelte Listen

Eine verschachtelte Liste ist eine Liste, die andere Listen enthält. Ein einfaches Beispiel ist

nested = [[0,1,2], [3,4,5]]

Sie können eine verschachtelte Liste (oder eine beliebige Liste überhaupt) entpacken.

list012, list345 = nested

Das macht for count, row in enumerate(game):.

enumerate(game) gibt ein Tupel zurück: einen Zähler und das normale Objekt. Wir können es so vergleichen:

my_list = [10,20,30]
for i in my_list:
    print i    # prints 10 20 30
for i in enumerate(my_list):
    print i    # prints (0,10) (1,20) (2,30)
3
Michael Bianconi 19 Feb. 2020 im 19:37

enumerate(items) gibt eine Liste der Tupel einer Zahl und Ihres Elements zurück, wobei sich die Zahl für jedes neue Element in der Liste um eins erhöht (Zählung). In diesem Fall gibt enumerate die folgenden Tupel zurück:

{0, [0, 0, 0]}, {1, [0, 0, 0]}, {2, [0, 0, 0]}

Indem Sie einen zweiten Variablennamen in der for-Schleife verwenden, zerlegen Sie das Tupel in count und row. Während Sie zuvor nur einen Variablennamen angegeben haben, wurde der Variablen das gesamte Tupel zugewiesen.

0
LLSv2.0 19 Feb. 2020 im 18:58