7.1 Digitale Logik: und, oder, nicht#
In diesem Kapitel beschäftigen wir uns zuerst damit, wie kombinierte Bedingungen in der Programmiersprache Python formuliert werden. In der Informatik bezeichnet man dieses Themenfeld auch als digitale Logik oder boolesche Algebra.
Lernziele#
Lernziele
Sie kennen die logischen Operatoren und können diese in Python einsetzen:
logisches UND:
and
logisches ODER:
or
logisches NICHT:
not
Boolesche Algebra#
In früheren Kapiteln haben wir den boolschen Datentyp kennengelernt: wahr oder falsch. Man kann solche Ausdrücke auch kombinieren, z.B. könnte man fordern, dass zwei Bedingungen gleichzeitg erfüllt sein sollen.
Beispiel beim Busfahren: Kinder unter 6 Jahren können kostenlos Bus fahren. Ab 6 Jahren braucht man eine Fahrkarte. Bis 14 Jahre zahlt man den Kinderpreis, ab 15 Jahren den Erwachsenenpreis. Die Bedingung für eine Kinderkarte lautet also:
Keine Kinderfahrkarte braucht man, wenn man jünger als 6 ist oder älter als 14, also:
Eine Fahrkarte (egal ob Kinderfahrkarte oder Erwachsenenfahrkarte) muss mankaufen, wenn man kein Kind ist, also wenn
Gut, letzteres könnte man natürlicher einfacher mit \(\text{Alter} \geq 6\) ausdrücken, aber das klappt auch nicht bei jeder Bedingung.
Im Folgenden beschäftigen wir uns daher mit der Verknüpfung von booleschen Ausdrücken. Dieses Fachgebiet nennt man auch boolsche Algebra oder digitale Logik. Wikipedia fasst hier die wichtigsten Regeln zur booleschen Algebra zusammen: https://de.wikipedia.org/wiki/Boolesche_Algebra
Wir werden in dieser Vorlesung uns aber auf die logischen Verknüpfungen oder logischen Operatoren
UND
ODER
NICHT
beschränken.
Das logische UND#
Beim logischen UND müssen beide Bedingungen erfüllt sein, damit insgesamt die kombinierte Bedingung erfüllt ist. Vergleichbar ist dies mit einer Reihenschaltung in der Elektrotechnik. Nur wenn beide Schalter eingeschaltet sind, kann der Strom fließen.
Hier finden Sie den Link zu einem YouTube-Video (ca. 3:14 min) von Lehrer Schmidt zur UND-Schaltung:
https://www.youtube.com/watch?v=79WVEr2BVZI
Man schreibt die Ergebnisse der kombinierten Bedingungen normalerweise als eine
Tabelle auf. Die erste Zeile würde man so lesen: Wenn “Bedingung 1 wahr” ist UND
wenn “Bedingung 2 wahr” ist, so ist auch die kombinierte Bedingung “Bedingung 1
UND Bedingung 2” wahr. Wir verwenden hier schon die Python-Werte True
für wahr
und False
für falsch sowie den and
-Operator für das logische UND:
Bedingung 1 |
Bedingung 2 |
Ergebnis mit |
---|---|---|
True |
True |
True |
False |
True |
False |
True |
False |
False |
False |
False |
False |
Beispiel: Zwei Personen wollen einen Kinofilm sehen, der erst ab 18 erlaubt ist. Nur wenn beide volljährig sind, können sie den Film gemeinsam besuchen:
alter_person1 = 19
alter_person2 = 22
if (alter_person1 >= 18) and (alter_person2 >= 18):
print('Sie duerfen beide den Film sehen.')
else:
print('Vielleicht darf einer von Ihnen den Film sehen, aber nicht beide.')
Sie duerfen beide den Film sehen.
Mini-Übung
Schreiben Sie ein Skript, das nach dem Alter einer Person fragt. Wenn das Alter der Person zwischen 6 und 10 liegt, soll das Programm ausgeben “Wahrscheinlich gehst Du in die Grundschule.”
# Hier Ihr Code
Lösung
# Eingabe
alter = int(input('Wie alt sind Sie?'))
# Verarbeitung und Ausgabe
if (6 <= alter) and (alter <= 10):
print('Wahrscheinlich gehst Du in die Gundschule.')
Das logische ODER#
Beim logischen ODER muss nur eine der beiden Bedingungen erfüllt sein, damit insgesamt die kombinierte Bedingung erfüllt ist. Damit ist natürlich die Bedingung insgesamt auch erfüllt, wenn beide Bedingungen wahr sind. Vergleichbar ist dies mit einer Parallelschaltung in der Elektrotechnik. Es reicht, wenn einer der beiden Schalter eingeschaltet sind, damit der Strom fließen kann. Auch wenn beide Schalter eingeschaltet sind, fließt Strom.
Hier finden Sie den Link zu einem YouTube-Video (ca. 2:42 min) von Lehrer Schmidt zur ODER-Schaltung: https://www.youtube.com/watch?v=UNkXbvSN9w8
Auch bei der ODER-Verknüpfung schreibt man üblicherweise die Ergebnisse der
kombinierten Bedingungen in Form einer Tabelle. Die dritte Zeile würde man
beispielsweise so lesen: Wenn “Bedingung 1 wahr” ist ODER wenn “Bedingung 2
falsch” ist, so ist auch die kombinierte Bedingung “Bedingung 1 ODER Bedingung
2” wahr. Wir verwenden hier wiederum die Python-Werte True
für wahr und
False
für falsch sowie den logischen Oder-Operator or
:
Bedingung 1 |
Bedingung 2 |
Ergebnis mit |
---|---|---|
True |
True |
True |
False |
True |
True |
True |
False |
True |
False |
False |
False |
Beispiel: Zwei Personen wollen ein Auto mieten, dazu muss aber mindestens einer von beiden den Führerschein besitzen.
person1_hat_fuehrerschein = True
person2_hat_fuehrerschein = False
if (person1_hat_fuehrerschein == True) or (person2_hat_fuehrerschein == True):
print('Sie duerfen das Auto mieten.')
else:
print('Keiner von beiden hat einen Fuehrerschein, geht nicht.')
Sie duerfen das Auto mieten.
Übrigens, der Vergleich person1_hat_fuehrerschein == True
ist eigentlich
doppelt gemoppelt, da ja die Variable bereits den Datentyp bool hat. Wir könnten
also auch kürzer schreiben
person1_hat_fuehrerschein = True
person2_hat_fuehrerschein = False
if person1_hat_fuehrerschein or person2_hat_fuehrerschein :
print('Sie duerfen das Auto mieten.')
else:
print('Keiner von beiden hat einen Fuehrerschein, geht nicht.')
Sie duerfen das Auto mieten.
Mini-Übung
Schreiben Sie ein Skript, das nach dem Alter einer Person fragt. Wenn die Person jünger als 18 ist oder älter als 67, soll das Programm ausgeben: “Wahrscheinlich sind Sie/bist Du nicht berufstätig.”
# Hier Ihr Code
Lösung
# Eingabe
alter = int(input('Alter: '))
# Verarbeitung und Ausgabe
if (alter < 18) or (67 < alter):
print('Wahrscheinlich sind Sie/bist Du nicht berufstätig.')
Das logische NICHT#
Das logische NICHT kehrt eine Aussage um. Wenn eine Bedingung wahr war, wird sie
falsch. War jedoch die Bedingung vorher wahr, wird sie nach Anwendung des
logischen NICHT falsch. Man schreibt auch diese Operation normalerweise als
Tabelle auf, wobei wir den logischen Nicht-Opertor not
verwenden:
Bedingung 1 |
Ergebnis mit |
---|---|
True |
False |
False |
True |
Beispiel: Wenn eine Person keinen Führerschein hat, muss sie den Bus nehmen.
person_hat_fuehrerschein = False
if not person_hat_fuehrerschein:
print('Sie muessen Bus fahren.')
else:
print('Sie duerfen Auto fahren.')
Sie muessen Bus fahren.
Mini-Übung
Überlegen Sie zunächst, was ist das Ergebnis der folgenden Verknüpfungen: wahr oder falsch?
wahr UND wahr
wahr ODER falsch
NICHT wahr
falsch ODER wahr
wahr ODER (NICHT falsch)
(NICHT wahr) UND falsch
NICHT (wahr ODER falsch)
(NICHT falsch) ODER (falsch UND falsch)
Probieren Sie dann in der nächsten Code-Zelle aus, ob Sie die richtigen
Ergebnisse hatten, indem Sie beispielsweise wahr und wahr in Python
ausprobieren, also beispielsweise True and True
eingeben.
# Hier Ihr Code
Lösung
# wahr UND wahr
True and True
# wahr ODER falsch
True or False
# NICHT wahr
not True
# falsch ODER wahr
False or True
# wahr ODER (NICHT falsch)
True or (not False)
# (NICHT wahr) UND falsch
(not True) and False
# NICHT (wahr ODER falsch)
not (True or False)
# (NICHT falsch) ODER (falsch UND falsch)
(not False) or (False and False)