Informatik

Schleifen mit while

Bei der for-Schleife steht vorher fest, wie oft wiederholt wird. Oft weiß man das aber nicht.

Stell dir eine Anmeldung mit Geheimzahl vor: Wie oft muss man nachfragen? Einmal? Fünfmal? Das hängt davon ab, wann die richtige Zahl eingegeben wird.

Ein neues Element im Flussdiagramm

flowchart TD
    S([Start]) --> V[zahl = 0]
    V --> C{zahl ungleich 1701?}
    C -- ja --> I[/Eingabe: zahl/]
    I --> C
    C -- nein --> A[/Ausgabe: Sie sind eingeloggt./]
    A --> E([Ende])

Neu ist die Raute: Sie stellt eine Bedingung dar. Je nachdem, ob sie erfüllt ist, geht es unterschiedlich weiter.

a) Analysiere das Flussdiagramm und die zugehörige Implementierung. Führe das Programm aus und probiere verschiedene Eingaben.

b) Erkläre, warum sich ein solcher Ablauf mit einer for-Schleife nicht umsetzen ließe.


      
    
zahl = 0 while zahl != 1701: zahl = int(input("Bitte Geheimzahl eingeben: ")) print("Sie sind eingeloggt.")
  • while bedingung: bedeutet: „Wiederhole, solange die Bedingung wahr ist."
  • Vor jedem Durchlauf wird die Bedingung geprüft. Ist sie von Anfang an falsch, läuft die Schleife kein einziges Mal.
  • Wie bei for gilt: Doppelpunkt am Ende, eingerückter Block darunter.
  • Damit die Schleife irgendwann endet, muss sich im Rumpf etwas ändern, das die Bedingung beeinflusst.

Achtung, Endlosschleife!

Wenn sich die Bedingung nie ändert, läuft die Schleife ewig weiter. Zum Beispiel hier:

zahl = 0
while zahl != 1701:
    print("Bitte Geheimzahl eingeben!")

Hier wird zahl nie verändert – das Programm hört nie auf.

Falls dir das passiert: Du kannst ein laufendes Programm im Programmierbereich jederzeit stoppen.

Aufgabe 1: Ein Flussdiagramm umsetzen

a) Analysiere das folgende Flussdiagramm und beschreibe den Programmablauf in eigenen Worten.

b) Entwickle eine dazu passende Implementierung.

flowchart TD
    S([Start]) --> V[summe = 0]
    V --> I[/Eingabe: zahl/]
    I --> C{zahl größer als 0?}
    C -- ja --> A[summe = summe + zahl]
    A --> I
    C -- nein --> O[/Ausgabe: summe/]
    O --> E([Ende])

      
    
# Dein Code hier
Tipp 1: Was macht das Programm?

Es addiert so lange eingegebene Zahlen auf, bis jemand eine Zahl eingibt, die nicht größer als 0 ist. Dann wird die Summe ausgegeben.

Tipp 2: Die erste Eingabe

Achte auf die Reihenfolge im Diagramm: Die erste Eingabe passiert vor der Prüfung. Deshalb steht auch im Programm eine Eingabe vor der Schleife – und eine weitere am Ende des Schleifenrumpfs.

Lösung. Erfrage das Passwort bei deiner Lehrkraft.

Aufgabe 2: Punkte nach Wunsch

Es soll ein Programm geplant und umgesetzt werden, das Folgendes leistet:

Die Benutzerin oder der Benutzer wird nach einer Wunschfarbe gefragt. Wird eine Farbe eingegeben, zeichnet die Turtle einen Punkt mit dem Durchmesser 20 in dieser Farbe und geht 20 Pixel vor. Dieser Vorgang wiederholt sich, solange nicht das Wort stopp eingegeben wird.

a) Entwickle zunächst einen geeigneten Ansatz mithilfe eines Flussdiagramms auf Papier.

b) Implementiere dann deinen Ansatz.

Eine Reihe verschiedenfarbiger Punkte


      
    
from turtle import * shape("turtle") screensize(600, 300) penup() goto(-250, 0) # Dein Code hier
Tipp 1: Womit vergleiche ich?

Hier wird kein Zahlenwert verglichen, sondern ein Text. Das geht genauso:

while farbe != "stopp":
    ...
Tipp 2: Wann wird eingelesen?

Wie in Aufgabe 1 brauchst du zwei Eingaben: eine vor der Schleife (damit die Bedingung überhaupt geprüft werden kann) und eine am Ende des Schleifenrumpfs.

Lösung. Erfrage das Passwort bei deiner Lehrkraft.

Aufgabe 3: while oder for?

Stell dir vor, zwei verschiedene Programme sollen entwickelt werden:

Variante I: Man wird nach einer Wunschfarbe gefragt. Bei jeder Eingabe zeichnet die Turtle einen Punkt mit Durchmesser 20 in dieser Farbe und geht 20 Pixel vor. Der Vorgang wiederholt sich, solange die Turtle noch im Fenster zu sehen ist.

Variante II: Man wird nach einer Größe gefragt. Die Turtle zeichnet einen Punkt mit diesem Durchmesser und geht ebenso viele Pixel vor. Der Vorgang wiederholt sich genau zehnmal.

Entscheide für jede Variante, ob man sie mit einer while- oder mit einer for-Schleife umsetzen sollte. Begründe deine Entscheidung.

Auflösung

Variante I braucht eine while-Schleife. Wie viele Punkte in das Fenster passen, hängt davon ab, wie oft gezeichnet wird – das steht vorher nicht fest.

Variante II braucht eine for-Schleife. Die Anzahl der Durchläufe ist mit „genau zehnmal" von vornherein bekannt.

Faustregel:

  • Anzahl steht vorher fest → for
  • Anzahl hängt von einer Bedingung ab → while

Zusatzaufgabe

Implementiere beide Programme aus Aufgabe 3.

Für Variante I brauchst du eine Möglichkeit, die aktuelle Position der Turtle abzufragen. Dafür gibt es xcor(), das die x-Koordinate zurückgibt:

while xcor() < 280:
    ...

      
    
from turtle import * shape("turtle") screensize(600, 300) penup() goto(-280, 0) # Dein Code hier

Selbsttest

Schleifen mit while

Teilbare URL erstellen

Abschnitte auswählen