Quadros Islas Philippinen

Python Entscheidungen



Quellen: A. M. Maier, T. Rauschmaier, G. Kompa, Elektronikschule Tettnang
M. Brenner, J. Schnaiter, "Softwareentwicklung mit Python", ZSL Freiburg, 2024


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.

Ab in den Süden Die Entscheidungsstruktur



Auszug aus Reiseportal

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 verschie­dene 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.

Entscheidungen in Python Syntax



Struktogramm Entscheidung

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

Vergleichsoperatoren Bedingungen auswerten



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 Vergleichs­operatoren 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

Aufgabe 1 Pineingabe

Autoren: G. Kompa, D. Supper

Smartphone Pineingabe
  1. Erstelle ein Programm 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.
  2. Prüfe zuerst, ob die eingegebene Zahl zu groß oder zu klein ist und ermögliche dem Benutzer eine erneute Eingabe.

Verschachtelte Entscheidungen



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 Reise­rücktritts­versicherung und nach einer Gepäck­versicherung 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.

Aufgabe 2 Der Südsee-Urlaub

Autoren: D. Supper | binnendifferenziert

Coron auf den Philippinen
  1. Erstelle ein Struktogramm für das Programm Suedseeurlaub welche den Anwender für einen 600 EUR teuren Flug verschiedene Optionen abfragt: eine SMS-Benachrichtigung kostet 2,95 EUR, eine Reise­rücktritts­versicherung 32 EUR und eine Gepäck­versicherung 13 EUR. Ausgegeben wird der Gesamtpreis. Notiere die Zeitdauer.
  2. Programmiere das Programm 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 Syntax
    if(input("Versicherung (j/n): ") == 'j'): verwenden.


  3. Alternativ wird das Rundum-Sorglos-Paket für 44 EUR angeboten, welches SMS-Benachrichtigung, eine Reise­rücktritts­versicherung und eine Gepäck­versicherung beinhaltet.

    Programmiere eine verschachtelte Entscheidung.


  4. Sollte der Gesamtpreis über 640 EUR liegen beträgt der Rabatt 10 % und ist der Kunde Stammkunde erhält er weitere 5 % Rabatt.

Logische Operatoren Bedingungen verknüpfen



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.

Aufgabe 3 Pineingabe

Autoren: D. Supper | binnendifferenziert

In dieser Aufgabe wird das Arbeiten mit logischen Verknüpfungen trainiert.

logische Operatoren
  1. Schreibe das Programm LogischeVerknuepfung. Dabei sollen zwei ganze Zahlen x, y, deren Summe maximal 100 ist, eingelesen und deren Werte ausgegeben werden.
  2. Ist die Summe der Zahlen größer 100 gibt es 0 Punkte, kleiner 100 20 Punkte.
  3. Sind beide Zahlen jeweils gerade gibt es 40 Punkte.
  4. Ist die Summe der Zahlen kleiner als 50 und eine Zahl ungerade gibt es 70 Punkte.
  5. Für Profis : Ist die Summe der beiden Zahlen eine Primzahl (nur Primzahlen bis 100) gibt es 100 Punkte.

Entspann dich erstmal ...



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."

Backwaren

Aufgabe 4 Welche Aussage ist wahr? - Bedingungen mit Variablen

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)

Werte die Bedingungen aus. Wähle eine Antwort.

  1. beide Bedingungen wahr
  2. Bedingung 2 wahr, Bedingung 1 falsch
  3. Bedingung 1 wahr, Bedingung 2 falsch
  4. beide Bedingungen falsch


a, b = 10, 100
if(a!=0 and not(a<9))
if(a!=0 and not(a<9) or b-a==89)

Werte die Bedingungen aus. Wähle eine Antwort.

  1. Bedingung 1 wahr, Bedingung 2 falsch
  2. beide Bedingungen falsch
  3. Bedingung 2 wahr, Bedingung 1 falsch
  4. beide Bedingungen wahr



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)

Werte die Bedingungen aus. Wähle eine Antwort.

  1. Bedingung 2 wahr, Bedingung 1 falsch
  2. Bedingung 1 wahr, Bedingung 2 falsch
  3. beide Bedingungen wahr
  4. beide Bedingungen falsch


x, y = 2.5, 1.0
if(x>2.4 or y<=1.1)
if(x>2.4 and y<=1.1)

Werte die Bedingungen aus. Wähle eine Antwort.

  1. beide Bedingungen wahr
  2. beide Bedingungen falsch
  3. Bedingung 2 wahr, Bedingung 1 falsch
  4. Bedingung 1 wahr, Bedingung 2 falsch


s1, s2 = 10, -2
if(s1!=0 and not(s2<9))
if(s1!=0 and not(s2<9) or s2==89)

Werte die Bedingungen aus. Wähle eine Antwort.

  1. beide Bedingungen falsch
  2. beide Bedingungen wahr
  3. Bedingung 2 wahr, Bedingung 1 falsch
  4. Bedingung 1 wahr, Bedingung 2 falsch


