6  Wiederholungen/Iteration

Inhalte stammen von (RPIFoundation), lizensiert unter

6.1 While

🎯 Lernziele dieser Lektion

  • Iteration als wiederholte Ausführung von Anweisungen definieren
  • Ein Programm mit einer while-Schleife erweitern

Frage: Was denkst du, was das folgende Programm ausgibt?

print("Wie heißt du?")
name = input()
while name != "Sepp":
    print("Versuch es nochmal, Sepp")
    name = input()
print(f"Hallo, {name}")

💡 Tipp: Der while-Block enthält Anweisungen, die wiederholt werden.

Antwort: Das Programm fragt so lange nach dem Namen, bis „Sepp“ eingegeben wird. Dann gibt es eine Begrüßung aus.


Programme wiederholen Aktionen und prüfen zu Beginn jeder Schleife eine Abbruchbedingung.

while <Bedingung>:
    <Anweisungsblock>

📌 Verwende eine while-Schleife, wenn dein Programm Aktionen wiederholen soll, solange eine Bedingung wahr ist.


Beispiel:

print("Wie heißt du?")
name = input()
while name != "Hedy":
    print("Versuch es nochmal, Hedy")
    name = input()
print(f"Hallo, {name}")

👤 Benutzer gibt ein: „Margaret“ → „Ada“ → „Hedy“

📋 Ausgabe:
- Versuch es nochmal, Hedy
- Versuch es nochmal, Hedy
- Hallo, Hedy


Was passiert, wenn die erste Zeile entfernt wird?

name = input()  # ← diese Zeile
while name != "Hedy":
    print("Versuch es nochmal, Hedy")
    name = input()

🧠 Mögliche Antworten:

  • Es macht keinen Unterschied.
  • Es gibt keinen Anfangswert für name: Fehler beim Prüfen der Bedingung.
  • Es gibt keinen Anfangswert für name: Fehler bei print.
  • Das Programm läuft trotzdem normal.

✅ Richtige Antwort: Ohne Anfangswert für name tritt ein Fehler auf.


6.1.1 🧩 Feinheiten

Was passiert, wenn name = input() nicht innerhalb der Schleife steht?

name = input()
while name != "Hedy":
    print("Versuch es nochmal, Hedy")
print(f"Hallo, {name}")

➡️ Die Bedingung wird nie aktualisiert, das führt zu einer Endlosschleife oder zum sofortigen Abbruch.


6.1.2 🎮 Aufgabe: Zahlenratespiel

Erstelle in unserem Programmierordner einen neuen Ordner mit dem Namen Iteration. Darin erstellst du eine neu Datei 01_Zahlenratespiel_[DeinNachname].py. Kopiere den untenstehenden Code in diese Datei und bearbeite die Aufgabe.

number = 4
print("Rate eine Zahl zwischen 1 und 10")
guess = int(input())
if guess != number:
    print("Falsch")
else:
    print("Richtig")

🔁 Iteration hinzufügen

Verwende eine while-Schleife, um das Spiel zu wiederholen, bis die richtige Zahl geraten wurde.


Erweiterung des Spiels

Syntax-Checkliste

Wenn eine Fehlermeldung erscheint, lies sie sorgfältig durch und versuche, das Problem zu beheben.
Nutze die folgende Liste, um häufige Fehler zu überprüfen

  • print, if, elif, else oder while falsch geschrieben (z. B. Großbuchstaben verwendet)
  • Doppelpunkt : am Ende einer Zeile mit while, if, elif oder else vergessen
  • Einrückung innerhalb von while-, if-, elif- oder else-Blöcken vergessen
  • while, if, elif oder else versehentlich eingerückt
  • = statt == in einer Bedingung verwendet
  • Anführungszeichen um einen Variablennamen gesetzt
  • Anführungszeichen bei Zeichenkettenliteralen (z. B. "Montag") vergessen
  • f bei f-Strings vergessen (z. B. print(f"{guess}"))

Schritt 1: Zählvariable für Versuche einführen

  • Erstelle eine neue Variable guesses im Programm und initalisiere diese mit dem Wert 0.
  • Entscheide, an welcher Stelle du die Variable nach jedem Versuch um 1 erhöhst.
  • Teste deinen Code, indem du guesses innerhalb der Schleife ausgibst.

Beispielausgabe beim Testen:

Rate eine Zahl zwischen 1 und 10  
2  
1 <- zeigt den aktuellen Wert von guesses  
Falsch  
Rate eine Zahl zwischen 1 und 10  
8  
2 <- zeigt den aktuellen Wert von guesses  

Schritt 2: Anzahl der Versuche anzeigen

Am Ende des Spiels soll die Anzahl der Versuche angezeigt werden.

Beispiel:

Rate eine Zahl zwischen 1 und 10  
7  
Falsch  
Rate eine Zahl zwischen 1 und 10  
4  
Richtig  
Du hast es in 2 Versuchen erraten

Schritt 3: Nur drei Versuche erlauben

