**Dies ist eine alte Version des Dokuments!**
Booleans & Logik
Wir haben bereits gesehen, wie wir mit dem Schlüsselwort not eine Aussage in ihr Gegenteil verkehren können:
while not kara.treeFront(): kara.move()
Die Funktion kara.treeFront() gibt einen Wahrheitswert zurück: Entweder wahr oder falsch, in Python True oder False. Kara soll solange weiterlaufen, als kein Baum vor ihr steht. Mit not verwandeln wir den Wert von treeFront() in ihr Gegenteil.
In der Informatik nennen wir einen Wahrheitswert auch Boolean. Das Wissenschaftsgebiet der Aussagenlogik beschäftigt sich mit der Verknüpfung von mehreren Booleans zu einem neuen Wert.
Konjunktion (Und-Verknüpfung)
Betrachte folgendes Beispiel: Kara soll immer dann ein neues Blatt legen, wenn noch keins vorhanden ist und rechts von ihr ein Baum steht:
Merke:
- mit dem Schlüsselwort
andkönnen zwei Booleans verknüpft werden. Das Resultat ist nur dannTrue, wenn beide OperandenTruesind, sonstFalse. - Eine Und-Verknüpfung heisst Konjunktion.
- mit
kara.treeRight()undkara.treeLeft()können wir Bäume neben Kara feststellen. notbindet enger alsand: dasnot kara.onLeaf()negiert nur die Blatt-Bedingung, nicht den ganzenand-Ausdruck.
Aufgabe D1: Tunnel markieren
Hilf Kara, den Tunnel zu markieren. Schreibe Python-Code wie folgt:
- Kara wiederholt folgende Schritte, solange sie nicht vor einem Baum steht:
- wenn links und rechts einen Baum sieht
- legt sie ein Blatt
- dann geht sie einen Schritt
Wie lang ist der Tunnel?
Disjunktion (Oder-Verknüpfung)
Wir können auch zwei Booleans so verknüpfen, dass das Resultat True ist, wenn mindestens einer der beiden True ist. Das Schlüsselwort dazu heiss or (oder), die Operation heisst Disjunktion.
Aufgabe D2: Tunnelräumung
Schreibe Code, der immer dann ein Blatt entfernt, wenn links oder rechts von Kara ein Baum steht. Stoppe, wenn du einen Baum vor dir hast.
Präzedenz (Operatorrangfolge)
In der Mathematik gilt Punkt-vor-Strich - bei Boolean-Verknüpfungen gilt ebenfalls eine Rangfolge:
- Negierung (
not) - Konjunktion (
and) - Disjunktion (
or)
Im Beispiel:
- beim ersten Blatt dreht Kara links (die erste Hälfte der Disjunktion ist wahr: beide Bedingungen
kara.onLeaf() and not kara.treeLeft()sind wahr). - beim Pilz dreht Kara ebenso links (die zweite Hälftet der Disjunktion ist wahr:
kara.mushroomFront()). - beim zweiten Blatt dreht Kara nicht:
kara.mushroomFront()ist falschkara.onLeaf()ist wahr, abernot kara.treeLeft()ist falsch, damit ist die Konjunktion falsch, damit ist auch die Disjunktion falsch.
Mit Klammern verdeutlicht:
(kara.onLeaf() and (not kara.treeLeft())) or kara.mushroomFront()
Aufgabe D3: Logisch
Betrachte folgenden Code und Karas Welt! Auf welchem Feld wird Kara am Ende des Programms sein?
while not kara.treeFront(): if kara.onLeaf() and kara.treeRight(): kara.turnLeft() if kara.onLeaf() and kara.mushroomFront(): kara.turnLeft() kara.turnLeft() if kara.mushroomFront() or kara.treeLeft(): kara.turnRight() kara.move()
Aufgabe D4: Blätter um die Bäume
Schreibe Python-Code, wie folgt:
- Kara macht die folgenden Schritte, solange kein Pilz vor ihr steht:
- wenn links oder rechts ein Baum steht und kein Blatt vorhanden ist:
- dann legt sie eins hin.
- wenn ein Baum vor ihr ist,
- so wendet dreht sie einmal nach rechts.
- andernfalls: geht sie einen Schritt weiter