Zum Inhalt

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 == 10
10 == 11
True
False
!= Ungleichheit 55 != 30
10 != 10
True
False
< Kleiner 10 < 11
20 < 10
True
False
> Größer 10 > 11
20 > 10
False
True
<= Kleinergleich 9 <= 10
10 <= 10
11 <= 10
True
True
False
>= Größergleich 9 >= 10
10 >= 10
11 >= 10
False
True
True

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:

  • False
  • None
  • Die Zahlen 0 oder 0.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.