k, x2 = True, -2
if(k and not(x2>2))
if(k and not(x2>2) or not k)

Werte die Bedingungen aus. Wähle eine Antwort.

  1. beide Bedingungen falsch
  2. beide Bedingungen wahr
  3. Bedingung 2 wahr, Bedingung 1 falsch
  4. Bedingung 1 wahr, Bedingung 2 falsch

Aufgabe 5 Schaltjahre

Autoren: G. Kompa, D. Supper | binnendifferenziert

Uhr im Einkaufszentrum

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:

  • Ist die Jahreszahl durch 4 teilbar, so ist das Jahr ein Schaltjahr. Diese Regel hat allerdings eine Ausnahme:
  • Ist die Jahreszahl durch 100 teilbar, so ist das Jahr kein Schaltjahr. Diese Regel hat allerdings wiederum eine Ausnahme:
  • Ist die Jahreszahl durch 400 teilbar, so ist das Jahr doch ein Schaltjahr.
  1. Erstelle das Programm Schaltjahre, welches berechnet, ob eine vom Benutzer eingegebene Jahreszahl ein Schaltjahr ist oder nicht.
  2. Bestimme Jahre, mit denen du alle drei Regeln prüfen kannst.
  3. Programmiere die Bedingung mit einer einzigen Entscheidung.

    Verwende logische Operatoren.


  1. 3fach-Verschachtelung:
    if(jahr%4 == 0):
       schaltjahr = True
       if(jahr%100 == 0): ...
  2. Schaltjahre Regel 1: 1996, 2004, 2016
    keine Schaltjahre Regel 2: 2100, 1900
    Schaltjahre Regel 3: 2000
  3. if(jahr%4 == 0 and ...)

Aufgabe 6 Body-Mass-Index BMI

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 Einteilungen
  • $BMI < 18,5$: Untergewicht
  • $18,5 \leq BMI < 25$: Normalgewicht
  • $BMI \geq 25$: Übergewicht
  1. Erstelle das Programm BodyMassIndex, welches den BMI einer Person berechnet und entscheidet, ob diese Untergewicht, Übergewicht oder Normalgewicht hat.
  2. Berücksichtige bei der Entscheidung das Alter der Person.

    Die Weltgesundheitsorganisation WHO hat hierfür Standards festgelegt.

  3. Berücksichtige bei der Entscheidung das Geschlecht der Person.
Waage mit Fisch
  1. Nach Eingabe von Körpergröße und Gewicht wird der BMI berechnet und dann entschieden:
    bmi=gewicht/(koerpergroesse*koerpergroesse);
    if(bmi < 18,5){
       ...
  2. Die Tabellen in Abhängigkeit von Alter und Geschlecht wurden auf Basis von durchschnittlichen Messwerten festgelegt, so dass die Implementierung in ein Programm nicht mit einem Algorithmus gelöst, sondern nur mit einer Vielzahl an Entscheidungen gelöst werden kann.

Menüauswahl match - case



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).

Aufgabe 7 Kaffeeautomat

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.

  1. Programmiere den Kaffeeautomat, mit der Variable auswahl.
  2. Berücksichtige bei der Auswahl auch den Wert k oder K.

    case "1" | "k" | "K":

  3. Programmiere einen Fortschrittbalken für die Zubereitung des Getränks.
  4. Bewerte, wieso der BMI-Rechner für eine switch-case-Anwendung ungeeignet ist.
Cappuccino

  1. auswahl = int(input("KAFFEE(1), LATTE MACCHIATO (2),...:))
    match auswahl:
      case 1 :
        print("Kaffee")
      ...

  2. auswahl = input("KAFFEE(1), LATTE MACCHIATO (2),...:)
    match auswahl:
      case "1" | "k" | "K":
        print("Kaffee")
      ...
  3. Importiere das Modul import time und verwende die Funktion time.sleep(0.5) für eine halbe Sekunde Zeitverzögerung.
  4. Der BMI-Rechner ist für eine switch-case-Auswahl ungeeignet, da dort Bereiche überprüft werden.

Wortliste und Satzbausteine



die Ent­schei­dung, -en zu jeder Entschei­dung gehört eine Bedingungs­prüfung if(..). Ist die Bedingung wahr wird der erste Anweisungsblock nach if(..): abgearbeitet, falls nicht der zweite Anweisungsblock nach else:.
die Beding­ung, -en die Bedingung wird mit Hilfe von Vergleichsoperatoren geprüft und ergibt den Wert True oder False
der Ver­gleichs­operator, -en Vergleichsoperatoren sind:   < kleiner als,   > größer als,  <= kleiner gleich,  >= größer gleich,  != ungleich,  == genau gleich
der lo­gi­sche Operator, -en logische Operatoren dienen zum verknüpfen mehrerer Bedingungen:  not nicht,  and und,  or oder
ver­schachteln Entscheidungen können verschachtelt werden. Das ist dann sinnvoll wenn die zweite Entscheidung von der ersten abhängig ist.
die Mehrfach­auswahl, -en Programmierstruktur für ein Menü.