For-Schleifen

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:

  • Der Index (Variable) wird automatisch in der Schleife erstellt.
  • Man muss nicht explizit dafür sorgen, dass Index erhöht wird, also kein i = i + 1.

Die Vorteile der for-Schleife liegen auf der Hand:

  • weniger Code
  • unmöglich, aus Versehen Endlosschleife zu programmieren.

Doch warum gibt es überhaupt while-Schleifen, wenn die Vorteile der for-Schleife so überwiegen?

  • Es gibt Dinge, die man nur mit while-Schleifen umsetzen kann und nicht mit for-Schleifen.
  • Zum Beispiel Endlosschleifen (sind manchmal tatsächlich erwünscht!).
  • while-Schleifen sind einfacher zu verstehen und deshalb besser geeignet für den Einstieg.

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.

Aufgabe A1

  1. Schaue dir die Beispiele mit den for-Schleifen unten an und …
  2. versuche herauszufinden, was sie machen/ausgeben.
  3. Tippe nachher die Beispiele ab und überprüfe, ob du richtig gelegen hast.

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)

Aufgabe A2

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)

Lösung

Beispiel 2

for j in range(15):
    print(5*i)
    i = i + 3

Lösung

Aufgabe A3

  1. Wandle die while-Schleife in eine for-Schleife um (muss gleichen Output erzeugen):
i = 6
while i < 42:
    print(i)
    i = i + 4
  1. Wandle die for-Schleife in eine while-Schleife um:
for a in range(10):
    print(4*a)

Lösungen

Aufgabe A4

Löse die folgenden kurzen Aufgaben mithilfe von for-Schleifen:

  1. Schreibe eine for-Schleife, die die geraden Zahlen von 1 bis 20 ausgibt.
  2. Schreibe eine for-Schleife, die die Quadratzahlen von 1 bis 10 ausgibt, also $1, 4, 9, \ldots $

Lösungen

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:

  • Kürzer
  • muss sich nicht selbst um Erhöhung von Index 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)

Aufgabe B1

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.

Teil 1

Schreibe ein Programm, welches alle Tiere der Reihe nach ausgibt.

Lösung

Teil 2

Schreibe ein Programm, welches immer ein Tier zusammen mit dem passenden Geräusch ausgibt:

Hund: Wuff!
Katze: Miau!
Kuh: Muh!
...
Teil 3

Schreibe ein Programm, welches ermittelt, an welcher Stelle die 'Gans' in der Liste animals steht.

Teil 4

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.

Teil 5

Schreibe ein Programm, welches …

  1. Ermittelt, welches Tier 'Bruell' macht.
  2. Welche Tiere 'Grrr!' machen und diese in einer Liste speichert. Der Code soll auch noch funktionieren, wenn weitere Tiere eingetragen werden, die 'Grrr!' machen.

Lösungen

  • gf_informatik/for_loops_sca.1686824497.txt.gz
  • Zuletzt geändert: 2023-06-15 10:21
  • von sca