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?")
= input()
name while name != "Sepp":
print("Versuch es nochmal, Sepp")
= input()
name 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?")
= input()
name while name != "Hedy":
print("Versuch es nochmal, Hedy")
= input()
name 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?
= input() # ← diese Zeile
name while name != "Hedy":
print("Versuch es nochmal, Hedy")
= input() name
🧠 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 beiprint
. - 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?
= input()
name 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.
= 4
number print("Rate eine Zahl zwischen 1 und 10")
= int(input())
guess 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
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
oderwhile
falsch geschrieben (z. B. Großbuchstaben verwendet)- Doppelpunkt
:
am Ende einer Zeile mitwhile
,if
,elif
oderelse
vergessen - Einrückung innerhalb von
while
-,if
-,elif
- oderelse
-Blöcken vergessen while
,if
,elif
oderelse
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
= randint(1, 10) number
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
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.
6.3 Zählschleifen
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?
"""
= 5
times_table = 0
answer print(f"Hier ist das {times_table}-Einmaleins")
for x in range(1, 11):
= x * times_table
answer 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
- Zweite Zeile:
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)
durchrange(1, max_value)
- Erhöhe
max_value
direkt nach der Eingabe um 1
= int(input("Gib den Maximalwert ein: "))
max_value += 1 max_value
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 eineif-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 auf0
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!