====== Schleifen mit Abbruchbedingung ====== Häufig wiederholen sich Anweisungen in Algorithmen. Solche Anweisungen lassen sich in der Datenstruktur **Schleife** zusammenfassen. Die Frage ist nun, wie oft die Anweisungen wiederholt werden sollen. Eine Möglichkeit ist es, die Anweisungen solange zu wiederholen, solange eine bestimmte Bedingung erfüllt ist. Damit lässt sich der Algorithmus auf die folgenden beiden Arten formulieren. ===== Allgemeine Formulierung ===== ==== Verbale Kurzbeschreibung ==== === Kopfgesteuerte Schleife === **Wiederhole** solange die Bedingung erfüllt ist:\\ ...Anweisungen... === Fußgesteuerte Schleife === **Wiederhole**:\\ ...Anweisungen...\\ solange die Bedingung erfüllt ist Bei der kopfgesteuerten Schleife wird die Schleifenbedingung am Anfang der Schleife getestet. Die Schleife wird immer wieder durchlaufen, solange die Bedingung erfüllt ist. Wenn die Bedingung beim Eintritt nicht erfüllt, wird die Schleife nicht durchlaufen. Bei der fußgesteuerten Schleife wird die Schleifenbedingung am Ende der Schleife getestet. Die Schleife wird immer wieder durchlaufen, solange die Bedingung erfüllt ist. Wenn die Bedingung beim Eintritt nicht erfüllt, wird die Schleife mindestens einmal durchlaufen. ==== Struktogramm ==== === Kopfgesteuerte Schleife === {{ :python:kopfgesteuerte_schleife.png?direct&200 |}} === Fußgesteuerte Schleife === {{ :python:fussgesteuerte_schleife.png?direct&200 |}} ==== Python-Syntax ==== In Python gibt es keine Anweisung für fußgesteuerte Schleifen. Man kann aber fußgesteuerte Schleifen simulieren indem man vor die Schleife eine Anweisung schreibt, die die Eintrittsbedingung in die Schleife erfüllt. === Kopfgesteuerte Schleife === while : a1 a2 ... an === Fußgesteuerte Schleife === anweisung #erfüllt die Bedingung while : a1 a2 ... an Nach dem Schlüsselwort ''%%while%%'' steht die Bedingung, danach ein Doppelpunkt. Auf den nächsten Zeilen folgt eingerückter Code. Dieser wird solange ausgeführt, solange die Bedingung erfüllt ist. Hier erscheint vor der Schleife eine Anweisung, die die Bedingung erfüllt. Somit wird die Schleife mindestens einmal durchlaufen. ===== Beispiel ===== ==== Aufgabenstellung ==== Wir wollen ein Programm schreiben, welches nach Eingabe einer ganzen Zahl die zugehörige Quadratzahl ausgibt. Die Ein- und die Ausgabe sollen solange wiederholt werden, bis die Zahl 0 eingegeben wurde. ==== Verbale Kurzbeschreibung ==== Wiederhole: * Eingabe: zahl * Ausgabe: zahl * zahl solange zahl ungleich Null ==== Struktogramm ==== {{ :python:beispiel_kopf.png?direct&200 |}} {{ :python:beispiel_fuß.png?direct&200 |}} Eigentlich handelt es sich bei unseren Algorithmus um eine fußgesteuerte Schleife (siehe Struktogramm rechts). Da es aber im Python keine Kontrollstruktur für eine fußgesteuerte Schleife gibt, simuliert man eine fußgesteuerte Schleife durch eine kopfgesteuerte Schleife, indem man vor dem Schleifeneintritt sicherstellt, dass die Schleifenbedingung erfüllt ist (siehe Struktogramm links). ==== Umsetzung in Python ==== zahl = -1 while zahl != 0: zahl = int(input("z = ")) print("z² =",zahl*zahl) Bei der Umsetzung in Python wurde als Vorlage das Struktogramm links genutzt. =====Erklärvideo===== {{youtube>wNDMdRMYOOs}} ===== Vertiefung ===== Im Lehrbuch inf-Schule wird das Thema nochmal vertieft: * https://www.inf-schule.de/imperative-programmierung/python/konzepte/wiederholungen ===== Aufgaben ===== **Aufgabe 1** Schreibe ein Programm, welches solange ein Passwort abfragt, bis das richtige Passwort ("geheim") eingegeben wurde. Am Ende soll dass Programm beim richtigen Passwort ausgaben: "Eingabe korrekt!" **Aufgabe 2** Das folgende Pythonprogramm testet eine Zahl auf Teilbarkeit durch 3. n = int(input("n = ")) if n % 3 ==0: print("n ist durch 3 teilbar!") else: print("n ist nicht durch 3 teilbar!") Ergänze das Programm mit einer while-Schleife, so dass nach jeder Ergebnisausgabe gefragt wird, ob eine weitere Zahl getestet werden soll! \\ [[python:loesungen:schleifen_mit_abbruch| >> Lösungen]] [[python:zaehlschleifen|>> Zählschleifen]] \\ ~~DISCUSSION | Hier können Fragen zum Inhalt der Seite gestellt werden. ~~