Die while-Anweisung in Python (Die while-Anweisung in Python), Lektion, Seite 723920
https://www.purl.org/stefan_ram/pub/while-anweisung_python (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Python-Kurs

Die while-Schleife in Python 

Die Syntax der while-Schleife ist wie die Syntax der if-Anweisung, nur mit »while« statt »if«.

Die Konsequenz wird allerdings solange ausgeführt wie die Bedingung als wahr gilt, also gegebenenfalls auch wiederholt.

Die while-Schleife wird folgendermaßen ausgeführt:

Beispiel 0

x = 1

while x:

x = int( input( 'Zahl (0 zum Beenden)? ' ))

print( 'Quadrat = ' + str( x*x ))

Zahl (0 zum Beenden)? 2

Quadrat = 4

Zahl (0 zum Beenden)? 9

Quadrat = 81

Zahl (0 zum Beenden)? 0

Quadrat = 0

(Ende des Programms)

Bei der Eingabe in die Konsole wird mit der Ausführung einer eingegebenen while-Anweisung erst begonnen, wenn alle ihre Zeilen vollständig eingegeben wurden, was die Konsole an der Eingabe einer Leerzeile am Ende der while-Anweisung erkennt.

Ein Variable, deren Wert für den Ablauf einer Schleife wesentlich ist, nennen wir eine Schleifenvariable.  In dem obenstehendem Programm gibt es eine Schleifenvariable, nämlich »x«.

In der Suite einer while-Schleife dürfen auch if-Anweisungen verwendet werden.

Zählschleifen

Bei einer Zählschleife wird der Wert einer numerischen Variablen auf einen Anfangswert gesetzt und bei jedem Schleifendurchlauf so verändert, daß die Schleifenbedingung schließlich falsch wird.

Typisch ist der Anfangswert »0« und das Erhöhen um »1« bis die Schleifenvariable nicht mehr kleiner als eine obere Schranke ist.

Programm

x = 0

while x < 5:

print( x )

x += 1

Ausgabe
0
1
2
3
4

Bei solchen Schleifen muß man stets besonders darauf achten die Initalisierung der Schleifenvariablen vor der Schleife und die Inkrementierung (das Erhöhen um »1«) am Ende der Suite nicht zu vergessen.

Endlosschleife

Eine Endlosschleife  ist eine Schleife – die absichtlich oder versehentlich – so programmiert wurde, daß sie nicht mehr von alleine endet. Wenn man das Inkrementieren bei einer Zählschleife vergißt, erhält man beispielsweise eine Endlosschleife.

Programm

x = 0

while x < 5:

print( x )

Ausgabe
0
0
0
(und so weiter)

Eine Schleife, die mit »while True« beginnt, nennen wir auch eine True-Schleife.

main.py

while True:

print( "abc" )

Protokoll
abc
abc
abc
(und so weiter)

Schleifen unter IDLE 

Abbruch

Um ein Programm, das unter IDLE  läuft, abzubrechen, gibt es folgende Möglichkeiten:

Die beiden zuletztgenannten Möglichkeiten gehen nicht immer. Wenn, in eine Schleife, die unterbrochen werden soll, eine kurze Verzögerung eingebaut wird, so gelingt der Abbruch mit diesen letztgenannten Möglichkeiten wahrscheinlich öfter.

from-Anweisung für ein kurze Verzögerung
from time import sleep
Eine kurze Verzögerung
sleep( 0.00001 )

Es kann auch helfen, in print-Aufrufe innerhalb der Schleife eine flush-Option einzubauen, insbesondere, wenn diese kein Zeilenende ausgeben.

Eine print-Option
flush=True

Beschleunigung

Die Ausgabe von Textzeilen ist für ein Programm relativ zeitaufwendig. Vermutlich kann sie beschleunigt werden, indem das Ausgabefenster verkleinert wird.

Übungsfragen

?   Übungsfrage 0

Warum kann im Beispiel 0  (oben) zuerst nicht »x = 0« statt »x = 1« stehen?

?   Übungsfrage 1

Welche Ausgabe erzeugt das folgende Programm?

