lehrkraefte:snr:informatik:glf22:python:wahrheitswerte-logische-verknuepfungen

Motivation

Das folgende kleine Quiz-Programm in Python ist vermutlich einfach zu verstehen. Du kannst es gerne herunterladen und ausführen.

quiz.py
antwort = input("Wie heisst das kulturelle und wirtschaftliche Zentrum der Ostschweiz? ")
if (antwort == "St. Gallen") or (antwort == "St.Gallen") or (antwort == "Saint-Gall") or (antwort == "San Gallo"):
    print("Korrekt!")
else:
    print("Vermutlich falsch.")
    print("Die als richtig akzeptierten Antworten wären 'St. Gallen', 'St.Gallen', 'Saint-Gall' oder 'San Gallo' gewesen.")

Damit du dieses Programm richtig verstehst und in Zukunft ähnliche Programme problemlos schreiben kannst, werden im Rest dieser Webseite und auf der nachfolgenden Seite zu “if-else-statements” einige Sachverhalte erläutert:

  • Vergleichszeichen (etwa == im obigen Programm)
  • Wahrheitswerte
  • logische Verknüpfungen (etwa or im obigen Programm)
  • if-else-statements (beachte die Einrückungen im obigen Programm!)

Ein wenig Logik

Zur Einstimmung auf die folgenden eher theoretischen Erklärungen gib in der Python-Shell die folgenden Befehle (oder zumindest einige davon) ein (jeweils gefolgt von Enter).

Versuche, die Antworten des Computers vorherzusagen bzw. zu verstehen!

(Die Worte in den Überschriften dienen der Orientierung und werden unten erklärt. Die Python-Shell antwortet immer, wenn deine Anfrage eine “sinnvolle” Antwort hat.)

Vergleichsoperatoren

  • 2 == 5
  • 2 = 5
  • 2 > 2
  • 2 >= 2
  • not (2 == 5) oder gleichbedeutend 2 != 5
  • “Hallo” == “HALLO” (selber tippen, kopieren kann fehlschlagen)
  • “Hallo” != “HALLO”
  • “2+5” == 2+5
  • False == True

Datentypen

  • type(3)
  • type(2.5)
  • type(“3+5”)
  • type(False)

Boolesche Variablen = Booleans

  • a = (2==5)
  • a
  • type(a)
  • antwort = “Sanggalle”
  • antwort
  • antwort == “St. Gallen”

Logische Verknüpfungen

Logisches Und:

  • False and True
  • True and True
  • a and True

Logisches Oder:

  • False or False
  • True or False
  • True or True
  • a or True

Verneinung = Negation:

  • not True
  • not a

Lösungshinweis:

Lösungshinweis:

Alles sollte klar werden, sobald du den folgenden Text liest!

Eine Aussage kann entweder wahr oder falsch sein, also einen dieser beiden sogenannten Wahrheitswerte haben. Statt Wahrheitswert sagt man auch boolescher Werte (nach George Boole).

Auf Englisch und in Python heissen die beiden Wahrheitswerte True und False (beachte die Grossschreibung).

Der zugehörige Datentyp in Python heisst

  • bool für boolescher Datentyp; Daten vom Typ bool haben entweder den Wert True oder den Wert False.

Du hast dies in der Python-Shell bereits durch die Eingabe der Befehle type(True) bzw. type(False) gesehen.

Variablen vom Datentyp bool werden als boolesche Variablen oder Booleans bezeichnet.

In der obigen Aufgabe war a eine boolesche Variable.

Boolesche Werte kann man mit den logischen Verknüpfungen and, or und not kombinieren (statt logischer Verknüpfung sagt man auch boolescher Operator).

Diese Verknüpfungen sind durch die folgenden Tabellen definiert (wie du bereits in der obigen Aufgabe herausgefunden hast).


Definition von and (logisches Und, Konjunktion)

Die letzte Spalte der folgenden Tabelle gibt den Wert des logischen Und in Abhängigkeit von allen möglichen Belegungen der Variablen $a$ und $b$ an. Die vorletzte Zeile besagt beispielsweise, dass True and False als False definiert ist.

$a$ $b$ $a$ and b
False False False
False True False
True False False
True True True


Merke: Logisches Und and wird genau dann wahr, wenn beide Argumente wahr sind.


Definition von or (logisches Oder, Disjunktion)

$a$ $b$ $a$ or b
False False False
False True True
True False True
True True True

Merke: Logisches Oder or wird genau dann wahr, wenn mindestens eines der beiden Argumente wahr ist.


Definition von not (logische Verneinung, Negation)

$a$ not $a$
False True
True False

Wenn noch nicht intuitiv klar: Lerne die obigen Tabellen für and, or und not auswendig!

Sage das Ergebnis der folgenden booleschen Ausdrücke voraus. Teste dann jeweils in der Python-Shell, ob deine Vermutung korrekt war!

  • not(True) and False
  • not(True) or False
  • (True or False) and True
  • (True and True) or (False and True)
  • not(True or True)

Wenn du zu viele Fehler gemacht hast: Erfinde eigene ähnliche Ausdrücke und teste dich selbst.

Mathematische Zusatzinfo

Mathematische Zusatzinfo

