Übung 12 – Die while-Schleife

Ziel dieser Übung

Sie wiederholen Zeilen mit while, solange eine Bedingung wahr ist, und prüfen damit Eingaben.

So arbeiten Sie: Bearbeiten Sie die Schritte der Reihe nach. Ihre Tabellen und Programme tragen Sie in die Reflexion zu Sitzung 4 ein. Öffnen Sie die Hilfen erst, wenn Sie nicht weiterkommen: zuerst den Tipp, dann das Gerüst, zuletzt die Lösung. Ihre Lösung darf anders aussehen – wichtig ist, dass sie für alle Testeingaben das Richtige ausgibt.

1. Aufbau der while-Schleife

zahl = 3

while zahl > 0:
    print(zahl)
    zahl = zahl - 1

print("Los!")
3
2
1
Los!

2. Aufgaben

Aufgabe 1a · Eingabe prüfen Pflicht, ca. 8 Min.

Ein Spiel fragt nach einer Zahl von 1 bis 9. Wer etwas anderes eintippt, soll so lange einen Hinweis bekommen und neu gefragt werden, bis die Zahl passt.

Ihre Aufgabe

  1. Tragen Sie ein, wie oft das Programm bei den Eingaben jeweils nach einer Zahl fragt und welche Zahl es am Ende nimmt.
    Eingaben nacheinanderSo oft wird gefragt (erwartet)Gewählte Zahl (erwartet)
    5
    0, 12, 7
    9
    -3, 10, 1
  2. Schreiben Sie auswahl.py: Es fragt mit Zahl von 1 bis 9: und wiederholt die Frage mit while, solange die Zahl kleiner als 1 oder größer als 9 ist.
  3. Geben Sie bei jeder falschen Zahl den Hinweis und am Ende die gewählte Zahl genau so aus:
    Zahl von 1 bis 9: 0
    Bitte nur 1 bis 9.
    Zahl von 1 bis 9: 7
    Danke, Sie haben 7 gewählt.
  4. Testen Sie das Programm mit allen vier Zeilen aus der Tabelle.

Fertig sind Sie, wenn jede Ausgabe mit Ihrer Tabelle übereinstimmt.

Zusatz: Zählen Sie die Fehlversuche mit und geben Sie sie im Hinweis aus, z. B. Bitte nur 1 bis 9. (Fehlversuch 2)

Tipp

Die Bedingung beschreibt den falschen Fall, denn so lange soll wiederholt werden: zahl < 1 or zahl > 9. Vergessen Sie nicht, im Block erneut zu fragen – sonst ändert sich zahl nie.

Gerüst

Ersetzen Sie jedes ___ durch den passenden Ausdruck.

zahl = int(input("Zahl von 1 bis 9: "))

while ___:
    print("Bitte nur 1 bis 9.")
    zahl = ___

print(f"Danke, Sie haben {zahl} gewählt.")
Lösung
EingabenSo oft gefragtGewählte Zahl
515
0, 12, 737
919
-3, 10, 131
zahl = int(input("Zahl von 1 bis 9: "))

while zahl < 1 or zahl > 9:
    print("Bitte nur 1 bis 9.")
    zahl = int(input("Zahl von 1 bis 9: "))

print(f"Danke, Sie haben {zahl} gewählt.")
Zahl von 1 bis 9: 0
Bitte nur 1 bis 9.
Zahl von 1 bis 9: 12
Bitte nur 1 bis 9.
Zahl von 1 bis 9: 7
Danke, Sie haben 7 gewählt.
Mit and statt or wäre die Bedingung nie wahr: Keine Zahl ist zugleich kleiner als 1 und größer als 9. Dann würde jede Eingabe akzeptiert.

Zusatz:

zahl = int(input("Zahl von 1 bis 9: "))
fehlversuche = 0

while zahl < 1 or zahl > 9:
    fehlversuche = fehlversuche + 1
    print(f"Bitte nur 1 bis 9. (Fehlversuch {fehlversuche})")
    zahl = int(input("Zahl von 1 bis 9: "))

