Entscheidungen, Entscheidungen – Verzweigungen

Verschiedene Wege

Bislang laufen deine Programme Zeile für Zeile durch. – Das soll sich nun ändern.

Eine Verzweigung ist eine Möglichkeit, deinem Programm zu sagen, dass es unter angegebenen Bedingungen unterschiedliche Aktionen ausführen soll. Eine Verzweigung ist mit einer Entscheidung zu vergleichen, die du triffst und abhängig von der Situation verschiedene Dinge tust.

In Python kannst du eine Verzweigung mit der „if“-Anweisung erstellen. Die „if“-Anweisung prüft eine Bedingung und führt eine Aktion aus, wenn die Bedingung erfüllt ist. Wenn die Bedingung nicht erfüllt ist, wird die Aktion nicht ausgeführt.

Beispiel

alter = int(input("Gib dein Alter ein: "))  # Abfrage des Alters und speichern der Antwort in "alter"
if alter > 40:                              # Prüfung, ob das alter größer 40 ist. Falls ja:
  print("Du bist alt.")                     # Ausgabe von "Du bist alt.", falls das eingegebene Alter größer 40 ist.

Anmerkungen

  • Der Teil des Programms, die bei erfüllter Bedingung ausgeführt werden soll muss wie im Beispiel eingerückt werden. Umfasst der Teil mehrere Zeilen, so müssen sie alle gleich eingerückt werden.
  • Der „normale“ Abstand mit der „Space“-Taste darf hier nicht mit der Einrückung über die Tabulatortaste kombiniert werden.
  • Die Vergleichsoperatoren in Python sind „<„(kleiner), „>“(größer), „<=“(kleiner oder gleich), „>=“(größer oder gleich), „==“(gleich) und „!=“(ungleich).

Soll unter einer Bedingung ein Teil des Quelltextes ausgeführt werden und bei Nichterfüllung ein anderer, so  kannst auch eine „else“-Anweisung hinzufügen.

Beispiel

alter = int(input("Gib dein Alter ein: ")) # Abfrage des Alters und speichern der Antwort in "alter"
if alter > 11:                             # Prüfung, ob das alter größer 11 ist. Falls ja:
  print("Du darfst Avatar sehen.")         # Ausgabe von ""Du darfst Avatar sehen."", falls das eingegebene Alter größer 11 ist.
else:                                      # Ansonsten:
  print("Du darfst Avatar nicht sehen.")   # Ausgabe von "Du darfst Avatar nicht sehen."

In diesem Beispiel wird die Bedingung „zahl > 11“ überprüft. Da die Bedingung nicht erfüllt ist, wird die Nachricht „Die Zahl ist kleiner oder gleich 10.“ ausgegeben.

Geht immer!

Natürlich lassen sich Verzweigungen auch mit den Grafikbefehlen kombinieren.

Beispiel

from picoboy import PicoBoy
import time
import _thread

pb = PicoBoy()

# Den Teil oberhalb dieser Zeile nicht verändern

pb.fill(0)                                                  # Display schwarz (= Farbe 0) füllen
pb.show()                                                   # Displayspeicher auf das Display übertragen und anzeigen
form = int(input("Rechteck(1) oder Dreieck(andere Zahl)"))  # Abfrage der Auswahl und speichern der Antwort in "form"
if form == 1:                                               # Prüfung, ob "form" gleich 1 ist.
  pb.rect(0,0,127,63,1)                                     # Falls Ja: Rechteck in den Displayspeicher schreiben
else:                                                       # Ansonsten:
  pb.line(0,63,63,0,1)                                      # Drei Linien zeichnen, die ein Dreieck ergeben
  pb.line(63,0,127,63,1)
  pb.line(0,63,127,63,1)
pb.show()                                                   # Displayspeicher auf das Display übertragen und anzeigen

Anmerkung:

  • Im Falle „form ungleich 1“ soll ein Dreieck gezeichnet werden. Da dazu mehrere Programmzeilen erforderlich sind, sind mehrere Zeilen eingerückt, die nur in diesem Fall ausgeführt werden.
  • „pb.show()“ soll jedoch auf jeden Fall ausgeführt werden und wird daher nicht eingerückt geschrieben. Es wird ausgeführt, nachdem der if-else-Block durchlaufen ist.

Logische Operatoren

In vielen Fällen ist es sinnvoll mehrere Bedingungen zu Verknüpfen, um zu einer Entscheidung zu kommen. Betrachte das folgende Programm „Sollte ich Avatar ansehen?“.

Beispiel

alter = int(input("Gib dein Alter ein: "))                   # Abfrage des Alters und speichern der Antwort in "alter" 
if alter > 11 and alter < 25:                                # Die Bedingung ist erfüllt, wenn beide Teilbedingungen erfüllt sind.
  print("Du solltest Avatar sehen.") 
else:
  print("Du solltest Avatar nicht sehen.")

Neben „and“ gibt es noch weitere Möglichkeiten solche logischen Aussagen durch verschiedene Operatoren zu verknüpfen. Hier ein Überblick:

AND

aba and b
FalseFalseFalse
FalseTrueFalse
TrueFalseFalse
TrueTrueTrue

OR

aba or b
FalseFalseFalse
FalseTrueTrue
TrueFalseTrue
TrueTrueTrue

XOR

aba ^ b
FalseFalseFalse
FalseTrueTrue
TrueFalseTrue
TrueTrueFalse

NOT

anot a
FalseTrue
TrueFalse

Schachteln

Du kannst auch mehre solcher Operatoren in einem Ausdruck verwenden. Es besteht die Möglichkeit zur Klammerung, die die selbe Bedeutung wie in der Mathematik hat. Beispiele:

  • not(a < 10 and b > 25)
  • (x < 128 and x >= 0) and (y < 64 and y >= 0)

Du kannst eine Abfrage mehrerer Bedingungen allerdings auch durch die Verschachtelung von Verzweigungen lösen. Dabei steht eine Verzweigung innerhalb einer anderen, wie du an der weiteren Einrückung erkennen kannst.

alter = int(input("Gib dein Alter ein: ")) 
if alter > 40:
  print("Du bist alt.")
  if alter > 90:
    print("Wirklich sehr alt.")
else:
  print("Du bist ja noch ein Kind")

Hier geht es weiter.