3.3Kontrollstrukturen
Bevor wir uns die Speicherung von Python-Code in verschiedenen Dateien ansehen führen wir zuerst ein paar Konzepte des Kontrollflusses bzw. der Kontrollstrukturen, die den Programmfluss beeinflussen an.
Bisher haben wir in der REPL nacheinander einzelne Schritte eingegeben und ausgeführt. In den Beispielen gab es ab und zu Code-Zellen, in denen mehrere Python-Ausdrücke untereinander standen. All das bietet den ersten Hinweis auf das Standardverhalten von Python-Code:
Dies ist zu sehen an den folgenden zwei Code-Beispielen.
Beispiel 1:
a = 5
a *= 2
a += 1
print(a)
11
Beispiel 2:
a = 5
a += 1
a *= 2
print(a)
12
Nachvollziehen Sie die beiden Code-Beispiele. Welchen Wert hat die Variable mit
dem Namen a
nachdem jeweils der Ausdruck in jeder Zeile ausgeführt wurde?
Welche Werte erhalten Sie, wenn Sie jeweils nicht a += 1
ausführen sondern
a += 3
?
if
-Anweisung¶
Einfach nur den Code von oben nach unten auszuführen reicht oft nicht aus um das gewünschte Ergebnis zu erhalten.
Nehmen Sie an, dass Sie Python-Code schreiben sollen, der den Wert in einer
Variablen zahl
halbieren soll, wenn der Wert größer als 10
ist. Ansonsten
soll er unberüht bleiben.
Wie schon in der deutschsprachigen Beschreibung des Problems zu sehen soll
etwas nur dann getan werden, wenn eine Bedingung zutrifft. In Python ist
dies mit dem if
-Anweisung möglich.
zahl = 6
if zahl > 10:
zahl = zahl / 2
print(zahl)
6
Ändern Sie den Wert von Zahl um zu sehen, ob der if
-Anweisung korrekt
auslöst.
Nun soll der Code zusätzlich 3
zur zahl
addieren, falls zahl
kleiner oder
gleich 10
ist. Dies geht mit der Erweiterung der if
-Anweisung um else
.
zahl = 6
if zahl > 10:
zahl = zahl / 2
else:
zahl += 3
print(zahl)
9
Gibt es mehrere Wertebereiche, in denen die Zahl unterschiedlich verarbeitet
werden soll, so können Sie diese mit elif
zwischen dem if
und dem else
definieren.
Was passiert mit der Zahl im nachfolgenden Beispiel? Nachvollziehen Sie den
ausgeführten Code und ändern Sie die Zahl um alle “Zweige” der
if
-Anweisung(en) einmal auszulösen.
zahl = 6
if zahl > 10:
zahl = zahl / 2
elif zahl > 5 and zahl <=10: # mit `and` können Sie mehrere Bedingungen verknüpfen
if zahl % 2 == 0: # mit `==` überprüfen Sie ob beide Seiten gleich sind.
zahl += 1
else:
zahl += 3
print(zahl)
7
Darf die Nutzer*in die gewünschte Anzahl an Büchern ausleihen?
Funktionen¶
Wenn Sie die Beispiele zum if
-Ausdruck nacheinander abgetippt haben, ist
Ihnen sicher die viele Wiederholung aufgefallen.
Wollen wir den Kontostand und die Möglichkeit einer Ausleihe mehrmals nutzen, so wäre es unschön, wenn wir immer wieder den ganzen Code kopieren müssten. Hier setzten Funktionen an.
Sie haben schon mindestens die Funktion print()
genutzt, welche Ihnen eine
gewisse Funktionalität – das Ausgeben von Zeichenketten und Werten –
ermöglicht, ohne, dass Sie jedes Mal (oder überhaupt) wissen müssen, wie man
Text in der REPL, im Terminal, oder in JupyterLab ausgibt.
Die Idee einer Funktion ist es, mehrere Zeilen Code als eine Einheit
zusammenzustellen und diese über einen Funktionsaufruf wieder ausführen zu
können. Im obigen Beispiel wäre das der if
-Ausdruck. Zusätzlich zum
if
-Ausdruck müssen auch kontostand
und aktuell
korrekt beim
Funktionsaufruf definiert sein.
Um Werte “in die Funktion” zu übermitteln definieren wir sog. Parameter. Um einen Wert aus der Funktion herauszubekommen (zum Beispiel den aktualisierten Kontostand), gibt es einen Rückgabewert.
Das ganze könnte dann so aussehen:
def ausleihe_überprüfen(kontostand, aktuell):
summe = kontostand + aktuell # in einer Funktion können Sie Variablen erstellen um Zwischenergebnisse zu speichern
if summe > 15:
print(f"Sie haben bereits {kontostand} Bücher ausgeliehen.\nWenn Sie {aktuell} Bücher ausleihen würden,\nkämen Sie über die Grenze von 15 Büchern.\n\nSie können aktuell maximal {15 - kontostand} weitere Bücher ausleihen.")
return kontostand # Eine Ausleihe war nicht möglich, es wird der alte Kontostand zurückgegeben.
elif summe >= 10:
print(f"Ihr neuer Kontostand: {summe} Bücher.")
return summe # Die Ausleihe war erfolgreich und der neue Kontostand wird zurückgegeben.
else:
print("Ausleihe erfolgreich.")
return summe # Auch hier war die Ausleihe erfolgreich und es wir der neue Kontostand zurückgegeben.
Die Funktionsdefinition wurde ausgeführt wodurch der Name
ausleihe_überprüfen()
nun verfügbar ist. Ausgegeben wurde jedoch nichts, da
die Funktion noch nicht aufgerufen wurde.
neuer_kontostand = ausleihe_überprüfen(8, 3)
print(neuer_kontostand)
Ihr neuer Kontostand: 11 Bücher.
11