print(f"Danke, Sie haben {zahl} gewählt.")
Zahl von 1 bis 9: 0
Bitte nur 1 bis 9. (Fehlversuch 1)
Zahl von 1 bis 9: 12
Bitte nur 1 bis 9. (Fehlversuch 2)
Zahl von 1 bis 9: 7
Danke, Sie haben 7 gewählt.

Aufgabe 1b · Zahlenraten ohne Grenze Pflicht, ca. 10 Min.

In Mini-Projekt 1 hatte das Zahlenraten genau drei Versuche. Jetzt darf so lange geraten werden, bis die Zahl stimmt. Zum Testen ist die geheime Zahl fest 42.

Ihre Aufgabe

  1. Tragen Sie für die geheime Zahl 42 ein, was nach jedem Tipp ausgegeben werden muss.
    Tipps nacheinanderAusgaben (erwartet)
    50, 25, 42
    42
    1, 100, 41, 43, 42
  2. Schreiben Sie raten.py mit einer while-Schleife, die so lange nach Ihr Tipp: fragt, wie der Tipp nicht die geheime Zahl ist, und nach jedem falschen Tipp Zu klein. oder Zu groß. ausgibt.
  3. Zählen Sie die Versuche mit und geben Sie am Ende genau so aus:
    Ihr Tipp: 50
    Zu groß.
    Ihr Tipp: 42
    Richtig! Sie haben 2 Versuche gebraucht.
  4. Testen Sie mit allen drei Zeilen der Tabelle. Ersetzen Sie danach 42 durch random.randint(1, 100) und ergänzen Sie import random in der ersten Zeile.

Fertig sind Sie, wenn alle drei Tests stimmen und das Spiel danach mit einer Zufallszahl läuft.

Zusatz für Schnelle: Erlauben Sie höchstens 7 Versuche. Wer es nicht schafft, liest Leider verloren. Die Zahl war 42.

Tipp

Damit die Schleife beim ersten Mal überhaupt startet, braucht tipp vorher einen Wert, der sicher falsch ist, z. B. tipp = 0. Den Zähler erhöhen Sie in jeder Runde mit versuche = versuche + 1.

Gerüst

Ersetzen Sie jedes ___ durch den passenden Ausdruck.

geheim = 42   # zum Testen fest, später: random.randint(1, 100)
versuche = 0
tipp = 0

while ___:
    tipp = int(input("Ihr Tipp: "))
    versuche = ___
    if tipp < geheim:
        print("Zu klein.")
    elif tipp > geheim:
        print("Zu groß.")

print(f"Richtig! Sie haben {versuche} Versuche gebraucht.")
Lösung
geheim = 42   # zum Testen fest, später: random.randint(1, 100)
versuche = 0
tipp = 0

while tipp != geheim:
    tipp = int(input("Ihr Tipp: "))
    versuche = versuche + 1
    if tipp < geheim:
        print("Zu klein.")
    elif tipp > geheim:
        print("Zu groß.")

print(f"Richtig! Sie haben {versuche} Versuche gebraucht.")
Ihr Tipp: 50
Zu groß.
Ihr Tipp: 25
Zu klein.
Ihr Tipp: 42
Richtig! Sie haben 3 Versuche gebraucht.
Die Meldung „Richtig!“ steht nach der Schleife: Dort kommt das Programm erst an, wenn tipp != geheim falsch geworden ist, also beim Treffer. Ein else für „Richtig!“ in der Schleife braucht es nicht.

Zusatz:

geheim = 42   # zum Testen fest, später: random.randint(1, 100)
versuche = 0
tipp = 0

while tipp != geheim and versuche < 7:
    tipp = int(input("Ihr Tipp: "))
    versuche = versuche + 1
    if tipp < geheim:
        print("Zu klein.")
    elif tipp > geheim:
        print("Zu groß.")

if tipp == geheim:
    print(f"Richtig! Sie haben {versuche} Versuche gebraucht.")
else:
    print(f"Leider verloren. Die Zahl war {geheim}.")
Ihr Tipp: 10
Zu klein.
Ihr Tipp: 20
Zu klein.
Ihr Tipp: 30
Zu klein.
Ihr Tipp: 40
Zu klein.
Ihr Tipp: 50
Zu groß.
Ihr Tipp: 45
Zu groß.
Ihr Tipp: 43
Zu groß.
Leider verloren. Die Zahl war 42.