Vorfahrtsregeln
In der Mathematik gilt „Punkt vor Strich". Bei logischen Verknüpfungen gibt es ebenfalls Vorfahrtsregeln:
notbindet am stärksten – es geht immer vor.- Danach gilt
andvoror. - Klammern kannst du wie in mathematischen Termen verwenden. Sie haben immer Vorrang.
Ein Beispiel:
not True and False or True
wird von Python gelesen als
((not True) and False) or True
Aufgabe 1: Werte bestimmen
Ermittle zuerst selbst, welchen Wert die folgenden Ausdrücke jeweils haben. Notiere deine Ergebnisse hinter den Kommentaren.
Kontrolliere sie danach mit Python.
Tipp: Schrittweise auflösen
Gehe wie beim Rechnen vor und ersetze immer den innersten bzw. am stärksten bindenden Teil:
not True and False
(not True) and False
False and False
False
| Ausdruck | wird gelesen als | Ergebnis |
|---|---|---|
not True and False |
(not True) and False |
False |
not (True and False) |
not (False) |
True |
not False or not True |
(not False) or (not True) |
True |
False and True or False |
(False and True) or False |
False |
False and (True or False) |
False and True |
False |
not False and (True or False) |
True and True |
True |
Beachte die ersten beiden Zeilen: Die Klammer ändert das Ergebnis komplett.
Aufgabe 2: Das Eis-Programm reparieren
In der letzten Lektion ist dir vielleicht schon aufgefallen, dass mit dem Eis-Programm etwas nicht stimmt.
a) Setze im Programm unten mehr_als_zehn_euro = True und probiere alle Kombinationen der beiden anderen Variablen durch. Was stellst du fest?
b) Erkläre mithilfe der Vorfahrtsregeln, warum das so ist.
c) Setze eine Klammer so, dass die Regel lautet: „Es gibt Eis, wenn nicht Montag ist und außerdem entweder die Sonne scheint oder ich mehr als zehn Euro dabeihabe."
Tipp zu b)
Weil and vor or geht, liest Python die Zeile so:
((not heute_ist_montag) and die_sonne_scheint) or mehr_als_zehn_euro
Bei einem or reicht eine wahre Seite. Ist also mehr_als_zehn_euro wahr, ist das Gesamtergebnis wahr – der Rest der Bedingung spielt keine Rolle mehr.
eis_essen = not heute_ist_montag and (die_sonne_scheint or mehr_als_zehn_euro)
Jetzt muss zuerst der Montag ausgeschlossen sein. Erst dann entscheidet die Klammer darüber, ob es Eis gibt.
Aufgabe 3: Eine Bedingung in Worte fassen
Beschreibe in einem Satz, wann die folgende Bedingung wahr ist:
not (regen or schnee) and temperatur > 15
Formuliere anschließend eine Bedingung für: „Der Ausflug findet statt, wenn es weder regnet noch schneit und wenn entweder der Bus fährt oder genug Fahrräder da sind."
Auflösung zum ersten Teil
Die Bedingung ist wahr, wenn es weder regnet noch schneit und die Temperatur gleichzeitig über 15 Grad liegt.
Auflösung zum zweiten Teil
ausflug = not (regen or schnee) and (bus_faehrt or genug_fahrraeder)
Beide Klammern sind nötig: die erste, damit sich das not auf beides bezieht, die zweite, damit sich das or nicht über das and hinweg durchsetzt.
Ein Tipp aus der Praxis: Auch erfahrene Programmiererinnen und Programmierer setzen häufig Klammern, obwohl die Vorfahrtsregeln sie nicht erzwingen.
Der Grund ist nicht, dass sie die Regeln nicht kennen – sondern dass Klammern die Absicht sichtbar machen. Wer den Code später liest, muss dann nicht raten.