Programm

while print( 'a' ):

print( 'b' )

?   Übungsfrage 2

Welche Ausgabe erzeugt das folgende Programm?

Programm

i = 5

while i < 9:

print( i )

i += 2

?   Übungsfrage 3

Wie viele Zeilen gibt das folgende Programm aus?

Programm

i = 1

while i < 5:

print( i )

i += 1

?   Übungsfrage 4

Welche Ausgabe erzeugt das folgende Programm?

Programm

i = 9

while 5 < i:

print( i )

i -= 1

Übungsaufgaben

/   Übungsaufgabe 0

Schreiben Sie die while-Schleife aus dem Beispiel 0 so um, daß sich die Schleife weiterhin verhält wie im Beispiel 0, aber nach Eingabe von »0« nichts mehr ausgegeben wird.

/   Übungsaufgabe 1

Schreiben Sie die while-Schleife aus dem Beispiel 0 so um, daß die Eingabe einer negativen Zahl zum Beenden führt.

/   Übungsaufgabe 2

Schreiben Sie die while-Schleife aus dem Beispiel 0 so um, daß das Quadrat von allen  Zahlen (auch von Null und von negativen Zahlen) berechnet werden kann, und die Eingabe des Wortes »ende« zum Beenden der Schleife führt.

/   Übungsaufgabe 3

Schreiben Sie die while-Schleife aus dem Beispiel 0 so um, daß das Quadrat von allen  Zahlen (auch von Null und von negativen Zahlen) berechnet werden kann, und die Eingabe von »00« zum Beenden der Schleife führt.

/   Übungsaufgabe 4

