Teil 5: Verzweigungen

Lernziele
  • Mit if und else Entscheidungen im Programm treffen
  • Die Syntax mit Doppelpunkt und Einrückung korrekt schreiben
  • Vergleichsoperatoren und logische Operatoren in Bedingungen einsetzen
  • Mehrere Fälle mit elif hintereinander prüfen
  • Bedingungen mit and, or und not verknüpfen wie im Logik-Skript

Neue Befehle und Zeichen:

  • if führt den folgenden Block aus, wenn die Bedingung wahr ist
  • else führt den folgenden Block aus, wenn sie falsch ist
  • elif prüft eine weitere Bedingung
  • == != < > <= >= vergleichen zwei Werte
  • and or not verknüpfen Bedingungen

Verzweigungen

Bisher lief jedes unserer Programme von oben nach unten durch. Mit einer Verzweigung entscheidet das Programm selbst, welche Zeilen es ausführt.

alter = int(input("Wie alt bist du? "))
if alter < 18:
    print("Zutritt fuer Minderjaehrige verboten")
else:
    print("Zutritt gestattet")

Der Block unter dem if wird ausgeführt, wenn die Bedingung alter < 18 wahr ist. Sonst läuft der Block unter dem else.

Das else ist freiwillig. Ohne else passiert schlicht nichts, wenn die Bedingung falsch ist.

Bedingungen

Eine Bedingung ist ein Ausdruck vom Typ bool, er ergibt also True oder False. Am häufigsten entstehen solche Ausdrücke durch Vergleiche.

Vergleichsoperatoren
  • a < b kleiner als

  • a <= b kleiner oder gleich

  • a > b grösser als

  • a >= b grösser oder gleich

  • a == b gleich, zwei Zeichen

  • a != b ungleich

Ein einzelnes = weist zu, zwei == vergleichen. Das ist die häufigste Fehlerquelle in diesem Kapitel.

Mehrere Bedingungen lassen sich verknüpfen, genau wie im Logik-Skript. Dort hiessen die Verknüpfungen Und (∧\wedge), Oder (∨\vee) und Nicht (¬\neg), in Python heissen sie and, or und not. Es gelten dieselben Wahrheitstabellen: a and b ist nur wahr, wenn beide Bedingungen wahr sind, a or b ist nur falsch, wenn beide falsch sind, und not a kehrt den Wahrheitswert um.

sonnenschein = True
regen = True
schneefall = False

if sonnenschein and (regen or not schneefall):
    print("Hurra")
else:
    print("Schade")

Mehrere Fälle mit elif

Möchte man mehr als zwei Fälle unterscheiden, wird die Verschachtelung schnell unübersichtlich. Dafür gibt es elif.

p = int(input("Punktzahl (0-100): "))
if p >= 75:
    print("sehr gut")
elif p >= 50:
    print("gut")
elif p >= 25:
    print("genuegend")
else:
    print("ungenuegend")
So arbeitet elif

Python prüft die Bedingungen von oben nach unten. Sobald eine zutrifft, wird ihr Block ausgeführt und alle weiteren elif- und else-Blöcke werden übersprungen.

Deshalb ist die Reihenfolge entscheidend: Die schärfste Bedingung gehört nach oben. Stünde p >= 25 zuoberst, bekäme auch eine Punktzahl von 90 die Note genügend.

Aufgaben

Aufgabe 5.1

Schreibe ein Programm, das zwei Zahlen einliest und ausgibt, welche grösser ist. Sind beide gleich, soll das Programm das melden.

PythonLoading editor…
Aufgabe 5.2

Schreibe ein Programm, das den Endpreis eines Produkts berechnet. Kostet das Produkt 100 Franken oder mehr, gibt es 10 Prozent Rabatt.

PythonLoading editor…
Aufgabe 5.3

Schreibe ein Programm, das nach dem Alter fragt und die Person einteilt: Baby von 0 bis 1, Kind von 2 bis 9, Jugendliche von 10 bis 18, Erwachsene von 19 bis 59, Senioren ab 60. Liegt die Zahl ausserhalb von 0 bis 120, soll eine Fehlermeldung erscheinen.

PythonLoading editor…
Aufgabe 5.4

Warum funktioniert dieses Programm nicht wie gewünscht? Es soll bei Zahlen unter 0 negative Zahl, bei Zahlen unter 100 kleine Zahl und sonst grosse Zahl ausgeben. Erkläre in eigenen Worten und korrigiere es.

PythonLoading editor…
x = int(input("Gib eine Zahl ein: "))
if x < 0:
    print("negative Zahl")
if x < 100:
    print("kleine Zahl")
else:
    print("grosse Zahl")
Aufgabe 5.5

Schreibe ein Programm, das ein Passwort abfragt. Stimmt es mit "abcd" überein, ist der Nutzer eingeloggt, sonst nicht.

PythonLoading editor…
Aufgabe 5.6

Ein Laden ist von 8 bis 18 Uhr geöffnet. Schreibe ein Programm, das eine Stunde von 0 bis 23 einliest und ausgibt, ob der Laden offen oder geschlossen ist. Verwende and.

PythonLoading editor…
Aufgabe 5.7

Schreibe ein Programm, das eine Zahl von 1 bis 7 für den Wochentag einliest. Bei 6 oder 7 soll Wochenende erscheinen, sonst Schultag. Liegt die Zahl ausserhalb von 1 bis 7, gib eine Fehlermeldung aus.

PythonLoading editor…
Aufgabe 5.8

In Teil 4 hast du den Rest bei der Division durch 2 berechnet. Jetzt machst du daraus eine echte Entscheidung: Schreibe ein Programm, das eine ganze Zahl einliest und gerade oder ungerade ausgibt.

PythonLoading editor…
Aufgabe 5.9

Ein Blitzer wertet eine Messung aus. Lies das Tempolimit und die gefahrene Geschwindigkeit ein. Ist die Geschwindigkeit nicht höher als das Limit, gib in Ordnung aus. Bis 5 km/h darüber gibt es eine Verwarnung, bis 15 km/h darüber eine Busse, darüber eine Anzeige.

PythonLoading editor…

Weitere Aufgaben

Zusatzaufgabe 5.10

Schreibe ein Programm, das eine Zahl einliest und ausgibt, ob sie durch 3, durch 5, durch beide oder durch keine von beiden teilbar ist. Verwende % aus Teil 4.

PythonLoading editor…
Zusatzaufgabe 5.11

Ein Jahr ist ein Schaltjahr, wenn es durch 4 teilbar ist, aber nicht durch 100, oder wenn es durch 400 teilbar ist. Schreibe ein Programm, das das prüft. Teste es mit 2024, 1900 und 2000.

PythonLoading editor…
Zusatzaufgabe 5.12

Erweitere das Login-Programm: Erst wird das Passwort geprüft, danach das Alter. Nur wer beides besteht, bekommt Zutritt. Bei falschem Passwort soll eine eigene Meldung erscheinen. Löse die Aufgabe zuerst mit verschachtelten if und danach mit einem einzigen if und and. Welche Variante findest du lesbarer?

PythonLoading editor…