03In diesem Kapitel möchte ich nun die bedingten Anweisungen und die dazu benötigten Operatoren vorstellen.
Eine bedingte Anweisung benötigen wir, um in unserem Quellcode eine Abfrage auf einen bestimmten Datenstatus vorzunehmen.
D.h. wenn wir zwei Werte miteinander vergleichen möchten, so benötigen wir eine bedingte Anweisung und zusätzlich Operatoren.
Eine solche bedingte Anweisung beginnt immer mit einem “if” und prüft auf einen Booleschen Wert. Ein Boolescher Wert kann genau zwei Status haben True/False.
Der Status “True” steht für “Wahr” und “False” für “Falsch”.
if 1 < 5: print("1 ist kleiner als 5")
Was haben wir hier geschrieben?
Zeile #1: Abfrage ob 1 kleiner als 5 ist
Es wird geprüft, ob die Zahl “1” kleiner als “5” ist, da diese Operation den Wert “True” zurückliefert erfolgt die Ausgabe:
1 ist kleiner als 5
Zeile #2: Ausgabe bzw. weitere Verarbeitung
Damit die Ausgabe bzw. die weitere Verarbeitung bei einem Ergebnis der Abfrage von “True” erfolgt, muss die nächste Zeile mit einem Tabulator eingerückt werden. Wenn diese Zeile nicht eingerückt wird, erfolgt keine besondere Verarbeitung und die Zeile wird immer ausgegeben.
Operatoren
Nehmen wir an wir wollen zwei Zahlen miteinander vergleichen.
zahl1 = 1 zahl2 = 3
Dazu können wir nun für die verschiedenen Vergleiche, folgende Operatoren verwenden.
kleiner <
Wenn geprüft werden soll, ob die Zahl1 kleiner als die Zahl2 ist.
result = zahl1 < zahl2 if result: print("Zahl1 ist kleiner als Zahl2!")
größer >
Wenn geprüft werden soll, ob die Zahl1 größer als die Zahl2 ist.
zahl1 = 1 zahl2 = 3 result = zahl1 > zahl2 if result: print("Zahl1 ist größer als Zahl2!")
gleich ==
Wenn geprüft werden soll, ob beide Zahlen gleich sind.
result = zahl1 == zahl2 if result: print("Zahl1 ist gleich Zahl2!")
ungleich !=
Wenn geprüft werden soll, ob die Zahl1 ungleich der Zahl2 ist.
result = zahl1 != zahl2 if result: print("Zahl1 ist ungleich Zahl2!")
kleiner gleich <=
Wenn geprüft werden soll, ob die Zahl1 kleiner gleich der Zahl2 ist, d.h. die Zahl kann kleiner sein oder gleich der Zahl2 sein.
result = zahl1 <= zahl2 if result: print("Zahl1 ist kleiner gleich Zahl2!")
größer gleich >=
Wenn geprüft werden soll, ob die Zahl1 größer gleich der Zahl2 ist, d.h. die Zahl kann größer sein oder gleich der Zahl2 sein.
result = zahl1 >= zahl2 if result: print("Zahl1 ist groesser gleich Zahl2!")
If Abfragen
Nun haben wir bereits einige If Abfragen geschrieben und ausgeführt. Jedoch haben wir immer nur genau einen Status abgefragt, nämlich “True”.
Was ist, wenn wir auf beide möglichen Werte reagieren wollen?
Wir könnten nun folgendes schreiben:
zahl1 = 1 zahl2 = 3 result = zahl1 > zahl2 if result: print("Zahl1 ist groesser als Zahl2!") result = zahl1 <= zahl2 if result: print("Zahl1 ist nicht groesser als Zahl2!")
Die Ausgabe ist:
Zahl1 ist nicht groesser als Zahl2!
Es gibt hier nun zwei Abfragen, dieses kann man mit einem einfachen zusätzlichen Operator “else” verkürzen.
if result: print("Zahl1 ist groesser als Zahl2!") else: print("Zahl1 ist nicht groesser als Zahl2!")
Der Befehl “else” bewirkt das, wenn das Ergebnis in der If abfrage falsch ist der Zweig ausgeführt wird. (Die Ausgabe bleibt gleich.)
Wenn man jedoch mit dem gleichheits Operator arbeitet kann man prüfen ob eine Zahl gleich einer anderen ist, hier klappt dieses nur bedingt mit dem Operator “else”.
ElIf Operator
Für diesen Fall nutzt man den Operator “elif”, dieser bewirkt das, wenn die erste Abfrage “True” ist keine weiteren Abfragen mit dem Operator “Elif” ausgeführt werden.
zahl1 = 2 if zahl1 == 1: print("Zahl1 ist gleich 1!") elif zahl1 == 2: print("Zahl1 ist gleich 2!") elif zahl1 == 3: print("Zahl1 ist gleich 3!") elif zahl1 == 4: print("Zahl1 ist gleich 4!")
Die Ausgabe aus diesem Beispiel ist:
Zahl1 ist gleich 2!
Die Abfragen werden von oben nach unten durchlaufen und wenn das Ergebnis “True” ist dann wird der Code ausführt und keine weiteren Abfragen geprüft.
Es geht kürzer
Gegeben sei folgender Code:
ergebnis = "" zahl1 = 4 if zahl1 == 1: ergebnis = "Zahl1 ist gleich 1!" else: ergebnis = "Zahl1 ist ungleich 2!" print(ergebnis)
Im Grund ist daran nix auszusetzen, jedoch geht dieses noch kürzer.
zahl1 = 4 ergebnis = "Zahl1 ist gleich 1!" if (zahl1 == 1) else "Zahl1 ist ungleich 2!" print(ergebnis)
Verketten mit and & or
Wenn man nun eine Variable hat welche mehrere gültige Status haben kann, dann gibt es die Möglichkeit mit “and” oder “or” diese zu verknüpfen und somit verschachtelte if Abfragen zu gestalten.
and
zahl1 = 2 if zahl1 > 1 and zahl1 < 3: print("Die Variable Zahl1 enthaelt den Wert 2")
Was haben wir geschrieben?
Zeile #1: erzeugen der Variable “zahl1” und zuweisen des ganzzahligen Wertes 2
Zeile #2: abfragen ob der Wert der Variable “zahl1” größer als 1 ist UND kleiner als 3.
Hier liegt das Augenmerk auf das UND, denn der gesamte Ausdruck ergibt nur True wenn beide Abfragen “zahl1 > 1” und “zahl1 < 3” jeweils True ergeben.
Wenn nur einer von beiden ein False (oder sogar beide) ergibt, dann wird keine Ausgabe erfolgen.
or
Die zweite Möglichkeit ist mit dem Operator “or”, hier muss nur einer der beiden Ausdrücke ein True zurückliefern damit die Ausgabe erfolgt.
zahl1 = 2 if zahl1 == 2 or (zahl1 > 10 and zahl1 < 30): print("Die Variable Zahl1 enthaelt den Wert 2")
Was haben wir geschrieben?
Zeile #1: erzeugen der Variable “zahl1” und zuweisen des ganzzahligen Wertes 2
Zeile #2: hier sind nun 2 Ausdrücke,
der erste Ausdruck prüft, ob die Variable den Wert 2 enthält,
der zweite Ausdruck ist durch eine Klammer erneut verschachtelt und enthält wiederum zwei weitere Ausdrücke,
hier findet sich eine Abfrage mit “and” ob die Zahl größer 10 und kleiner 30 ist. Dieser Ausdruck ist jedoch False was bei einer oder Verknüpfung nicht schlimm ist so weit mindestens ein Ausdruck True liefert.
prüfen mit dem Operator “in”
Mit dem Operator in kann man prüfen ob ein Element in einer Liste oder String vorhanden ist.
Nehmen wir folgende Liste mit Pflanzen:
pflanzen = ["Rose", "Tulpe", "Geranie", "Veilchen"]
Wollen wir prüfen, ob ein bestimmtes Element in dieser Liste vorkommt, so prüfen wir dieses mit dem Operator “in”. Der Ausdruck liefert immer ein Booleschen Wert zurück, somit kann man diesen dann in eine if Abfrage stecken.
pflanzen = ["Rose", "Tulpe", "Geranie", "Veilchen"] if "Tulpe" in pflanzen: print("Die Tulpe ist ein Element der Liste.") else: print("Die Tulpe ist kein Element der Liste.")
Die Ausgabe ist:
Die Tulpe ist ein Element der Liste.
Den Operator “in” kann man nicht nur auf Listen anwenden, sondern auch auf Strings.
satz = "Hallo dies ist ein Test!" if "dies" in satz: print("Das gesuchte Wort 'dies' kommt in dem Satz vor!")
Ausdruck negieren mit dem Operator “not”
Es gibt fälle da muss man einen Ausdruck negieren, dann nutzt man den Operator “not” dieser wird vor den Ausdruck gesetzt.
Der Interpreter wird erst den Ausdruck auswerten und zum Schluss das Ergebnis negieren.
alter = 12 if not alter > 16: print("False")
Die Ausgabe ist:
False
Was haben wir geschrieben?
Zeile #1: Variable “alter” erzeugt und den ganzzahligen Wert 12 zugewiesen
Zeile #2: Abfragen, ob die Variable “alter” einen Wert größer als 16 enthält, jedoch wird das Ergebnis negiert, somit
Zeile #3: eventuelle Ausgabe von “False”
Boolesche Vergleiche
Schauen wir uns einmal die Booleschen Vergleiche genau an:
if True and True: print("True and True") if False and False: print("False and False") if True and False: print("True and False") if False and True: print("False and True") if True or True: print("True or True") if False or False: print("False or False") if True or False: print("True or False") if False or True: print("False or true")
Welche Ausgabe wird beim Ausführen erscheinen?
Richtige Antwort:
True and True True or True True or False False or true