Schleifen#

Oft müssen im Code verschiedene Blöcke mehrmals durchgeführt werden. Ist die Anzahl oder die Menge der Wiederholungen vorher bekannt, verwendet man dafür den for-Loop. Man unterscheidet zwei Arten von For-Loops:

  • For-Loop: Wiederhole die Schleife genau \(n\) mal

  • For-Each-Loop (Iterator): Wiederhole die Schleife für jedes Element in einer Sequenz

For-Loop bei bekannter Anzahl an Wiederholungen#

For-Each-Loop bei Sequenzen#

Der for-Loop in Python ist ein For-Each-Loop. Er iteriert immer durch eine Sequenz an Werten, wie z.B. eine Liste. Die Variable des Iterators e enthält dabei den aktuellen Wert der Sequenz seq. Hiermit lässt sich sehr leicht durch Listen iterieren.

seq = ['a','b','c']
for e in seq:
	print(e)
a
b
c

oder Tupels

seq = ('a','b','c')
for e in seq:
	print(e)
a
b
c

For-Loop bei bekannter Anzahl \(n\) an Wiederholungen#

Der for-Loop in Python kann auch als klassischer For-Loop verwendet werden, bei der man \(n\)-mal etwas wiederholt. Dazu erzeugt man mit der range(n) Funktion eine Folge an Zahlen, durch die dann wie gewohnt als For-Each-Loop iteriert wird. Der Iterator i nimmt dabei den Wert des Zählindexes an.

n = 3
seq = range(n)
for i in seq:
	print(i)
0
1
2

Der Unterschied wird klarer, wenn man sich ansieht, wie man mit einem nummerierten Index durch die obige Sequenz einer Liste laufen würde. Hierfür bestimmt man die Länge der Sequenz mit len(), erzeugt einen numerischen Iterator mit range() und greift dann auf die indizierten Werte der Liste mit seq[i] zu. Dies entspricht einem klassischen for-Loop durch ein Array, wie er z.B. in C oder Java zu finden ist.

seq = ['a','b','c']
for i in range(len(seq)):
    wert = seq[i]
    print(f"Index: {i}; Wert {wert}")
Index: 0; Wert a
Index: 1; Wert b
Index: 2; Wert c

Da dies sehr umständlich ist, bietet Python die enumerate-Funktion als Vereinfachung an. Sie macht aus einer beliebigen Sequenz eine nummerierte Sequenz macht. Das ist Sinnvoll, wenn man den Index i noch aus anderem Grund braucht.

seq = ['a','b','c']
for i, wert in enumerate(seq):
	print(f"Index: {i}; Wert {wert}")
Index: 0; Wert a
Index: 1; Wert b
Index: 2; Wert c

For-Each-Loop bei Dictionaries#

Auch durch Dictionaries kann man mit einem For-Loop iterieren. Hierfür kann man entweder durch die Schlüssel iterieren und dann den Wert separat über seq[key] nachschlagen.

seq = {"key1":"wert1", "key2":"wert2", "key3":"wert3"}
for key in seq:
    wert = seq[key]
    print(f"Schlüssel: {key}; Wert {wert}")
Schlüssel: key1; Wert wert1
Schlüssel: key2; Wert wert2
Schlüssel: key3; Wert wert3

oder man iteriert gleich durch alle Schlüssel-Wert-Tupel.

for key, wert in seq.items():
    print(f"Schlüssel: {key}; Wert {wert}")
Schlüssel: key1; Wert wert1
Schlüssel: key2; Wert wert2
Schlüssel: key3; Wert wert3

For-Loop Beispiel#

Damit kann man dann zum Beispiel eine Liste an Messwerten aus imperialen Fuß in metrische Meter umrechnen.

measurements_feet =  [4.2, 2.3, 6.2, 10.5]	# Eingabe
measurements_meter = []						# Ergebnisse
for feets in measurements_feet:
	measurements_meter.append(0.3048 * feets)

print(measurements_meter)
[1.2801600000000002, 0.70104, 1.88976, 3.2004]

In Python gibt es für solche einfachen For-Loops auch wieder eine Kurzschreibweise als Syntax-Zucker.

measurements_meter = [0.3048 * feets for feets in measurements_feet]

print(measurements_meter)
[1.2801600000000002, 0.70104, 1.88976, 3.2004]

While-Loops bei unbekanner Schleifenlänge#

While-Loops werden primär verwendet, wenn die Länge der Schleife am Anfang noch nicht bekannt ist. Dabei wird die Schleife so lange wiederholt, wie eine bestimmte Bedingung gegeben ist. Man unterscheidet in der Informatik die Typen:

  • While-Loop: Wiederhole solange eine Bedingung wahr ist (ggf. nie)

  • Do-While-Loop: Wiederhole bis eine Bedingung falsch ist (d.h. mindestens einmal)

  • Repeat-Until-Loop: Wiederhole bis eine Bedingung wahr wird (d.h. mindestens einmal)

