Ab in den Süden! Möchtest Du auf die Philippinen fliegen, Ja oder Nein? Viele Fragen fordern eine Entscheidung an deren Ende es zwei Möglichkeiten gibt.
In diesem Artikel lernst Du die Struktur von Entscheidungen in Python kennen. Wir beschäftigen uns mit relationalen und logischen Operatoren zur Auswertung von Bedingungen. Außerdem lernst du verschachtelte Entscheidungen und eine Menüauswahl kennen.
Möchtest Du auf die Philippinen fliegen, Ja oder Nein? Willst Du Fluginformationen per SMS, Ja oder Nein?
Manche Entscheidungen im Leben sind einfach, manche bedeutungsvoll. Schreibe verschiedene Entscheidungen auf und markiere diejenigen, welche mit einer Ja-Nein-Entscheidung zu treffen sind. Kann man die anderen Entscheidungen auch auf eine Ja-Nein-Entscheidung zurückführen?
In einem Bewerbungsgespräch wirst Du gefragt, ob Du eher Anführer oder Ausführer bist. Viele glauben nun mit "Anführer" antworten zu müssen, aber besser wäre vielleicht eine dritte Variante in welcher man erklärt, wann man ein Anführer ist und wann eben nicht.
In der Programmierung ist es einfacher. Es gibt nur Entscheidungen die mit Ja oder Nein zu beantworten sind. Das ermöglicht überhaupt erst die notwendige Struktur.
Eine Entscheidung, auch Verzweigung (engl. if/else statement, conditional statement) beginnt mit der Prüfung einer Bedingung. Falls die Bedingung erfüllt ist, wird der Ja-Zweig abgearbeitet, sonst der Nein-Zweig. In der Programmiersprache wird dies folgendermaßen programmiert:
if auswahl == 'j':
kostensms = 2.90
else:
kostensms = 0
<
kleiner als
>
größer als
<=
kleiner gleich
>=
größer gleich
!=
ungleich
==
genau gleich
Zur Formulierung von Vergleichen benötigt man Vergleichsoperatoren. Das Ergebnis eines Vergleichs (z.B. x > y) lautet entweder ja oder nein, bzw. wahr (true) oder falsch (false). Intern stellt Python den Wahrheitswert mit dem Datentyp boolean
durch den Wert True
und False
dar. In der Programmiersprache Python werden bspw. alle Zahlenwert die ungleich 0 sind als wahr interpretiert. Alle möglichen Vergleichsoperatoren werden in der Grafik gezeigt.
Wichtig: Verwechsele den Vergleichsoperator ==
nicht mit der Zuweisung =
.
Bedingung: x == 0
Zuweisung: x = 1
Beachte: Die Prüfung der Bedingung liefert immer einen Wert vom Datentyp bool
. Verwendet man in der Bedingung eine Variable vom Datentyp bool
kann man auf den Vergleich verzichten.
versicherung = True
if versicherung:
kosten = 7.90
Autoren: G. Kompa, D. Supper
Pineingabe
welches den Anwender auffordert eine 4stellige Pin einzugeben. Anschließend überprüfe den eingegebenen PIN und gebe dem Benutzer eine Rückmeldung, ob der PIN richtig oder falsch ist.
zahl_input = int(input("Gib eine Zahl von 1-10 ein!"))
if zahl_input == 4:
print("Du hast gewonnen!")
else:
if zahl_input == 5 or zahl_input == 3:
print("Knapp daneben!")
else:
print("Du hast verloren!")
Auch eine verschachtelte Entscheidung ist möglich. Hierbei wird mindestens ein Anweisungsblock durch eine weiter Entscheidung ergänzt.
Dies ist bei mehrstufigen Entscheidungen sinnvoll. Möchte der Kunde bspw. eine Versicherung buchen, kann anschließend nach Reiserücktrittsversicherung und nach einer Gepäckversicherung gefragt werden.
Hinweis: Es gibt auch elif
-Entscheidungsstrukturen. Man verwendet sie wenn mehrere Entscheidungen mit gleicher Priorität geprüft werden. Ein Nachteil ist allerdings, das deren Lesbarkeit u.U. nicht ganz so gut ist.
Autoren: D. Supper | binnendifferenziert
Suedseeurlaub
welche den Anwender für einen 600 EUR teuren Flug verschiedene Optionen abfragt: eine SMS-Benachrichtigung kostet 2,95 EUR, eine Reiserücktrittsversicherung 32 EUR und eine Gepäckversicherung 13 EUR. Ausgegeben wird der Gesamtpreis. Notiere die Zeitdauer.Suedseeurlaub
. Erstelle hierzu ein neues Notebook 02-Entscheidungen.ipynb
.Zum Auswerten einer j/n-Abfrage benötigt man folgende Syntax:
auswahl = input("Versicherung (j/n): ")
if(auswahl == 'j'):
...
Wer es ganz kompakt mag, kann auch die Syntaxif(input("Versicherung (j/n): ") == 'j'):
verwenden.
Programmiere eine verschachtelte Entscheidung.
not
nicht
and
und
or
oder
Logische Operatoren können mehrere Vergleiche miteinander verknüpfen.
Beispiel: „Wenn Entschädigung und Flugdatenänderung per SMS gewünscht wird, betragen die Kosten 11,90 EUR.“
if(sms == True and entsch == True): kosten = 11.9;
Dabei hat der nicht-Operator den höchsten Vorrang, gefolgt von dem und-Operator. Der oder-Operator hat den niedrigsten Vorrang. Falls eine andere Gewichtung gewünscht ist kann man dies durch Klammersetzung erreichen.
Autoren: D. Supper | binnendifferenziert
In dieser Aufgabe wird das Arbeiten mit logischen Verknüpfungen trainiert.
LogischeVerknuepfung
. Dabei sollen zwei ganze Zahlen x
, y
, deren Summe maximal 100 ist, eingelesen und deren Werte ausgegeben werden.Ein Informatiker und seine Frau sitzen beim Frühstück: Sie: "Du Mausi, wir haben kein Brot mehr. Könntest du bitte zum Bäcker gehen und eins holen? Und falls sie Eier haben, bring 10 Stück mit."
Als er wieder zurück kommt hat er 10 Brote dabei. Sagt sie: "Warum nur hast du 10 Brote gekauft?" Er: "Sie hatten Eier."
Wähle die korrekten Aussagen aus.
v, w = 10, 100
if(v!=0 or v>w)
if(v!=0 or v>w or w-v==90)
a, b = 10, 100
if(a!=0 and not(a<9))
if(a!=0 and not(a<9) or b-a==89)
n, m = 1, 17
if(m>0 or n>m and m!=17)
if(n>0 and m>0 or n>m and m!=17)
x, y = 2.5, 1.0
if(x>2.4 or y<=1.1)
if(x>2.4 and y<=1.1)
s1, s2 = 10, -2
if(s1!=0 and not(s2<9))
if(s1!=0 and not(s2<9) or s2==89)
k, x2 = True, -2
if(k and not(x2>2))
if(k and not(x2>2) or not k)
Autoren: G. Kompa, D. Supper | binnendifferenziert
In unserem Kalender sind zum Ausgleich der Jahreslänge in regelmäßigen Abständen Schaltjahre eingebaut. Ein astronomisches Jahr hat dabei 365,24219 Kalendertage. Zur exakten Festlegung der Schaltjahre dienen folgende Regeln:
Schaltjahre
, welches berechnet, ob eine vom Benutzer eingegebene Jahreszahl ein Schaltjahr ist oder nicht.Verwende logische Operatoren.
if(jahr%4 == 0):
schaltjahr = True
if(jahr%100 == 0): ...
if(jahr%4 == 0 and ...)
Autoren: D. Supper | binnendifferenziert
Der Body-Mass-Index, kurz BMI, ist eine Gewichtsklassifikation, welche unser Gewicht $m$ (in kg) in ein Verhältnis zur Körpergröße $h$ (in m) setzt:
$$BMI=\frac{m}{h^2}$$ Dabei gelten folgende EinteilungenBodyMassIndex
, welches den BMI einer Person berechnet und entscheidet, ob diese Untergewicht, Übergewicht oder Normalgewicht hat.Die Weltgesundheitsorganisation WHO hat hierfür Standards festgelegt.
bmi=gewicht/(koerpergroesse*koerpergroesse);
if(bmi < 18,5){
...
auswahl = int(input(f"Coke(1) Alwa(2)"))
match auswahl:
case 1:
print("Coke Zero")
case 2:
print("Alwa Wasser")
case _: #default value
print("ungültig")
Wie in fast allen anderen Programmiersprachen gibt es in Python eine Mehrfachverzweigung mit match-case. Man könnte dies auch mit Hilfe von if-elif-elif..else
realisieren, was allerdings nicht sehr elegant ist.
Neben der Auswahl mit Ganzzahlen oder Strings kann man in Python auch anspruchsvolle Anwendungen mit "pattern matching" programmieren.
Eine Mehrfachauswahl kann man in Python auch mithilfe von Dictonaries implementieren. Diese werden wir zu einem späteren Zeitpunkt behandeln. Sie bestehen aus Paaren von Schlüssel (key) und Wert (value).
Autoren: D. Supper | binnendifferenziert
Zur Auswahl stehen KAFFEE (1), LATTE MACCHIATO (2), CAPPUCCINO (3), ESPRESSO (4) und Mokka(5). Die Aufgabe besteht darin, das Auswahlmenü des Kaffeeautomaten zu programmieren.
Kaffeeautomat
, mit der Variable auswahl
.case "1" | "k" | "K":
auswahl = int(input("KAFFEE(1), LATTE MACCHIATO (2),...:))
match auswahl:
case 1 :
print("Kaffee")
...
auswahl = input("KAFFEE(1), LATTE MACCHIATO (2),...:)
match auswahl:
case "1" | "k" | "K":
print("Kaffee")
...
import time
und verwende die Funktion time.sleep(0.5)
für eine halbe Sekunde Zeitverzögerung.die Entscheidung, -en | zu jeder Entscheidung gehört eine Bedingungsprüfung if(..) . Ist die Bedingung wahr wird der erste Anweisungsblock nach if(..): abgearbeitet, falls nicht der zweite Anweisungsblock nach else: . |
die Bedingung, -en | die Bedingung wird mit Hilfe von Vergleichsoperatoren geprüft und ergibt den Wert True oder False |
der Vergleichsoperator, -en | Vergleichsoperatoren sind:
< kleiner als, > größer als, <= kleiner gleich, >= größer gleich, != ungleich, == genau gleich |
der logische Operator, -en | logische Operatoren dienen zum verknüpfen mehrerer Bedingungen: not nicht, and und, or oder |
verschachteln | Entscheidungen können verschachtelt werden. Das ist dann sinnvoll wenn die zweite Entscheidung von der ersten abhängig ist. |
die Mehrfachauswahl, -en | Programmierstruktur für ein Menü. |