Seite anzeigenÄltere VersionenLinks hierherCopy this pageFold/unfold allNach oben Diese Seite ist nicht editierbar. Du kannst den Quelltext sehen, jedoch nicht verändern. Kontaktiere den Administrator, wenn du glaubst, dass hier ein Fehler vorliegt. ====== For-Schleifen ====== ===== - Einfache for-Schleife ===== Bisher haben wir (offiziell) nur mit **while-Schleifen** gearbeitet, wie der folgenden: <code python> 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!) </code> 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: <code python> 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 </code> 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: <code python> for i in range(10): print(i) # Ausgabe: 0,1,2,3,4,5,6,7,8,9 </code> Falls der Startwert des Index $0$ und die Schrittgrösse $1$ ist, muss man dies nicht explizit angeben. ==== Aufgaben A ==== === Aufgabe A1 === 1. Schaue dir die Beispiele mit den for-Schleifen unten an und ... 1. versuche herauszufinden, was sie machen/ausgeben. 1. Tippe nachher die Beispiele ab und überprüfe, ob du richtig gelegen hast. **Beispiel 1** <code python> for k in range(5): print(k) </code> **Beispiel 2** <code python> for k in range(15,3): print(k) </code> **Beispiel 3** <code python> for j in range(5,6,10): print(j) </code> **Beispiel 3** <code python> for i in range(8): print(3*i) </code> === 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** <code python> i = 0 for i in range(4,12): print(2*i) </code> ++++Lösung| $i = 0$ ist völlig überflüssig, wird in for-Schleife von Startwert $4$ gleich überschrieben. Verbesserung: <code python> for i in range(4,12): print(2*i) </code> ++++ **Beispiel 2** <code python> for j in range(15): print(5*i) i = i + 3 </code> ++++Lösung| $i = i + 3$ hat keine Relevanz, da sich die for-Schleife selbst um das erhöhen des Index kümmert. Da in der range-Funktion *keine* Schrittweite explizit angegeben wird, ist sie $1$. Möchte man eine Schrittweite von $3$ haben, muss man dies wie folgt umsetzen: <code python> for j in range(0,15,3): print(5*i) </code> ++++ === Aufgabe A3 === 1. Wandle die while-Schleife in eine for-Schleife um (muss gleichen Output erzeugen): <code python> i = 6 while i < 42: print(i) i = i + 4 </code> 2. Wandle die for-Schleife in eine while-Schleife um: <code python> for a in range(10): print(4*a) </code> ++++Lösungen| 1. Variante I: <code python> for i in range(6,42,4): print(i) </code> 1. Variante II: <code python> for i in range(9): print(6 + 4*i) </code> 2. Variante I: <code python> i = 0 while i < 10: print(4*i) i = i + 1 </code> 2. Variante II: <code python> i = 0 while i < 37: print(i) i = i + 4 </code> ++++ === 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. 1. Schreibe eine for-Schleife, die die Quadratzahlen von 1 bis 10 ausgibt, also $1, 4, 9, \ldots $ ++++Lösungen| <code python> # 1. Variante I for i in range(2,21,2): print(i) # 1. Variante II for i in range(10): print(2*i+2) # 2. for i in range(1,11): print(i*i) </code> ++++ ===== - for-Schleifen für Listen ===== 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: <code python> i = 0 while i < len(li): print(li[i]) i = i + 1 </code> Das Gleiche können wir auch mit einer for-Schleife erreichen: <code python> for i in range(len(li)): print(li[i]) </code> 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**: <code python> for el in li: print(el) </code> ==== Aufgaben B ==== === Aufgabe B1 === Für diese mehrteilige Aufgabe arbeiten wir mit den folgenden zwei Listen. <code python> 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!'] </code> Löse alle Aufgaben mithilfe von for-Schleifen. == Teil 1 == Schreibe ein Programm, welches alle Tiere der Reihe nach ausgibt. ++++Lösung| <code python> for animal in animals: print(animal) </code> Beachte: Da die Liste `animals` heisst, macht es Sinn, dass man als Variable für ein einzelnes Element der Liste `animal` verwendet. Gewöhne dir an, sinnvolle Variablennamen zu verwenden. ++++ == Teil 2 == Schreibe ein Programm, welches immer ein Tier zusammen mit dem passenden Geräusch ausgibt: <code> Hund: Wuff! Katze: Miau! Kuh: Muh! ... </code> == 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. 1. 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| <code python> 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!'] print("### Teil 1 ###") for animal in animals: print(animal) print("\n### Teil 2 ###") for i in range(len(animals)): # oder ...range(len(sounds)), spielt keine Rolle, beide Listen sind gleich lang print(animals[i] + ' : ' + sounds[i]) print("\n### Teil 3 ###") for i in range(len(animals)): if animals[i] == 'Gans': print(i) break # optional, bricht Schleife ab, sobald hier angelangt ist print("\n### Teil 4 (V1) ###") inp = input("Gib ein Tier ein") for i in range(len(animals)): if animals[i] == inp: print(inp + " macht: " + sounds[i]) print("\n### Teil 4 (V2) ###") inp = input("Gib ein Tier ein") animal_found = False for i in range(len(animals)): if animals[i] == inp: print(inp + " macht: " + sounds[i]) animal_found = True if not animal_found: # oder: if animal_found == False: print("Tier " + inp + " leider nicht gefunden!") print("\n### Teil 5.1 ###") for i in range(len(animals)): if sounds[i] == 'Bruell!': print(animals[i]) break print("\n### Teil 5.1 ###") animals_grrr = [] for i in range(len(animals)): if sounds[i] == 'Grrr!': animals_grrr.append(animals[i]) print(animals_grrr) </code> ++++ === Aufgabe B2 === Kunst mit verschachtelten for-Schleifen! Betrachte das folgende Beispiel, welches ein Muster in der Konsole erzeugt. <code python> for i in range(5): for j in range(i+1): print('*', end='') print() </code> Schreibe nun einen Code, auch mit zwei ineinander verschachtelten for-Schleifen, die das folgende Schachbrett.Muster erzeugen: <code python> 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 </code> Tipp: Fügt man dem print-Befehl die Option `end=''` an, wird am Ende **kein Zeilenumbruch** gemacht. <code python> print(1,end='') print(2,end='') print(3,end='') """ Ausgabe: 123 Anstelle von: 1 2 3 """ </code> gf_informatik/for_loops_sca.txt Zuletzt geändert: 2023-06-15 12:16von sca