While-Loop#

Im While-Loop kann die Bedingung schon am Anfang falsch sein. Die Schleife muss also nicht ausgeführt werden.

n = 3
while n > 0:
		print(f"Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife {n} > 0 wahr ist")
		n -= 1 # wir zählen die variable n runter
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife 3 > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife 2 > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife 1 > 0 wahr ist

Die While-Schleife wird 3-mal ausgeführt da die Bedingung wahr ist und wir bis 0 runter zählen

Die While-Schleife wird nicht ausgeführt, da n bereits 0 ist

n = 0
while n > 0:
		print(f"Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife {n} > 0 wahr ist")
		n -= 1 # wir zählen die variable n runter

Do-While-Loops#

Im Do-While-Loop wird die Bedingung erst am Ende geprüft. Die Schleife wird also immer mindestens einmal durchlaufen. Das ist jedoch identisch im Verhalten mit einem While-Loop bei der die Bedingung am Anfang als True gesetzt wurde und in der Schleife geändert wird.

n = 3
bedingung = True # Bedingung ist immer als True innitialisiert
while bedingung:
	n -= 1 # wir zählen die variable n runter
	bedingung = n > 0 # Die bedingung wird erst am Ende der schleife neu gesetzt
	print(f"Die Do-While-Schleife wird mindestens einmal ausgeführt bis die Bedingung am Ende der Schleife {n} > 0 wahr ist")
Die Do-While-Schleife wird mindestens einmal ausgeführt bis die Bedingung am Ende der Schleife 2 > 0 wahr ist
Die Do-While-Schleife wird mindestens einmal ausgeführt bis die Bedingung am Ende der Schleife 1 > 0 wahr ist
Die Do-While-Schleife wird mindestens einmal ausgeführt bis die Bedingung am Ende der Schleife 0 > 0 wahr ist

Die Do-While-Schleife wird auch 3 mal ausgeführt da die Bedingung wahr ist und wir bis 0 runter zählen

Die Do-While-Schleife wird einmal ausgeführt, obwohl n bereits 0 ist.

n = 0
bedingung = True # Bedingung ist immer als True innitialisiert
while bedingung:
	n -= 1 # wir zählen die variable n runter
	bedingung = n > 0 # Die bedingung wird erst am Ende der schleife neu gesetzt
	print(f"Die Do-While-Schleife wird mindestens einmal ausgeführt bis die Bedingung am Ende der Schleife {n} > 0 wahr ist")
Die Do-While-Schleife wird mindestens einmal ausgeführt bis die Bedingung am Ende der Schleife -1 > 0 wahr ist

Repeat-Until-Loop#

Beim Repeat-Until-Loop wird die Bedingung auch erst am Ende geprüft. Die Schleife wird also auch immer mindestens einmal durchlaufen. Die Schleife wird allerdings wiederholt bis die Bedingung Wahr wird. Es ist also eine Negation des Do-While-Loops.

n = -3
bedingung = False # Bedingung ist immer als False innitialisiert
while not bedingung:  # wird aber im while negiert
	n += 1 # wir zählen die variable n HOCH
	bedingung = n > 0 # Die bedingung wird erst am Ende der schleife neu gesetzt
	print(f"Die Repeat-Until-Schleife wird mindestens einmal ausgeführt bis die Bedingung am Ende der Schleife {n} > 0 falsch ist")
Die Repeat-Until-Schleife wird mindestens einmal ausgeführt bis die Bedingung am Ende der Schleife -2 > 0 falsch ist
Die Repeat-Until-Schleife wird mindestens einmal ausgeführt bis die Bedingung am Ende der Schleife -1 > 0 falsch ist
Die Repeat-Until-Schleife wird mindestens einmal ausgeführt bis die Bedingung am Ende der Schleife 0 > 0 falsch ist
Die Repeat-Until-Schleife wird mindestens einmal ausgeführt bis die Bedingung am Ende der Schleife 1 > 0 falsch ist

Die Repeat-Until-Schleife wird 3 mal ausgeführt, da die Bedingung am Anfang falsch ist und wir bis 0 hoch zählen.

Die Do-While-Schleife wird einmal ausgeführt, da n am Ende der Schleife > 0 ist.

n = 0
bedingung = False # Bedingung ist immer als False innitialisiert
while not bedingung:  # wird aber im while negiert
	n += 1 # wir zählen die variable n HOCH
	bedingung = n > 0 # Die bedingung wird erst am Ende der schleife neu gesetzt
	print(f"Die Repeat-Until-Schleife wird mindestens einmal ausgeführt bis die Bedingung am Ende der Schleife {n} > 0 falsch ist")
Die Repeat-Until-Schleife wird mindestens einmal ausgeführt bis die Bedingung am Ende der Schleife 1 > 0 falsch ist

Endloos-Schleifen#

Warning

