Schleifen¶
while
-Schleife¶
Die while
-Schleife wird so lange ausgeführt, wie die Bedingung (hier: x >
y
) wahr ist:
1>>> x, y = 6, 3
2>>> while x > y:
3... x -= 1
4... if x == 4:
5... break
6... print(x)
7...
85
- Zeile 1
Dies ist eine Kurzschreibweise, wobei
x
den Wert6
undy
den Wert3
erhält.- Zeilen 2–10
Dies ist die
while
-Schleife mit der Anweisungx > y
, die wahr ist, solangex
größer alsy
ist.- Zeile 3
x
wird um1
reduziert- Zeile 4
if
-Bedingung, bei derx
exakt4
sein soll.- Zeile 5
break
beendet die Schleife.- Zeilen 8 und 9
gibt die Ergebnisse der
while
-Schleife aus bevor die Ausführung mitbreak
unterbrochen wurde.
1>>> x, y = 6, 3
2>>> while x > y:
3... x -= 1
4... if x == 4:
5... continue
6... print(x)
7...
85
93
- Zeile 5
continue
bricht die aktuelle Iteration der Schleife ab.
for
-Schleife¶
Die for
-Schleife ist einfach, aber mächtig, weil sie über einen beliebigen
iterierbaren Typ, wie eine Liste oder ein Tupel, iterieren kann. Anders als in
vielen anderen Sprachen iteriert die for
-Schleife in Python über jedes
Element in einer Sequenz (z.B. eine Liste oder ein Tupel), was sie eher zu einer
foreach
-Schleife macht. Die folgende Schleife verwendet den Modulo-Operator %
als
Bedingung für as erste Vorkommen einer ganzen Zahl, die durch 5
teilbar ist:
>>> items = [1, "fünf", 5.0, 10, 11, 15]
>>> d = 5
>>> for i in items:
... if not isinstance(i, int):
... continue
... if not i % d:
... print(f"Erste gefundene Ganzzahl, die durch {d} teilbar ist: {i}")
... break
...
Erste gefundene Ganzzahl, die durch 5 teilbar ist: 10
x
wird nacheinander jeder Wert in der Liste zugewiesen. Wenn x
keine
ganze Zahl ist, wird der Rest dieser Iteration durch die continue
-Anweisung
abgebrochen. Die Ablaufsteuerung wird fortgesetzt, wobei x
auf den nächsten
Eintrag in der Liste gesetzt wird. Nachdem die erste passende ganze Zahl
gefunden wurde, wird die Schleife mit der break
-Anweisung beendet.
Schleifen mit einem Index¶
Ihr könnt in einer for
-Schleife auch den Index ausgeben, z.B. mit enumerate()
:
>>> data_types = ["Data types", "Numbers", "Lists"]
>>> for index, title in enumerate(data_types):
... print(index, title)
...
0 Data types
1 Numbers
2 Lists
List Comprehensions¶
Üblicherweise wird eine Liste folgendermaßen generiert:
>>> squares = []
>>> for i in range(8):
... squares.append(i**2)
...
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49]
Anstatt eine leere Liste zu erstellen und jedes Element am Ende einzufügen, definiert ihr mit List Comprehensions einfach die Liste und ihren Inhalt gleichzeitig mit nur einer einzigen Code-Zeile:
>>> squares = [i**2 for i in range(8)]
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49]
Das allgemeine Format hierfür ist:
NEW_LIST = [EXPRESSION for MEMBER in ITERABLE]
Jede List Comprehension in Python enthält drei Elemente:
EXPRESSION
ist ein Aufruf einer Methode oder ein anderer gültiger Ausdruck, der einen Wert zurückgibt. Im obigen Beispiel ist der Ausdruck
i ** 2
das Quadrat des jeweiligen Mitgliedswertes.MEMBER
ist das Objekt oder der Wert in einem
ITERABLE
. Im obigen Beispiel ist der Werti
.ITERABLE
ist eine Liste, ein Set, ein Generator oder ein anderes Objekt, das seine Elemente einzeln zurückgeben kann. Im obigen Beispiel ist die Iterable
range(8)
.
Ihr könnt mit List Comprehensions auch optional Bedingungen verwenden, die üblicherweise am Ende des Ausdruck angehängt werden:
>>> squares = [i**2 for i in range(8) if i >= 4]
>>> squares
[16, 25, 36, 49]
Checks¶
Entfernt aus der Liste
x = [ -2, -1, 0, 1, 2, 3]
, alle negativen Zahlen.Welche List-Comprehension würdet ihr verwenden, um zum selben Ergebnis zu kommen?
Wie würdet ihr die Gesamtzahl der negativen Zahlen in der Liste
[-[1, 0, 1], [-1, 1, 3], [-2, 0, 2]]
zählen?Erstellt einen Generator, der nur ungerade Zahlen von 1 bis 10 liefert.
Tipp
Eine Zahl ist ungerade, wenn bei der Division durch 2 ein Rest übrig bleibt; also wenn
% 2
wahr ist.Schreibt ein Dict mit den Kantenlängen und Volumen von Würfeln.