×
produktlogotitle

Seite: bbb_bool
Diese Seite wurde aktualisiert am 03.05.2021

LOGIN
Benutzer:
Passwort:
 
   if1.net-schulbuch.de

 

Wahrheit in Python

Wie in allen Programmiersprachen gibt es auch in Python sogenannte Wahrheitswerte. Sie können genau zwei Werte annehmen:

  • True
  • False

Der zugehörige Datentyp wird in Python mit bool bezeichnet. 

benannt nach dem englischen Mathematiker George Boole (1815-1864)
 

Einen Wahrheitswert kann man in einer Variablen speichern und auch ausgeben:

wert = True
print(wert) 

Vergleiche erzeugen Wahrheitswerte

Zwei Zahlenwerte oder zwei Strings können gleich oder verschieden sein. Um das zu testen, bietet Python den sogenannten Vergleichsoperator == an. Bei der Anwendung wird ein Wahrheitswert erzeugt, den man ausgeben oder in einer Variablen speichern kann. Möchte man z.B. wissen, ob zwei Werte - gespeichert in je einer Variablen - identisch sind, kann das mit Hilfe eines Wahrheitswertes erfolgen:

z1 = 3
z2 = 4
identisch = (x1 == x2)
print(identisch)

 

Zwei Beispiele sollen das verdeutlichen:

  1. Es soll untersucht werden, ob der Name einer Person mit einem "P" beginnt.

  2. Will man herausfinden, ob eine Zahl z eine Primzahl ist, muss man testen ob z Teiler hat. Also teilt man z durch vermeintliche Teiler t und beobachtet die dabei entstehenden Teilerreste. Diese Reste kann man mit dem oben beschriebenen Modulo-Operator % berechnen lassen. Genau dann, wenn der Rest den Wert 0 hat, ist z durch t teilbar.

Die Python-Programme dazu: 

 

Auch mit Wahrheitswerten kann man rechnen

Das Rechnen geschieht geschieht natürlich nicht mit den bisher bekannten Rechenzeichen wie + oder *. Die boolschen Rechenoperatoren sind:

  • not
  • and
  • or

 

 

  1. Die logische Negation:
    • Dieser Operator macht True zu False und False zu True

Welchen Wahrheitswert hat der Ausdruck not (3 * 4 > 10)

True

False

 

Da 3*4 = 12 größer ist als 10, ist der Wert in der Klammer wahr (True). Das wird dann durch die Negation zu False

Welchen Wahrheitswert hat der Ausdruck not not (7 * 8 >= 56)

True

False

 

 

  1. Das logische und
    • Hat man zwei Wahrheitswerte A und B. Dann hat der Ausdruck A and B den Wert True, wenn sowohl A als auch B den Wert True haben. Ansonsten hat A and B den Wert False.

Welchen Wahrheitswert hat der Ausdruck (3 * 4 > 10) and (5 + 5 > 10)

True

False

 

Natürlich kann man auch mehrere Wahrheitswerte damit verknüpfen:

Welchen Wahrheitswert hat der Ausdruck (3 * 4 > 10) and (5 + 5 >= 10) and (4 * 4 > 15) and (5 + 4 < 10)

True

False

 

  1. Das logische oder
    • Hat man zwei Wahrheitswerte A und B. Dann hat der Ausdruck A or B den Wert False, wenn sowohl A als auch B den Wert False haben. Ansonsten hat A or B den Wert True.

Welchen Wahrheitswert hat der Ausdruck (3 * 4 > 10) or (5 + 5 > 10)

True

False

 

Und auch hier kann man mehrere Wahrheitwerte miteinander verknüpfen:

Welchen Wahrheitswert hat der Ausdruck (3 * 4 < 10) or (5 + 5 > 10) or (4 * 4 > 16) or (5 + 4 > 10)

True

False

 

 

Verwirrung kann entstehen, wenn in einem Ausdruck mehrere Wahrheitswerte mit alle drei Operatoren verknüpft werden. Man beachte dann, dass es auch hier Vorrangregeln gibt:

  • Klammerinhalte werden bevorzugt ausgewertet
  • Der Opertator not bindet stärker als and, und and bindet stärker als or

Der folgende Ausdruck ist eher kein Beispiel für guten Programmierstil:

Welchen Wahrheitswert hat der Ausdruck (2 * 6 < 10) and (32 / 8 > 3) or not (5 ** 2 < 25)

True

False

Zunächst ist 2*6 nicht kleiner als 10, so dass der Ausdruck (2 * 6 < 10) and (32 / 8 > 3) falsch ist.

Weiterhin ist 52 nicht kleiner als 25, jedoch ergibt die Negation den Wert TrueDer Operator or verknüpft also False und True, so dass der gesamte Wert zu True wird.

Da 3*4 = 12 größer ist als 10, ist der Wert in der Klammer wahr (True). Das wird dann durch die Negation zu False

