Bedingung

Bedingungen sind eine grundlegende Möglichkeit, Programmabläufe in Abhängigkeit von unterschiedlichen Werten, Ausdrücken, Berechnungen oder Ergebnissen zu steuern.

Einfache Bedingung

Eine Bedingung wird in Python mit dem Schlüsselwort if begonnen, danach kommt die Bedingung die mit einem Doppelpunkt abgeschlossen wird. Alle Ausdrücke und Berechnungen die durchgeführt werden sollen, wenn die Bedingung erfüllt ist, müssen in dem anschliessenden eingerückten Block auftauchen.

In [2]:
a = 4

Im folgenden Beispiel lautet die Bedingung

In [3]:
a%2 == 0
Out[3]:
True

d.h. die Bedingung ist wahr, wenn a modulo 2 den Wert Null ergibt - oder anders gesagt: wenn a durch 2 teilbar ist.

In [4]:
if a%2 == 0: 
    b = a**a
    print(b)
256

Ist a ungerade wird der entsprechende Block nicht ausgeführt:

In [5]:
a = 5
In [6]:
a%2 == 0
Out[6]:
False
In [7]:
if a%2 == 0: 
    b = a**a
    print(b)

Einrückung und Ausrückung

Wichtig:

  • Python hat - im Gegensatz zu anderen Programmiersprachen - mit der Ein- und Ausrückung (engl. Indentation) eine Syntax, die sich auf das Aussehen auswirkt

    • Vorteil: Man kann sich leicht in Programme von anderen einlesen
    • Nachteil: Anfänger bekommen oftmals Indentation-Fehler
  • Indentation-Fehler haben in der Regel mit dem unterschiedlichen Verhalten von Editoren (Textbearbeitungsprogrammen) für die Eingabe des Tab- (Tabulator-) Zeichens (^t oder \t) und Leerzeichen (Blank) zu tun. Ein Tab ist ein einziges Zeichen obwohl in den Editoren dafür z.B. 4 Leerzeichen angezeigt werden, wenn dann einmal ein Tab und ein anderes mal 4 Leerzeichen zum Einrücken eingegeben werden, dann ergibt sich ein Indentation-Fehler.

  • Sowohl im Jupyter-Notebook als auch in Spyder (und auch bei anderen guten Editoren) wird ein Tab daher immer in die entsprechende Anzahl von Leerzeichen umgewandelt, sodass die sichtbare Einrückung identisch mit der für Python notwendigen Einrückung übereinstimmt.

Alternative Bedingung

Alle Ausdrücke und Berechnungen die durchgeführt werden sollen, wenn die Bedingung nicht erfüllt ist, müssen nach dem Schlüsselwort else wieder in einem eingerückten Block auftauchen:

In [8]:
a = 12
if a%2 == 0:
    print("a ist gerade")
else:
    print("a ist ungerade")
a ist gerade
In [9]:
%%Mooc MultipleChoiceAssessment
Out[9]:

Alternative Bedingung zur Verteilung von Äpfeln und Birnen in 2 Obstschalen

Sie haben zwei unterschiedlich große Obstschalen sGross und sKlein (wobei sGross > sKlein gilt) und eine Anzahl von a Äpfeln und b Birnen und sollen die Äpfel und Birnen entsprechend ihrer Anzahl in die beiden Obstschalen verteilen. Dabei nehmen wir an, dass die kleinere Anzahl an Obst auch immer in die kleinere Schale und die größere Anzahl an Obst in die größere Schale passt. Die Verteilung geschieht dann über eine Zuweisung. Folgende Antworten stehen zur Verfügung:


Antwort 1


if a > b:
    sGross = a
    sKlein = b
else:
    sGross = b
    sKlein = a

Antwort 2


if a > b:
    sGross = b
    sKlein = a
else:
    sGross = a
    sKlein = b

Antwort 3


if a <= b:
    sGross = b
    sKlein = a
else:
    sGross = a
    sKlein = b

Welche Antwort ist falsch ?

Antwort 1
Antwort 2
Antwort 3

Mehrfache alternative Bedingungen

Wenn mehrere Bedingungen sich gleichzeitig ausschliessen, wie z.B. bei dem folgenden Beispiel für die Umrechnung von Punkten in einen Notenschlüssel, dann werden diese Bedingungen - mit Ausnahme der ersten Bedingung - mit dem Schlüsselwort elif begonnen:

In [10]:
punkte = 27
if punkte < 5:
    note = 5
elif punkte < 15:
    note = 4
elif punkte < 25:
    note = 3
elif punkte < 35:
    note = 2
else:
    note = 1
print(punkte,"Punkte ergeben die Note",note)
27 Punkte ergeben die Note 2

In anderen Programmiersprache gibt es für diese Form der mehrfachen alternativen Bedingung Konstrukte die switch oder case genannt werden.

In [11]:
%%Mooc MultipleChoiceAssessment
Out[11]:

Mehrfache alternative Bedingungen

Eine alternative Lösung der obigen Aufgabenstellung verwendet nicht eine aufsteigende Reihenfolge für die Abfragen der Punkte in den Bedingungen, sondern eine absteigende Reihenfolge - zusammen mit der entsprechenden Negation der Bedingung:



if punkte >= 35:
    note = 1
elif punkte >= 25:
    note = 2
elif punkte >= 15:
    note = 3
elif punkte >= 5:
    note = 4
else:
    note = 5

Für welche Anzahl von Punkten ist dies die bessere Lösung ?

punkte = 37
Punkte = 12
Punkte = 4

In [12]:
%%Mooc Video
Out[12]:

Weitere Literatur

In [13]:
%%Mooc WebReference

If Statements

https://docs.python.org/3/tutorial/controlflow.html#if-statements

Hinweis: Ein kurzes Beispiel aus dem Python Tutorial mit weiteren Verlinkungen zur Syntax-Beschreibung