In der mathematischen Logik schreibt man meist effizienter

  • “$a \land b$” statt “$a$ and $b$”.
  • “$a \lor b$” statt “$a$ or $b$”.
  • “$\neg a$” oder “$\overline{a}$” statt “not $a$”.

Beim Rechnen mit Zahlen verwendest du mehr oder weniger bewusst diverse Rechenregeln (Kommutativgessetze, Assoziativgesetze, Distributivgesetz). Ähnliche Regeln (und noch einige mehr, etwa die “de morganschen Gesetze”) gibt es auch beim Rechnen mit Wahrheitswerten, vgl. https://de.wikipedia.org/wiki/Boolesche_Algebra#Definition. Diese Gesetze sind sehr “symmetrisch” und sehr einfach zu beweisen (da man sie jeweils an endlich vielen Eingaben testen kann) - einige werden wir später im Abschnitt “Bits and Bytes” beweisen.

Die logischen Verknüpfungen and, or und not sind an den normalen Sprachgebrauch angelehnt:1)

  • Die Sonne scheint und das Haus ist rot.
  • Die Sonne scheint oder das Haus ist rot.
  • Es ist nicht richtig, dass die Sonne scheint.

Im normalen Sprachgebrauch suggeriert “oder” bisweilen ein “entweder … oder …” (exklusives Oder). Beispiel: “Ich gehe heute abend ins Kino oder ins Theater.”

Im Sinne des oben definierten logischen Oders or ist diese Aussage auch dann wahr, wenn ich sowohl ins Kino als auch ins Theater gehe (denn True or True hat den Wert True).

Vergleiche liefern Boolesche Werte:

  • ==: gleich $=$ für Gleichheit; beispielsweise hat 2 == 5 den Wert False
  • !=: ungleich $\not=$ für Ungleichheit; a != b und not (a == b) haben dieselbe Bedeutung.
  • <: kleiner $<$
  • <=: kleiner-gleich $\leq$
  • >: grösser $>$
  • >=: grösser-gleich $\geq$

Die Zeichen != und <= und >= sollen an die in der Mathematik gebräuchlichen Zeichen $\not=$ und $\leq$ und $\geq$ erinnern.

Achtung: Das einzelne Zeichen = ist beim Programmieren ein Zuweisungszeichen und kein Gleichheitszeichen wie in der Mathematik! Links davon muss immer eine Variable stehen.

(Da die Informatiker das mathematische Gleichheitszeichen zweckentfremdet haben, müssen sie zur Strafe nun immer zwei Gleichheitszeichen eingeben, wenn sie auf Gleichheit testen wollen.)

Teste in der Python-Shell:

  • alle 6 Vergleichszeichen zum Vergleich von Zahlen, also etwa -2.3 < -3.2;
  • Gleichheitszeichen == und Ungleichheitszeichen != zum Vergleich von Strings;
  • die anderen vier Vergleichszeichen zum Vergleich von Strings, die nur aus Kleinbuchstaben bestehen;
  • Gleichheitszeichen == und Ungleichheitszeichen != zum Vergleich von Booleans (= Wahrheitswerten).

Du darfst natürlich auch beliebige Strings oder Booleans mit den “anderen vier” Vergleichszeichen vergleichen, jedoch werden dich manche Ergebnisse vermutlich überraschen, etwa das von “Z”<“a” oder das von False < True.

Zum Vergleich von Strings

Zum Vergleich von Strings

Strings können unproblematisch mit den Zeichen == und != verglichen werden. Achtung aber bei den anderen Vergleichszeichen!

Wenn man nur Strings vergleicht, die aus Kleinbuchstaben bestehen, wird die alphabetische Sortierung verwendet, die hoffentlich auch im digitalen Zeitalter aus gedruckten Lexika oder Wörterbüchern bekannt ist. Kommen nur Grossbuchstaben vor, so wird dieselbe Ordnung verwendet.

Wenn sowohl Gross- als auch Kleinbuchstaben vorkommen, kommen vermutlich unerwartete Ergebnisse heraus, denn als “alphabetische Reihenfolge” wird “ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz” verwendet. Kommen auch andere Sonderzeichen vor, wird die ASCII- (oder genauer die Unicode-)Reihenfolge verwendet, vgl. https://en.wikipedia.org/wiki/ASCII#Printable_characters.

Zum Vergleich von Booleans

Zum Vergleich von Booleans

Auch hier ist der Vergleich mit == und != unproblematisch.

Intern wird True als 1 und False als 0 gespeichert, was erklärt, warum etwa False < True wahr ist (und auch etwas wie 5+True keinen Fehler erzeugt).


1)
Die Wörter “und” und “oder” werden aber in der normalen Sprache nicht immer als logische Verknüpfungen verwendet. Beispiele: (1) Frauen und Männer sind gleichberechtigt. (2) Ich war hungrig und ging in die Mensa. (3) Ich ging in die Mensa und war hungrig. (4) Sein oder Nichtsein, das ist hier die Frage.
  • lehrkraefte/snr/informatik/glf22/python/wahrheitswerte-logische-verknuepfungen.txt
  • Last modified: 2023/09/19 12:34
  • by Olaf Schnürer