Die besser lesbare Variante, die weniger fehleranfällig ist, ist

((2 * 6 < 10) and (32 / 8 > 3)) or (not (5 ** 2 < 25))

 

Beispiel: Schaltjahresregel

Was geschah am 10.Oktober 1582?

Bis zum Jahr 1582 benutzte man den Julianischen Kalender, benannt nach Julius Caesar. Ein Jahr dauerte 365 Tage, jedes 4-ter Jahr kam im Februar ein Tag hinzu, der sogenannte Schalttag. Dieses Jahr hatte also 366 Tage, so dass also ein Jahr durchschnittlich 365,25 Tage lang war.

Da jedoch der Umlauf der Erde um die Sonne ca. 365,24219 Tage dauert, ein Jahr also ein wenig kürzer ist, kam es im Laufe der Jahre zu einer erheblichen Abweichung. Im Jahre 1582 fiel die Tag- und Nachtgleiche statt auf den 21. März bereits auf den 11. März. Es hatte sich also ein Fehler von 10 Tagen aufsummiert.

Papst Gregor der 13-te (damals konnte ein Papst das!) veranlasste, dass in diesem Jahr 10 Tage ausgelassen werden sollten, so dass auf den 4. Oktober der sofort der 15. Oktober folgte, wobei die Abfolge der Wochentage nicht verändert wurde: auf einen Donnerstag folgte ein Freitag. In der Geschichte fehlte also z.B. das Datum 10.Oktober 1582!

Damit ein solcher Fehler nicht mehr passieren kann, wurde eine neue Regel für die Jahreslänge eingeführt. Demnach hat jedes Jahr 365 Tage, bis auf das Schaltjahr, in dem wie gehabt der Februar um einen Tag verlängert wird. Bleibt die Frage, wann ein Jahr ein Schaltjahr ist:

Schaltjahresregel

Wenn die Jahreszahl durch 400 teilbar ist, oder wenn sie durch 4 teilbar und nicht durch 100 teilbar ist, dann ist das Jahr ein Schaltjahr.

Beispiele:

  • 2021 ist kein Schaltjahr, da 2021 nicht durch 4 teilbar ist.
  • 2020 war ein Schaltjahr, da 2020 durch 4 und nicht durch 100 teilbar ist.
  • 2100 wird kein Schaltjahr sein, da 2100 zwar durch 4, aber auch durch 100 teilbar ist.
  • 2000 war ein Schaltjahr, da 2000 durch 400 teilbar ist.

 

Aufgabe

Ergänze das folgende Python-Programm, so dass korrekt angezeigt wird, ob das angegebene Jahr ein Schaltjahr ist:

schaltjahr_leer.py.txt

# Es gelten folgende Variablen-Vereinbarungen:


#A: Die jahreszahl ist durch 4 teilbar
#B: Die jahreszahl ist durch 100 teilbar
#C: Die jahreszahl ist durch 400 teilbar

jahreszahl = 
A = 
B = 
C = 

istSchaltjahr = C or (A and not B)

print("Das Jahr", jahreszahl, "ist ein Schltjahr: ", istSchaltjahr)

schaltjahr.py.txt

# Es gelten folgende Variablen-Vereinbarungen:


#A: Die jahreszahl ist durch 4 teilbar
#B: Die jahreszahl ist durch 100 teilbar
#C: Die jahreszahl ist durch 400 teilbar

jahreszahl = 2000
A = (jahreszahl%4 == 0)
B = (jahreszahl%100 == 0)
C = (jahreszahl%400 == 0)

istSchaltjahr = C or (A and not B)

print("Das Jahr", jahreszahl, "ist ein Schltjahr: ", istSchaltjahr)

 

 

vorhergehender Absatz

Aufgabe

Mit Hilfe des Zufallsgenerators soll ein Programm entstehen, dass uns mitteilt, ob der Wurf mit drei Würfeln A, B und C zweimal dieselbe Augenzahl hervor gebracht hat, oder ob sogar auf allen drei Würfeln dieselbe Augenzahl erschienen ist.

Sortiere dazu die Programmzeilen korrekt:

 


wurf_b = randint(1,6)


print("Drei Gleiche: ", dreiGleich)


dreiGleich = (aGb and aGc)


wurf_c = randint(1,6)


aGc = (wurf_a == wurf_c)


wurf_a = randint(1,6)


aGb = (wurf_a == wurf_b)


zweiGleich = (aGb or aGc or bGc)


print("Zwei Gleiche: ", zweiGleich)


from random import randint


bGc = (wurf_b == wurf_c)


print("A =", wurf_a, "B =", wurf_b, "C =", wurf_c)

 

folgender Absatz

 

 

 

 

Impressum
© 2023  Net-Schulbuch.de
10.00  0.4772  8.1.28