Bisher haben wir (offiziell) nur mit while-Schleifen gearbeitet, wie der folgenden:
i = 0 # benoetigen eine Variable (genannt Index), setzte auf Startwert while i < 10: # solange Bedingung x < 10 erfuellt ist ... print(i) # gebe Variable aus i = i + 1 # erhoehe Variable, so dass Bedingung irgendwann nicht mehr erfuellt (sonst Endlosschleife!)
Die Schleife gibt alle Zahlen von $0,1,\ldots$ bis und mit $10$ aus. Genau das Gleiche kann man auch mit einer for-Schleife machen:
for i in range(0,10,1): # 1. Zahl: Startwert, 2. Zahl: Schlusswert+1, 3. Zahl: Schrittgroesse print(i) # Ausgabe: 0,1,2,3,4,5,6,7,8,9
Beachte dabei:
i = i + 1
.Die Vorteile der for-Schleife liegen auf der Hand:
Doch warum gibt es überhaupt while-Schleifen, wenn die Vorteile der for-Schleife so überwiegen?
Die for-Schleife im Beispiel oben kann man sogar noch kürzer schreiben:
for i in range(10): print(i) # Ausgabe: 0,1,2,3,4,5,6,7,8,9
Falls der Startwert des Index $0$ und die Schrittgrösse $1$ ist, muss man dies nicht explizit angeben.
Beispiel 1
for k in range(5): print(k)
Beispiel 2
for k in range(15,3): print(k)
Beispiel 3
for j in range(5,6,10): print(j)
Beispiel 3
for i in range(8): print(3*i)
In jedem der Beispiele unten hat es einen Fehler, resp. etwas, was unschön ist. Wie müsste der Code ausschauen?
Beispiel 1
i = 0 for i in range(4,12): print(2*i)
Beispiel 2
for j in range(15): print(5*i) i = i + 3
i = 6 while i < 42: print(i) i = i + 4
for a in range(10): print(4*a)
Löse die folgenden kurzen Aufgaben mithilfe von for-Schleifen:
Im ersten Kapitel hier haben wir gesehen, dass man for- anstelle von while-Schleifen verwenden kann, um zum Beispiel hoch zu zählen: $0,1,2,...,10$. Besonders praktisch sind for-Schleifen aber, wenn man mit Listen arbeitet.
Wenn wir eine Liste, z.B. li = ['Anna','Christian','Kunibert','Petra','Xavier']
haben, können wir mit einer while-Schleife die Elemente der Liste durchgehen:
i = 0 while i < len(li): print(li[i]) i = i + 1
Das Gleiche können wir auch mit einer for-Schleife erreichen:
for i in range(len(li)): print(li[i])
Vorteile:
i
kümmern (Endlosschleife unmöglich!)Im Beispiel oben interessieren wir uns nur für die Elemente und nicht deren Positionen in der Liste. Wir können deshalb mit einer for-Schleife auch die Elemente direkt durchgehen:
for el in li: print(el)
Für diese mehrteilige Aufgabe arbeiten wir mit den folgenden zwei Listen.
animals = ['Hund', 'Katze', 'Kuh', 'Schwein', 'Vogel', 'Loewe', 'Elefant', 'Frosch', 'Pferd', 'Affe', 'Gans', 'Eule', 'Schaf', 'Ente', 'Hahn', 'Maus', 'Tiger', 'Baer', 'Biene', 'Delfin'] sounds = ['Wuff!', 'Miau!', 'Muh!', 'Oink!', 'Zwitscher!', 'Bruell!', 'Toeroeoe!', 'Quak!', 'Wieher!', 'Uh-uh!', 'Gaggel!', 'Hu-hu!', 'Maeh!', 'Quack!', 'Kikeriki!', 'Piep!', 'Grrr!', 'Grrr!', 'Summ!', 'Klack!']
Löse alle Aufgaben mithilfe von for-Schleifen.
Schreibe ein Programm, welches alle Tiere der Reihe nach ausgibt.
Schreibe ein Programm, welches immer ein Tier zusammen mit dem passenden Geräusch ausgibt:
Hund: Wuff! Katze: Miau! Kuh: Muh! ...
Schreibe ein Programm, welches ermittelt, an welcher Stelle die 'Gans' in der Liste animals
steht.
Schreibe ein Programm, in dem die Benutzerin aufgefordert wird, ein Tier einzugeben. Der Code gibt dann aus, wie das Tier macht. Verwende for-Schleifen anstelle von while-Schleifen.
Schreibe ein Programm, welches …
Kunst mit verschachtelten for-Schleifen!
Betrachte das folgende Beispiel, welches ein Muster in der Konsole erzeugt.
for i in range(5): for j in range(i+1): print('*', end='') print()
Schreibe nun einen Code, auch mit zwei ineinander verschachtelten for-Schleifen, die das folgende Schachbrett.Muster erzeugen:
o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o
Tipp: Fügt man dem print-Befehl die Option end=''
an, wird am Ende kein Zeilenumbruch gemacht.
print(1,end='') print(2,end='') print(3,end='') """ Ausgabe: 123 Anstelle von: 1 2 3 """