Zurück


Schleifen


Mit Schleifen kannst du Code öfter exekutieren:

planeten = ["Merkur", "Venus", "Erde", "Mars", "Jupiter", "Saturn", "Uranus", "Neptun"]

for planet in planeten:

print(planet, end=" ") #Alle auf derselben Zeile Merkur Venus Erde Mars Jupiter Saturn Uranus Neptun

Die for Schleife braucht:
• Einen Variablennamen Initialisieren (in unserem Fall planet)
• Ein bestimmter Wert, der festlegt, wie oft es sich wiederholen soll (in unserem Fall planeten)
Das Wort "in" wird zum Verbinden verwendet.

Rechts vom "in" sollte ein Objekt stehen, das sich für Wiederholungen eignet. Wir können nicht
nur Listen wiederholen, sondern auch ein tuple:

multiplikanten = (2, 2, 2, 3, 3, 5)
produkt = 1
for mult in multiplikanten:
produkt = produkt * mult

produkt
360

Du könntest sogar jeden Charakter in einem String wiederholen:

s = 'steganographie ist die Art des verbergens einer datei, nachricht, biLd, oder video innerhaLb einer weiteren datei, nachricht, bild, Oder video.'
msg = ' '
# Drucke alle Großbuchstaben in S in einer Wurst aus.
for char in s:
if char.isupper():
print(char, end='')
HALLO
range()

range() ist eine Funktion, die eine Sequenz von Zahlen ins return schickt, was ziemlich nützlich für schleifen ist.
In diesem Beispiel wollen wir eine tat 5 Mal wiederholen:

for i in range(5):
print("An was Wichtigem arbeiten. i =", i)

An was Wichtigem arbeiten. i = 0
An was Wichtigem arbeiten. i = 1
An was Wichtigem arbeiten. i = 2
An was Wichtigem arbeiten. i = 3
An was Wichtigem arbeiten. i = 4

While Schleifen


Es gibt auch noch die While Schleifen, diese wiederholen sich, bis die Bedingung erfüllt ist:

i = 0
while i < 10:
print(i, end=" ")
i += +1 #Immer am ende +1 zu i addieren.
0 1 2 3 4 5 6 7 8 9

Die Bedingung in der while Schleife wird wie ein Boolescher Wert gezählt. Es wird so lange arbeiten,
bis es False ist, also die Bedingung erfüllt wurde.

Eines der beliebtesten und einzigartigsten Merkmale von Python ist List Comprehensions.
Es ist einfacher, es durch Beispiele zu verstehen:

würfel = [n**2 for n in range(10)]
würfel
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

So würden wir das machen, wenn es keine List Comprehensions gäbe.

würfel = [ ]
for n in range(10):
würfel.append(n**2)
würfel
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

Dazu können wir auch if verzweigen hinzufügen

kleine_planeten = [planet for planet in planeten if len(planet) < 6]
kleine_planeten
["Venus", "Erde", "Mars"]

(Falls du schon im Schulfach Datenbanken mit SQL begonnen hast, könntest du dir das wie eine
"WHERE" Klausel vorstellen)
Wir können es auch mit einer if Verzweigung filtrieren und Variablen in der Schleife ein Wenig Manipulieren:

#str.upper() schickt den String in Blockbuchstaben ins return.
laute_kleine_planeten = [planet.upper() + "!" for planet in planeten if len(planet) < 6]
laute_kleine_planeten
["VENUS!", "ERDE!", "MARS!"]

Normalerweise wird das in einer Zeile aufgeschrieben, aber vielleicht ist es klarer wenn es in 3 Zeilen
aufgeteilt wird:

[
planet.upper() + "!"
for planet in planeten
if len(planet) < 6
]
["VENUS!", "ERDE!", "MARS!"]
(weil wir schon dabei sind, unsere Beispiele mit SQL zu vergleichen, könntest du diese 3 Zeilen als SELECT, FROM und WHERE sehen)

Der Baustein links muss nicht immer etwas mit der Loop Variable zu tun haben. Es wäre aber äußerst sonderbar, wenn es nichts
damit zu tun hätte. Was glaubst du, was der Befehl unten macht?

[32 for planet in planeten]

Aufklappen [32, 32, 32, 32, 32, 32, 32, 32]


Wenn man List Comprehensions mit Funktionen wie min, max und sum zusammenfügt, kriegt man erstaunliche Lösungen für Probleme,
die viele Zeilen brauchen würden, in nur einer Zeile.
Vergleiche mal die zwei Lösungen. Bei Beiden kommt das gleiche Ergebnis raus.

def zaehle_negative(zahlen):
"""Schickt die Anzahl der negativen Zahlen in einer Liste ins return.

>>> zaehle_negative([5, -1, -2, 0, 3])
2
"""
z_negative = 0
for zahl in zahlen:

if zahl < 0:
z_negative = z_negative + 1
return z_negative


Das Gleiche noch einmal, aber dieses Mal mit List Comprehensions:

def zaehle_negative(zahlen):
return len([zahl for zahl in zahlen if zahl < 0])


Um einiges besser, oder?

Wenn es uns aber um das Verkleinern der Codelänge geht, ist die dritte Lösung am besten:

def zaehle_negative(zahlen):

\*
Zur Erinnerung:
In der Übung Boolesche Werte und Bedingungen haben wir herausgefunden, dass
Python lustigerweise True + True + False + True wie eine 3 sieht.
\*

return sum ([zahl < 0 for zahl in zahlen])

Welche dieser drei Möglichkeiten die beste Lösung ist, ist komplett euch überlassen. Wenn es mit Code lösbar ist, ist es zwar schön für die Lesbarkeit, aber die folgenden Wörter vom The Zen of Pythonsind hier gut zum Erwähnen: Lesbarkeit ist wichtig.
Aber deutlich sein ist besser als andeuten.