While-Schleifen haben keine maximale Wiederholungsanzahl. Sie können potentiell für immer laufen, wenn sich die Bedingung nie ändert. Es ist daher immer wichtig zu durchdenken, ob es den Fall gibt in dem sich die Bedingung nicht ändern kann und dann eine zweite Abbruchbedingung (z.B. maximale Iterationen, maximale Zeit, etc.) hinzuzufügen.

Wir schauen uns unsere while_loop-Funktion noch einmal an. Wie könnte diese Funktion zu einer Endlosschleife werden?

while n > 0:
	print(f"Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife {n} > 0 wahr ist")
	n -= 1 # wir zählen die variable n runter
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife 1 > 0 wahr ist

Es sieht erstmal so aus, als ob das nicht möglich ist. Wir werden dennoch sicherheitshalber eine zweite Variante mit zusätzlicher Abbruchbedingung definieren.

def while_loop_mit_abbruch(n, max_iterations=99):
	iterations = 0
	while n > 0 and iterations < max_iterations:
		print(f"Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife {n} > 0 wahr ist")
		n -= 1 # wir zählen die variable n runter
		iterations += 1
	print(f"Die While-Schleife wurde nach {iterations} von {max_iterations} beendet")

Der obige Testfall mit 3 scheint zu funktionieren.

while_loop_mit_abbruch(3)
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife 3 > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife 2 > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife 1 > 0 wahr ist
Die While-Schleife wurde nach 3 von 99 beendet

Was passiert allerdings wenn wir die Funktion mit Unendlich (Infinity) initialisieren? Die Subtraktion/Addition einer Zahl, ungleich Unendlich, zu Unendlich ist Unendlich. Die Variable n wird sich also nie ändern.

import math # die Zahl unendlich ist in der math bibliothek definiert

while_loop_mit_abbruch(math.inf)
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wird ausgeführt wenn die Bedingung am Anfang der Schleife inf > 0 wahr ist
Die While-Schleife wurde nach 99 von 99 beendet

Schleifen vorzeitig abbrechen oder Elemente überspringen#

Manchmal möchte man eine for/while-Schleife verfrüht abbrechen. Hierfür bietet Python den break–Befehl. Er bricht die Wiederholschleife an der aktuellen Position ab (ähnlich wie repeat in einer Funktion). Damit lassen sich zusätzliche Abbruchbedingungen in der Schleife implementieren.

Der continue-Befehl bricht die Schleife nicht ab, sondern beginnt direkt die nächste Iteration. Das ist sinnvoll wenn z.B. eine Filterbedingung nicht erfüllt ist.

Der folgende Loop soll das erste essbare Ding in meinem Rucksack finden.

dinge_in_meinem_rucksack = ["Papier", "Stift", "Apfel", "Brot", "Messer"]
essbares = {"Apfel", "Brot"}
essbar = None

for ding in dinge_in_meinem_rucksack:   # Finde das erste essbare Ding in meinem Rucksack
	if ding not in essbares:
		print(f"Überspringe {ding}")
		continue
	print(f"Essbares gefunden {ding}")
	essbar = ding
	break

print("")
print(f"Ergebnis ist {essbar}")
Überspringe Papier
Überspringe Stift
Essbares gefunden Apfel

Ergebnis ist Apfel

Wir sehen, dass der Loop Papier und Stift überspringt und nicht "Essbares gefunden Papier" schreibt.

Sobald der Loop etwas Essbares gefunden hat, so gibt er "Essbares gefunden Apfel" aus und beendet den Loop, obwohl noch Brot und Messer im Rucksack sind.

Beides sind typische Befehle, um die Performance von Loops zu verbessern.

Endlosschleifen mit Timeout#

Mit break lassen sich zusätzliche Abbruchbedingungen realisieren, wie z.B. eine maximale Ausführzeit. Z.B. definieren wie einen zusätzlichen Timeout in einer Endlosschleife von 10 Sekunden mit Hilfe der time()-Funktion aus dem Paket time, welche die aktuelle Zeit (seit 1970) in Sekunden ausgibt.

import time

iterations = 0
start = time.time() # wir speichern die Anfangszeit
while True:         # DAS IST EINE ENDLOSSCHLEIFE
	iterations += 1
	elapsed = time.time() - start  # wir berechnen die Zeitdifferenz in Sekunden
	if elapsed > 3:
		print(f"Timeout after {elapsed}s and {iterations} iterations")
		break       # Wir brechen die Schleife ab
Timeout after 3.000000238418579s and 15996502 iterations

Das ist allerdings keine gute Methode um ein Programm eine Zeit lang zu unterbrechen. Dafür sollten Sie lieber die sleep() Funktion aus dem Paket time nutzen. Beachten Sie die Ausführungszeit unter der Zelle.

start = time.time()              # wir speichern die Anfangszeit

time.sleep(3)                    # wir schlafen 3s

print(f"Sleeped for {time.time() - start}s")  # wir geben die Zeitdifferenz aus
Sleeped for 3.0002667903900146s