Arbeiten mit Wahrheitswerten
Ein Wahrheitswert (auch boolean oder bool, abgeleitet von George Boole) ist ein weiterer essentieller Datentyp in Programmiersprachen. Ein Wahrheitsheitswert kann nur die Werte True oder False annehmen.
Logische Operationen
Logische Operationen dienen dazu boolsche Variablen oder Literale miteinander zu verknüpfen und den Wahrheitswert dieser Verknüpfung zu ermitteln. Die Regeln für logische Operationen werden durch die Aussagenlogik definiert. In Python sind die logischen Operatoren not, and und or definiert. Die Bedeutung der Operatoren ist über Wahrheitstabellen definiert.
Negation (not)
Die Negation invertiert den Wahrheitswert. So wird durch die Anwendung des not Operators aus False True und aus True False. Die Negation wird genau auf einen Operanden angewandt und ist somit eine unäre Operation. Die Wahrheitstabelle des Operators sieht folgendermaßen aus:
| A | not A |
|---|---|
| True | False |
| False | True |
In Python kommt der not Operator durch das voranstellen an eine Variable oder ein Literal zur Anwendung:
a = not True # False
b = not a # True
Konjunktion (and)
Die Konjunktion ist eine binäre Operation und ist genau dann wahr, wenn beide Operanden ebenfalls wahr sind. In Python wird die Konjunktion über den and Operator abgewickelt. Die Wahrheitstabelle des Operators sieht folgendermaßen aus:
| A | B | A and B |
|---|---|---|
| True | True | True |
| True | False | False |
| False | True | False |
| False | False | False |
Im folgenden Python Code werden Beispiele für die Anwendung des and Operators gezeigt:
a = True
b = False
c = a and b # False
d = a and not b # True
Disjunktion (or)
Die Disjunktion ist analog zur Konjunktion eine binäre Operation, welche wahr ist, falls zumindest einer der Operanden auch wahr ist. In Python wird die Konjunktion über den or Operator abgewickelt. Die Wahrheitstabelle des Operators sieht folgendermaßen aus:
| A | B | A or B |
|---|---|---|
| True | True | True |
| True | False | True |
| False | True | True |
| False | False | False |
Im folgenden Python Code werden Beispiele für die Anwendung des or Operators gezeigt:
a = True
b = False
c = a or b # True
d = a and b or a # True
Rangfolge logischer Operatoren
Auch für die logischen Operatoren ist eine Rangfolge definiert. Die höchste Rangfolge hat der not Operator, darauf folgt der and Operator und der letzte Rang ist für den or Operator definiert. Beispielsweise würde folgender logischer Ausdruck wahr sein:
False and False or True # True
Der Grund dafür liegt darin, dass die Konjunktion zuerst ausgeführt wird und False ergibt. Die folgende Disjunktion False or True resultiert in True. Wäre die Rangfolge umgekehrt, würde der logische Ausdruck False ergeben. Überlegen Sie warum?
Verständnisfrage
Eine weitere wichtiger logischer Operator ist die sog. Kontravalenz oder exklusives Oder. Anders als bei der Disjunktion ist dieser Operator wahr, wenn entweder A oder B wahr ist, aber nicht wenn beide wahr sind:
| A | B | A xor B |
|---|---|---|
| True | True | False |
| True | False | True |
| False | True | True |
| False | False | False |
Es gibt in Python keinen expliziten xor Operator. Überlegen Sie wie and, or oder not kombiniert werden können um eine xor Operation zu erhalten?
Vergleichsoperationen
Unter anderem für Kontrollstrukturen sind Vergleichsoperationen essentiell wichtig, um den Ablauf in Programmen zu steuern. Vergleichsoperationen resultieren, ähnliche wie logische Operationen, immer in einem Wahrheitswert. In der folgenden Tabelle finden sich die wichtigsten Vergleichsoperationen mit Beispielen:
| Operator | Bezeichnung | Beispiel | Ergebnis |
|---|---|---|---|
== |
Gleichheit | 10 == 1010 == 11 |
TrueFalse |
!= |
Ungleichheit | 55 != 3010 != 10 |
TrueFalse |
< |
Kleiner | 10 < 1120 < 10 |
TrueFalse |
> |
Größer | 10 > 1120 > 10 |
FalseTrue |
<= |
Kleinergleich | 9 <= 1010 <= 1011 <= 10 |
TrueTrueFalse |
>= |
Größergleich | 9 >= 1010 >= 1011 >= 10 |
FalseTrueTrue |
In der Tabelle wurden ausschließlich Beispiele mit Zahlen verwendet um die Bedeutung der Operatoren zu veranschaulichen. Für andere Datentypen wie Strings oder Wahrheitswerte sind die Operatoren ebenfalls definiert. Im folgenden Quellcodeabschnitt sind Beispiele für Vergleiche mit Strings und Wahrheitswerten angegeben:
"abc" == "abc" # True
"abc" != "xyz" # True
False == False # True
False != True # True
Verständnisfrage
Die Operatoren <, >, <= und >= sind auch für Strings und Wahrheitswerte definiert. Können Sie herausfinden wie in der Programmiersprache Python entschieden wird, dass die Operation "abc" < "xyz" als True evaluiert wird? Überlegen Sie auch ein ähnliches Beipiel für Wahrheitswerte.
Kombinationen mit logischen Operationen
Um komplexe Vergleiche durchzuführen reichen einzelne Vergleichsoperationen meist nicht. Vergleichsoperationen können mit logischen Operationen verknüpft werden. Im folgenden Beispiel werden 3 Variablen a, b und c eingeführt. Es soll geprüft werden, ob a < c und b < c gilt, dazu werden die beiden Vergleiche mit einem logischen and verknpüft:
a = 10
b = 20
c = 30
a < c and b < c # True
Für die Verknüpfung von Vergleichsoperationen kann wiederrum ein syntactic Sugar in Python verwendet werden. Eine Verkettung mehrerer Vergleichsoperationen kann angegeben werden, dabei werden implizit logische and Operationen zwischen den Vergleichoperationen ausgeführt:
10 < 20 < 30 > 5 # True
Das obige Beispiel würde explizit mit folgender Schreibweise gleichzusetzen sein:
10 < 20 and 20 < 30 and 30 > 5 # True
Interpretation von Wahrheitswerten
Ähnlich der Typkonvertierung von Strings können auch beliebige Werte in einen Boolean konvertiert werden. In Python werden dabei Konventionen festgelegt die bestimmen ob ein Wert als True oder False zu interpretieren ist.
Generell wird in Python alles als True interpretiert, außer es handelt sich um einen der folgenden Fälle:
FalseNone- Die Zahlen
0oder0.0 - Der Leerstring
"" - Leere Datenstrukturen, wie zum Beispiel eine leere Liste
[]
Mit der Funktion bool können beliebige Datentypen nach den oben definierten Regeln in einen Wahrheitswert überführt werden. Im folgenden Beispiel wird der String "hello world" bzw. die Zahl -100 in den entsprechenden Wahrheitswert überführt:
bool('hello world') # True
bool(-100) # True
Verständnisfrage
Prüfen Sie mit der Funktion bool welche String bzw. Zahlen Literale im Wahrheitswert False resultieren.