Teil 5: Verzweigungen
Lernziele
- Mit
ifundelseEntscheidungen im Programm treffen- Die Syntax mit Doppelpunkt und Einrückung korrekt schreiben
- Vergleichsoperatoren und logische Operatoren in Bedingungen einsetzen
- Mehrere Fälle mit
elifhintereinander prüfen- Bedingungen mit
and,orundnotverknüpfen wie im Logik-SkriptNeue Befehle und Zeichen:
ifführt den folgenden Block aus, wenn die Bedingung wahr istelseführt den folgenden Block aus, wenn sie falsch istelifprüft eine weitere Bedingung==!=<><=>=vergleichen zwei Werteandornotverknü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 < bkleiner als
a <= bkleiner oder gleich
a > bgrösser als
a >= bgrösser oder gleich
a == bgleich, zwei Zeichen
a != bungleichEin 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 (), Oder () und Nicht (), 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 arbeitetelifPython prüft die Bedingungen von oben nach unten. Sobald eine zutrifft, wird ihr Block ausgeführt und alle weiteren
elif- undelse-Blöcke werden übersprungen.Deshalb ist die Reihenfolge entscheidend: Die schärfste Bedingung gehört nach oben. Stünde
p >= 25zuoberst, bekäme auch eine Punktzahl von 90 die Note genügend.
Aufgaben
Aufgabe 5.1Schreibe ein Programm, das zwei Zahlen einliest und ausgibt, welche grösser ist. Sind beide gleich, soll das Programm das melden.
Aufgabe 5.2Schreibe ein Programm, das den Endpreis eines Produkts berechnet. Kostet das Produkt 100 Franken oder mehr, gibt es 10 Prozent Rabatt.
Aufgabe 5.3Schreibe 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.
Aufgabe 5.4Warum funktioniert dieses Programm nicht wie gewünscht? Es soll bei Zahlen unter 0
negative Zahl, bei Zahlen unter 100kleine Zahlund sonstgrosse Zahlausgeben. Erkläre in eigenen Worten und korrigiere es.
Aufgabe 5.5Schreibe ein Programm, das ein Passwort abfragt. Stimmt es mit
"abcd"überein, ist der Nutzer eingeloggt, sonst nicht.
Aufgabe 5.6Ein 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.
Aufgabe 5.7Schreibe ein Programm, das eine Zahl von 1 bis 7 für den Wochentag einliest. Bei 6 oder 7 soll
Wochenendeerscheinen, sonstSchultag. Liegt die Zahl ausserhalb von 1 bis 7, gib eine Fehlermeldung aus.
Aufgabe 5.8In 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
geradeoderungeradeausgibt.
Aufgabe 5.9Ein Blitzer wertet eine Messung aus. Lies das Tempolimit und die gefahrene Geschwindigkeit ein. Ist die Geschwindigkeit nicht höher als das Limit, gib
in Ordnungaus. Bis 5 km/h darüber gibt es eineVerwarnung, bis 15 km/h darüber eineBusse, darüber eineAnzeige.
Weitere Aufgaben
Zusatzaufgabe 5.10Schreibe 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.
Zusatzaufgabe 5.11Ein 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.
Zusatzaufgabe 5.12Erweitere 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
ifund danach mit einem einzigenifundand. Welche Variante findest du lesbarer?