Schreiben Sie die while-Schleife aus dem Beispiel 0 so um, daß an Stelle von »int( input(« mit »get(« eine von Ihnen geschrieben Funktion zum Einlesen eines int-Wertes verwendet wird.

/   Übungsaufgabe 5

Schreiben Sie ein Programm mit einer while-Schleife, welches zehnmal die Zeile »Dieses ist ein langer Satz.« ausgibt, indem bei jeder Wiederholung der Ausführung der Suite der Schleife einmal jene Zeile ausgegeben wird.

/   Übungsaufgabe 6

Schreiben Sie ein Programm mit einer while-Schleife, welches die Zahlen von 0 (einschließlich) bis 20 (ausschließlich) ausgibt.

/   Übungsaufgabe 7

Schreiben Sie ein Programm mit einer while-Schleife, welches die Zahlen von 49 (ausschließlich) bis 40 (einschließlich) in absteigender Reihenfolge ausgibt.

/   Übungsaufgabe 8

Schreiben Sie ein Programm mit einer while-Schleife, welches die großen Buchstaben von »A« bis »Z« ausgibt.

/   Übungsaufgabe 9

Schreiben Sie ein Programm mit einer while-Schleife, welches die kleinen Buchstaben von »z« bis »a« ausgibt.

/   Zahlenraten

In dieser Aufgabe soll ein Spiel programmiert werden, bei dem der Computer sich eine Zahl ausdenkt und der Benutzer versucht, diese zu erraten. Als Hilfe sagt der Computer es dem Benutzer dabei jeweils, wenn die vom Benutzer geratene Zahl zu groß oder zu klein sein sollte.

Ein Programm soll zufällig eine ganze Zahl zwischen 0 und 99 auswählen. Der Benutzer des Programms soll eine ganze Zahl eingeben können. Das Programm soll dann ausgeben, ob die eingegebene Zahl größer oder kleiner als die ausgewählte Zahl oder der ausgewählten Zahl gleich ist. Solange die eingegebene Zahl der ausgewählten Zahl nicht gleich ist, soll die Eingabe wiederholt werden können.

Hinweis für den Dozenten  ► In der Nachbesprechung die möglichen Vorgehensweise zeigen:
 – Monolith
 – aufsteigend (bottom-up)
 – absteigend (top-down)

/   Umgekehrtes Zahlenraten

In dieser Aufgabe soll ein Spiel programmiert werden, bei dem ein Mensch sich eine Zahl ausdenkt und der Computer versucht, diese zu erraten. Als Hilfe sagt der Mensch es dem Computer dabei jeweils, wenn die vom Computer geratene Zahl zu groß oder zu klein sein sollte.

Hier soll ein Programm geschrieben werden. Der Benutzer des Programmes soll sich eine ganze Zahl zwischen 0 und 99 ausdenken. Alsdann soll der Computer versuchen, diese Zahl mit möglichst wenig Schritten zu erraten, indem er eine ganze Zahl zwischen 0 und 99 ausgibt. Nach jeder Ausgabe des Computers muß der Benutzer eingeben, ob die eingegebene Zahl größer oder kleiner als die ausgedachten Zahl oder der ausgewählten Zahl gleich ist. Solange die ausgegebene Zahl der ausgedachten Zahl nicht gleich ist, soll die Ausgabe wiederholt werden.

Übungsaufgaben zu Schildkröten und Schleifen

Wir setzen die folgende Anweisung als Vorbereitung voraus.

Vorbereitungen
from turtle import *

Die folgende Funktion zeichnet ein gleichseitiges Dreieck.

Vorbereitungen
def Dreieck():
forward( 99 ); left( 360/3 )
forward( 99 ); left( 360/3 )
forward( 99 ); left( 360/3 )

Die folgende Funktion zeichnet ein gleichseitiges Viereck.

Vorbereitungen
def Viereck():
forward( 99 ); left( 360/4 )
forward( 99 ); left( 360/4 )
forward( 99 ); left( 360/4 )
forward( 99 ); left( 360/4 )

/   Übungsaufgabe 0S

Schreiben Sie die beiden Funktionen mit Hilfe einer Schleife so um, daß jede Funktion nur noch einmal »forward« und »left« enthält.

/   Übungsaufgabe 1S

Schreiben Sie eine einzige, möglichst kurze, Funktion, die man mit »4« aufrufen kann, um ein gleichseitiges Viereck zu erhalten und mit »3« um ein gleichseitiges Dreieck zu erhalten.

Zusatzaufgabe Wenn Sie beide Funktionen hintereinander aufrufen, kann es sein, daß sich ein Quadrat ergibt, das ein Dreieck enthält. Können Sie vor dem Zeichnen des Dreiecks eine Drehung einbauen, die das Dreieck so verdreht, daß ein Haus gezeichnet wird?

/   Übungsaufgabe 2S

Variieren Sie die Lösung der vorigen Übungsaufgabe so, daß bei einem Aufruf mit »3« nur noch ein ganz kleines gleichseitiges Dreieck gezeichnet wird und rufen Sie diese dann so auf, daß eine kreisähnliche Figur entsteht.

/   Übungsaufgabe 3S

Schreiben Sie eine Funktion, welche zu einer nicht-negativen ganzen Zahl n, die Liste aller Dezimalnumeralia nicht-negativer ganzer Zahlen bis zu n  (ausschließlich) als Zeichenfolge ergibt (in aufsteigender Reihenfolge), wobei hinter jedem Numeral das Zeichenpaar »« (Komma und Leerzeichen) stehen solle.

Beispielsweise sollte der Aufruf der Funktion mit dem Zahlenwert »3« die Zeichenfolge »0, 1, 2, « ergeben.

/   Eine Iterationsfunktion ⃗

Schreiben Sie eine Funktion »loop«, welche eine als Argument übergebene Funktion immer wieder (ohne Argumente) aufruft.

Diese Funktion kann dann beispielsweise verwendet werden, um eine interaktiven Python -Implementation zu schreiben. Ein Implementation mit einer Schleife wie »loop( lambda: print( eval( input() )))« wird auch „Lese-Auswerte-Ausgabe-Schleife“ (“read-eval-print loop ” oder “REPL”) genannt.

geplanter Aufruf
loop( lambda: print( eval( input() )))
2+3
5
1+1
2
9*(3-2)
9
^Z
EOFError

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram723920 stefan_ram:723920 Die while-Anweisung in Python Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723920, slrprddef723920, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/while-anweisung_python