Alternative Kontrollstrukturen
https://oer-informatik.de/python_alternative_kontrollstrukturen
tl/dr; (ca. 12 min Lesezeit): Wer die Wahl hat, hat die Qual: mit den alternativen Kontrollstrukturen (If-Statements) halten die Suites (Einrückungen) erstmals Einzug in Python. Und die Enttäuschung, weil Mehrfachauswahlen in Python recht umständlich realisiert werden müssen.
Bedingte Anweisungen
In bedingten Anweisungen wird überprüft, ob ein Ausdruck (expression) als True
ausgewertet wird. Nur wenn diese Bedingung zutrifft, wird der Code in der eingerückten Suite (Codeblock) ausgeführt:
temperatur = int(input("Wie warm ist es (in Grad Celsius)?"))
if temperatur > 20:
print("Auf in's Freibad!") # wird nur ausgeführt, wenn Bedingung zutrifft)
print("Danke für die Info!") # wird in jedem Fall ausgeführt
Neben der Suite, die ausgeführt wird, wenn die Bedingung zutrifft, gibt es auch noch einen Bereich, der nur dann ausgeführt wird, wenn die Bedingung nicht zutrifft (else
):
if temperatur > 20:
print("Auf in's Freibad!") # wird nur ausgeführt, wenn Bedingung zutrifft)
else:
print("Schade, nicht warm genug.") # wird inur ausgeführt, wenn Bedingung nicht zutrifft.
print("Danke für die Info!") # wird in jedem Fall ausgeführt
Zwischen mehr als zwei Alternativen wählen zu können, muss man in Python ein if/elif/else
- Konstrukt wählen. Anders als in anderen Programmiersprachen gibt es hier kein switch/case:
if temperatur > 20:
print("Auf in's Freibad!") # wird nur ausgeführt, wenn Bedingung zutrifft)
elif temperatur <0:
print("Wie wäre es mit Ski fahren?") # wird nur ausgeführt, wenn die erste Bedingung nicht, die zweite aber schon zutrifft.
else:
print("Schade, nicht warm genug.") # wird inur ausgeführt, wenn Bedingung nicht zutrifft.
print("Danke für die Info!") # wird in jedem Fall ausgeführt
Hierbei ist zu beachten, dass immer nur eine Suite ausgeführt wird: trifft die erste Bedingung zu, so wird nur die zugehörige Suite ausgeführt - alle weiteren Bedingungen werden ignoriert. Als Beispiel:
if temperatur > 20:
print("warm") # wird nur ausgeführt, wenn Bedingung zutrifft)
elif temperatur >25:
print("sehr warm") # wird nur ausgeführt, wenn die erste Bedingung nicht, die zweite aber schon zutrifft.
else:
print("oder?") # wird nur ausgeführt, wenn Bedingung nicht zutrifft.
print("!") # wird in jedem Fall ausgeführt
Auch wenn sich die Bedingungen temperatur > 20
und temperatur >25
überschneiden: bei einer Temperatur von 26 wird lediglich der erste Block ausgeführt.
Kein switch/case in Python
Mehrfachauswahlen lassen sich in Python nicht - wie in anderen Programmiersprachen - mit switch/case
umsetzen. Statt dessen müssen if/elif/else
-Konstrukte erstellt werden:
Diejenigen, die noch das Kinderbuch “Das Sams” kennen, wissen, dass Herr Taschenbier an den Wochentagen immer auf bestimmte Ereignisse gewartet hat. Worauf er wartet lässt sich beispielsweise so ausdrücken:
In Python sind so Ausdrücke leider immer etwas unübersichtlich. Da hier jeweils nur eine Operation in jeder Suite aufgerufen wird, könnte der Zeilenumbruch nach dem Doppelpunkt auch weggelassen werden. Darunter würde aber die Lesbarkeit noch weiter leiden.
tag = input("Welcher Wochentag ist heute")
if (tag == "Sonntag"):
print("Die Sonne scheint!")
elif(tag == "Montag"):
print("Herr Mon kommt!")
elif (tag == "Dienstag"):
print("Ich habe Dienst!")
elif (tag == "Mittwoch"):
print("Es ist Mitte der Woche!")
elif (tag == "Donnerstag"):
print("Es donnert!")
elif (tag == "Freitag"):
print("Ich habe Frei!")
elif (tag == "Samstag"):
print("Das Sams kommt!")
else:
print("Das ist gar kein Tag...")
Kurzschreibweise:
Python bietet die Möglichkeit, bei Wertzuweisungen eine Kurzform zu verwenden. Hierbei weicht die Reihenfolge der Operanden und Operatoren leicht von den obigen Beispielen ab: zuerst wird der Wert bei zutreffender Bedingung genannt.
WERT_WENN_TRUE if BEDINGUNG else WERT_WENN_FALSE
Als Beispiel wird hier die Zeichenkette “gerade” bei allen durch zwei restlos teilbaren Ganzzahlen zugewiesen, andernfalls “ungerade”:
Fazit
Drei wichtige Take-Home-Messages gibt es als Besonderheit bei bedingten Anweisungen in Python:
Codeblöcke werden per Einrückung als sogenannte Suites gebildet.
Weitere bedingte Verzweigungen werden (aus unerfindlichen Gründen) mit
elif
eingeleitet - es gibt also keineswitch/case
-Konstrukte.Es gibt eine Kurzschreibweise (
s = 'gerade' if n%2==0 else 'ungerade'
), die Platz spart aber gewöhnungsbedürftig ist. Möge jede/r selbst entscheiden, ob es zur Wartbarkeit des Codes beiträgt.
Den Kontrollfluss kann man neben den alternativen Verzweigungen auch mit Wiederholungsstrukturen steuern. Mehr dazu im folgenden Text zu Schleifen (wiederholende Kontrollstrukturen).
Quellen und offene Ressourcen (OER)
Die Ursprungstexte (als Markdown), Grafiken und zugrunde liegende Diagrammquelltexte finden sich (soweit möglich in weiterbearbeitbarer Form) in folgendem git-Repository:
https://oer-informatik.gitlab.io/python-basics/erste-schritte-mit-python.
Sofern nicht explizit anderweitig angegeben sind sie zur Nutzung als Open Education Resource (OER) unter Namensnennung (H. Stein, oer-informatik.de) freigegeben gemäß der Creative Commons Namensnennung 4.0 International Lizenz (CC BY 4.0).
Hinweis zur Nachnutzung
Dieses Werk und dessen Inhalte sind - sofern nicht anders angegeben - lizenziert unter CC BY 4.0. Nennung gemäß TULLU-Regel bitte wie folgt: “Erste Schritte mit Python” von Hannes Stein, Lizenz: CC BY 4.0. Die Quellen dieses Werks sind verfügbar auf GitLab.