Aktuell erlaubt das Programm unendlich viele Versuche.
Ändere die Bedingung der while-Schleife so, dass sie nur fortgesetzt wird, wenn:

  • die Zahl noch nicht erraten wurde und
  • die Anzahl der Versuche kleiner als 3 ist.

Beispiel:

Rate eine Zahl zwischen 1 und 10  
7  
Falsch  
Rate eine Zahl zwischen 1 und 10  
7  
Falsch  
Rate eine Zahl zwischen 1 und 10  
7  

Hinweis: Die Schleife prüft die Bedingung erst nachdem der gesamte Schleifenblock ausgeführt wurde. Das beeinflusst, wie du die Bedingung formulierst.


Schritt 4: Richtiges Ende anzeigen

Aktuell zeigt das Programm „Richtig“ an, auch wenn die Zahl nicht erraten wurde.
Das liegt daran, dass diese Zeilen nach der Schleife ausgeführt werden:

print("Richtig")
print(f"Du hast es in {guesses} Versuchen erraten")

Lösung:
Verwende eine if-Abfrage, um zu unterscheiden:

  • Wenn korrekt geraten: Richtig, du hast es in n Versuchen erraten
  • Wenn nicht korrekt geraten: Falsch, Versuchslimit erreicht

Testtabelle:

Testnummer Eingabe Erwartetes Ergebnis
1 3 Falsch, rate eine Zahl zwischen…
2 4 Richtig, du hast es in 2 Versuchen erraten
3 4, 5, 6 Falsch, Versuchslimit erreicht

Schritt 5: Zufallszahl einführen

Mach das Spiel spannender, indem du eine Zufallszahl statt der festen Zahl 4 verwendest.

from random import randint
number = randint(1, 10)

Tipp: Gib number beim Testen aus, um zu sehen, welche Zahl gewählt wurde.


Schritt 6: Hinweise „höher“ oder „niedriger“

Hilf dem Spieler mit Hinweisen nach jedem Versuch:

  • Wenn die geratene Zahl zu niedrig ist: Höher
  • Wenn sie zu hoch ist: Niedriger

Überlege, welche Programmierkonstrukte du dafür brauchst und wo sie im Code stehen sollten. Teste dein Programm gründlich mit verschiedenen Eingaben und zeig es mir dann.

6.2 Trace Tabellen

Slides

6.2.1 🎮 Aufgabe

Lade dir die Datei heruntern und speichere diese im Ordner Iteration mit dem Namen 02_TraceTabellen_[DeinNachname].docx.

Bearbeite anschließend die Aufgaben direkt im Dokument und zeige mir diese wenn du fertig bist. Speichern nicht vergessen.

Aufgabe Trace Tabellen

6.3 Zählschleifen

Slides

6.3.1 🎮 Aufgabe - Ein-Mal-Eins Reihengenerator

Schritt 1 - Code verstehen

Erstelle im Ordner Iteration eine neue Datei 03_einmaleins_[DeinNachname].py. Kopiere den untenstehenden Code in diese Datei und bearbeite die Aufgabe.

Führe das Programm aus und versuche den Programmablauf zu verstehen. Beantworte die Fragen direkt in der Datei.


""" Fragen
- Was ist die zweite Zeile, die auf dem Bildschirm ausgegeben wird?
- Was ist die letzte Zeile, die auf dem Bildschirm ausgegeben wird?
- In der ersten Iteration: Welchen Wert hat `x`?
- Ändert sich der Wert von `times_table` während der Ausführung?
- Welcher Ausdruck wird `answer` zugewiesen?
- Was passiert mit dem Wert von `x` nach jeder Iteration?
- Welchen Wert hat `x` in der letzten Ausgabe?

Ändere `range(1, 11)` zu:

- `range(2, 22)` – Was ist die zweite und letzte Zeile der Ausgabe?
- `range(10, 30)` – Was ist die zweite und letzte Zeile der Ausgabe?
-  Wie hängen die Werte von `x` mit den übergebenen Werten in `range()` zusammen?

"""


times_table = 5
answer = 0
print(f"Hier ist das {times_table}-Einmaleins")
for x in range(1, 11):
    answer = x * times_table
    print(f"{x} mal {times_table} ist {answer}")

Schritt 2 - Ändern

Ziel: Das 5er-Einmaleins von 1 bis 12 ausgeben


Bereich ändern

Ändern Sie die Werte in range(), sodass das die Fünferreihe bis 12 ausgegeben wird:

for x in range(1, 13):
  • Erwartete Ausgabe:
    • Zweite Zeile: 1 mal 5 ist 5
    • Letzte Zeile: 12 mal 5 ist 60

Benutzerdefinierte Eingabe

Fügen Sie input() hinzu, damit der Benutzer die gewünschte Einmaleins-Tabelle eingeben kann:

  • Verwende input(), um die gewünschte Einmaleins-Reihe vom Benutzer abzufragen.
  • Beispielausgabe:
