Mehrdimensionale Listen
Genug vom Lotto. Jetzt wieder etwas für den praktischen Nutzen.
Du hast nun sehr viel über Listen gelernt, fast alles, was du brauchen wirst. Eine Sache ist noch wichtig, und die lernen wir jetzt kennen.
Listen können Zahlenwerte und Zeichenketten enthalten. Das weißt du schon. Listen können aber auch Listen enthalten. Wie? Ja, jedes Element einer Liste kann wiederum eine Liste sein.
Hier ist ein Beispiel: eine Liste, die drei Vokabeln enthält. Jede dieser Vokabeln besteht wiederum aus einer Zweierliste, die das Wort einmal auf Deutsch und einmal auf Englisch enthält.
vokabeln = [ ["Tisch","table"] , ["Auto","car"] , ["Haus","house"] ]
Wie kommt man nun an diese Werte heran?
print vokabeln [0]
ergibt
['Tisch', 'table']
Logisch, denn diese kleine Liste ist das erste Element der großen Liste vokabeln. Um jetzt wiederum auf ein einzelnes Element aus dieser kleinen Liste zuzugreifen, brauchen wir einen zweiten Index, denn wir haben jetzt eine Liste mit zwei Dimensionen:
print vokabeln [0] [0]
Das ergibt wie gewünscht:
Tisch
print vokabeln [0] [1]
gibt
table
Mit einer for-Schleife kann man jetzt alle Elemente der großen Liste durchgehen und sie wiederum unterteilen. Zum Beispiel so:
vokabeln = [["Tisch","table"],["Auto","car"],["Haus","house"]]
for vok in vokabeln:
print vok[0],"heißt",vok[1]+"."
Die Ausgabe ist:
Tisch heißt table.
Auto heißt car.
Haus heißt house.
Beim Durchgang der Elemente von vokabeln wird jede der Minilisten mit vok angesprochen. vok[0] ist dabei das deutsche Wort, vok[1] ist das englische Wort.
Daraus kann man jetzt auch problemlos einen kleinen Vokabeltrainer machen:
vokabeln = [["Tisch","table"],["Auto","car"],["Haus","house"]]
for vok in vokabeln:
eingabe = input("Wie heißt "+vok[0]+" auf Englisch?")
if eingabe == vok[1]:
msgDlg ("Richtig!")
else:
msgDlg ("Leider falsch!")
Alles klar? Die Liste der Wortpaare wird mit for durchgegangen, das erste Wort des Paares (deutsch) wird beim input-Befehl angezeigt und die Eingabe in der Variable eingabe gespeichert, das zweite Wort (englisch) wird dann mit eingabe verglichen. Das Ergebnis ist entweder richtig oder falsch, und das wird dann angezeigt, und das nächste Wortpaar kommt an die Reihe.
Du kannst diesen Vokabeltrainer jetzt gern weiter ausbauen. Natürlich kannst du deine eigenen Wörter reinschreiben und auch mit mehr Vokabeln erweitern. Um das Lernen abwechslungsreicher zu gestalten, kannst du die Reihenfolge der abgefragten Vokabeln auch mischen. Erinnerst du dich, wie das geht? Du brauchst dazu das Modul random und den Befehl random.shuffle(liste). So sieht der Anfang dann aus:
import random
vokabeln = [["Tisch","table"],["Auto","car"],["Haus","house"]]
random.shuffle(vokabeln)
Und natürlich kannst du zählen lassen, wie viele Antworten richtig und wie viele falsch waren. Dazu brauchst du zwei Variablen richtig und falsch. Die setzt du am Anfang auf 0 und erhöhst sie jeweils, wenn die richtige oder die falsche Antwort gegeben wurde. Am Schluss wird ausgegeben, wie viele Antworten richtig und wie viele falsch waren. Schaffst du das alleine? Bestimmt! Versuche es, bevor du die Lösung anschaust.
import random
vokabeln = [["Tisch","table"],["Auto","car"],["Haus","house"]]
random.shuffle(vokabeln)
richtig = 0
falsch = 0
for vok in vokabeln:
eingabe = input("Wie heißt "+vok[0]+" auf Englisch?")
if eingabe == vok[1]:
msgDlg("Richtig!")
richtig = richtig + 1
else:
msgDlg("Leider falsch!")
falsch = falsch + 1
print "Richtige Antworten:",richtig," - falsche Antworten:",falsch