Entscheiden wir uns zwischen zwei Alternativen
Beim bekannten Spiel MenschÄrgereDichNicht kommt ein Mitspieler häufig in die Situation, eine SECHS würfeln zu müssen. Wenn dann die gwünschte Seite oben liegt, freut man sich. Erscheint dagegen keine SECHS, ärgert man sich.
Das kann graphisch in einem sog. ProgrammAblaufPlan (PAP) dargestellt werden:
Eine zweiseitige Fallunterscheidung besteht aus einer Bedingung und zwei Anweisungsblöcken:
- eine Block für den Fall, dass die Bedingung erfüllt ist,
- ein weiterer Block für den Fall, dass die Bedingung nicht erfüllt ist
In Python gibt es dazu die folgende Syntax:
if [Bedingung]:
[Anweisungsblock für den "Ja"-Fall]
else:
[Anweisungsblock für den "Nein"-Fall]
Das obige Beispiel kann dann in ein Python-Programm umgesetzt werden:
from random import *
wurf = randint (1,6)
if wurf == 6:
print("Hurra, ich habe eine 6 gewürfelt!")
else:
print("Mist! Ich habe leider eine", wurf, "gewürfelt.")
Dringend zu beachten!
- Am Ende der Zeile mit der Bedingung steht ein Doppelpunkt :
Also
if bedingung: - Die beiden Anweisungsblöcke können aus einer oder aus mehreren Anweisungen, also einer Anweisungsfolge bestehen.
- Die beiden Anweisungsblöcke müssen immer eingerückt werden. Die Einrückungstiefe muss innerhalb des Blocks konstant sein!
Die Qual der Wahl zwischen mehreren Möglichkeiten
Bei einigen Algorithmen hat man mehr als zwei mögliche Fälle zu unterscheiden. Du kennst vielleicht den sog. BodyMassIndex (BMI), mit dem man anhand von Größe und Gewicht einer Person grob unterscheiden kann, ob jemand unter-, normal- oder übergewichtig ist.
Der BMI berechnet sich in der einfachsten Variante als
wobei m das Gewicht (Kilogramm) und l die Körpergröße (in Meter) angegeben.
Hat man also z.B. eine Person, die bei einer Körpergröße von 1.75 m ein gewicht von 75 kg hat, dann ist der BMI ungefähr 24.5
Und jetzt zur Interpretation in einer sehr vereinfachten Variante.
- Viele Studien haben heute gewisse Vorbehalte gegen die Aussagekraft des BMI
- In der Praxis werden weitere Faktoren wie das Geschlecht und das Alter der Person berücksichtigt.
Dazu kann man die folgende Tabelle benutzen:
BMI | Status |
unter 18.5 | Untergewicht |
zwischen 18.5 und 24.9 | Normalgewicht |
über 24.9 | Übergesicht |
Der Algorithmus, der den Status ausgeben soll, könnte dann umgangssprachlich formuliert werden:
wenn der BMI kleiner ist als 18.5
dann schreibe "Untergewicht"
sonst wenn der BMI kleiner ist als 24.9
dann schreibe "Normalgewicht"
sonst
schreibe "Übergewicht"
Der PAP für den BMI-Algorithmus:
Natürlich können auch mehr als drei Fälle zu unterscheiden sein. Die allgemeine Python-Syntax für eine Fallunterscheidung mit mehreren Fällen hat dann die folgende Form:
if [Bedingung1]:
Anweisungsblock1
elif [Bedingung 2]:
Anweisungsblock2
elif [Bedingung3]:
Anweisungsblock3
....
else:
Anweisungsblock falls keine der Bedingungen zutrifft
Das Python-Programm für den BMI (wie oben beschrieben):
gew = float(input ("Gewicht in kg: "))
gro = float(input ("Körpergröße in m: "))
bmi = gew / (gro**2)
print("Der BMI ist", bmi)
if bmi < 18.5:
print("Untergewicht")
elif bmi < 24.9:
print("Normalgewicht")
else:
print("Übergewicht")
Entweder ... oder nix
In der Schulbibliothek darf man sich maximal 3 Bücher gleichzeitig ausleihen. Ein Ausschnitt des Ausleihprogramms:
anzahl = int(input("Wie viele Bücher möchtest du ausleihen? "))
if anzahl > 3:
anzahl = 3
print("Du darfst nur maximal 3 Bücher ausleihen")
print("Du kannst jetzt", anzahl, "Bücher ausleihen!")
# Hier geht das Programm weiter.
Eine bedingte Anweisung ist ein Programmblock, der nur ausgeführt wird, wenn eine Bedingung erfüllt ist.
Eine solche bedingte Anweisung kann man sich auch vorstellen als zweiseitige Fallunterscheidung, bei der im Sonst-Fall keine Aktion erfolgt. Dadurch erklärt sich auch der seltsame Name Einseitige Fallunterscheidung, obwohl es ja tatsächlich keinen wirklichen zweiten Fall gibt, der zu einer Aktion führt.
Man könnte sich dabei zwei mögliche Programmablaufpläne vorstellen:
Einseitig simuliert mit zweiseitiger Fallunterscheidung | Bedingte Anweisung |