Willkommen zum Einmaleins-Generator
Gib das Einmaleins ein, das du anzeigen möchtest:
6
Hier ist das 6er-Einmaleins:
1 mal 6 ist 6
...
12 mal 6 ist 72

Fehlerbeispiel (wenn input() nicht in int umgewandelt wird):

1 mal 6 ist 6
2 mal 6 ist 66
3 mal 6 ist 666
...

Maximalwert eingeben
  • Erstelle eine Variable max_value
  • Weise ihr einen Wert durch Benutzereingabe zu
  • Ersetze range(1, 13) durch range(1, max_value)
  • Erhöhe max_value direkt nach der Eingabe um 1
max_value = int(input("Gib den Maximalwert ein: "))
max_value += 1

Schritt 3: Ein Quiz zum Einmaleins

Erstelle im Ordner Iteration eine neue Datei 04_quiz_[DeinNachname].py.

Erstelle ein Quiz, das das Wissen der Spieler*innen über das Einmaleins testet. Das Programm soll:

  • die Benutzerin / den Benutzer fragen, welches Einmaleins sie/er üben möchte,
  • nach dem maximalen Wert fragen, bis zu dem geübt werden soll,
  • jede Multiplikation der Reihe nach abfragen und die Antwort überprüfen:
    • Wenn die Antwort korrekt ist, soll „Richtig“ angezeigt werden,
    • andernfalls „Falsch“.

Verwende deinen überarbeiteten Code aus der vorherigen Aufgabe als Ausgangspunkt.


Erledige folgende Aufgaben:

  • Begrüßungstext anpassen, um die Benutzer*innen zum Einmaleins-Quiz willkommen zu heißen.
  • Die print-Anweisungen für die beiden Eingaben entsprechend dem Quiz anpassen.
  • Teste deinen Code.

Beispielausgabe:

Willkommen zum Einmaleins-Quiz
Gib das Einmaleins ein, das du üben möchtest:
> 7
Gib den maximalen Wert ein, bis zu dem du getestet werden möchtest:
> 12

Die ursprüngliche Ausgabe deines Programms sollte dann so aussehen:

Hier ist das 7er-Einmaleins:
1 mal 7 ist 7
2 mal 7 ist 14
...
12 mal 7 ist 84

Direkt vor der Schleife steht diese Zeile:

print(f"Hier ist das {einmaleins}-Einmaleins")
  • Formuliere diese Zeile um, sodass sie ankündigt, dass ein Quiz zum gewählten Einmaleins folgt.
  • Am Ende der Schleife: Erstelle eine Variable benutzer_antwort und weise ihr eine Eingabe als Ganzzahl zu.
  • Füge eine Eingabeaufforderung hinzu, um die Antwort der Benutzerin / des Benutzers abzufragen.
  • Teste deinen Code.

Beispielausgabe

Willkommen zum Einmaleins-Quiz
Gib das Einmaleins ein, das du üben möchtest:
> 7
Gib den maximalen Wert ein, bis zu dem du getestet werden möchtest:
> 12

Hier ist dein Quiz zum 7er-Einmaleins:
1 mal 7 ist ...
Antwort: > 7
2 mal 7 ist ...
Antwort: > 14
...

  • Unter der Variable benutzer_antwort erstelle eine if-else-Anweisung, die überprüft, ob die Antwort korrekt ist.
  • Wenn die Antwort richtig ist, gib „Richtig“ aus.
  • Wenn die Antwort falsch ist, gib „Falsch“ aus.
  • Teste deinen Code.

Beispielausgabe

Hier ist dein Quiz zum 7er-Einmaleins:
1 mal 7 ist ...
Antwort: > 7
Richtig 
2 mal 7 ist ...
Antwort: > 17
Falsch ✗
3 mal 7 ist ...
Antwort: > 21
Richtig 
...

  • Passe die Zeile so an, dass die Lösung nicht direkt angezeigt wird und der Benutzer anschließend die Antwort eingeben soll:
print(f"{x} mal {einmaleins} ist {richtige_antwort}")

soll geändert werden zu:

print(f"{x} mal {einmaleins} ist ...")
  • Teste deinen Code ✓

Erwartete Ausgabe

Hier ist dein Quiz zum 7er-Einmaleins:
1 mal 7 ist ...
Antwort: > 

🧮 Punktesystem einbauen

Füge ein Punktesystem in dein Einmaleins-Quiz ein, das am Ende des Spiels anzeigt, wie viele Aufgaben die Benutzerin oder der Benutzer richtig beantwortet hat.

Anforderungen:
  • Erstelle eine Zählvariable, z. B. punkte, die zu Beginn auf 0 gesetzt wird.
  • Jedes Mal, wenn die Antwort korrekt ist, soll punkte um 1 erhöht werden.
  • Am Ende des Quiz soll eine Zusammenfassung angezeigt werden, z. B.:
Du hast 10 von 12 Aufgaben richtig beantwortet. Super gemacht!