Verzweigungen / if-Abfragen

Einfache if-Abfragen

Bisher liefen unsere Programm immer stur von oben nach unten ab. Mit Verzweigungen können wir dem Ablauf variabler gestalten:

konto = 0

konto = konto + 100
konto = konto - 10

if (konto > 0):
    print('Noch Guthaben vorhanden.')
else:
    print('Kein Guthaben mehr!')

Mit dem Schlüsselwort if wird eine Verzweigung eingeleitet. In den folgenden runden Klammern steht eine Bedingung von der der weitere Ablauf des Programms abhängt. Nach den Klammern muss noch ein Doppelpunkt folgen.

In der nächsten Zeile beginnen dann die Anweisungen, die ausgeführt werden sollen, wenn die Bedingung erfüllt ist. Diese Anweisungen müssen eingerückt werden. Im gleich folgenden Beispiel wird noch deutlicher, warum dies wichtig ist. Ist die Bedingung nicht erfüllt, werden die Anweisungen nach dem else ausgeführt.

Sehen wir uns eine Variation des Beispiels an:

konto = 0

konto = konto + 100
konto = konto - 10

if (konto > 0):
    print('Noch Guthaben vorhanden.')
    print('Das Guthaben beträgt '+ str(konto) + ' Euro.')
else:
    print('Kein Guthaben mehr!')
    print('Es sollte wieder Geld eingezahlt werden.')
print('Ende des Programms.')

Sowohl im sogenannten if- als auch im else-Zweig werden nun zwei Anweisungen ausgeführt. Das korrekte Einrücken der Zeilen genügt, um deutlich zu machen, dass sie dem if bzw. dem else untergeordnet sind. Wie weit man die Zeilen einrückt ist irrelevant, sie müssen nur immer gleich weit eingerückt werden. Die letzte Zeile ist nicht eingerückt, so dass diese Anweisung unabhängig von der Verzweigung ist. D.h. diese Anweisung wird immer ausgeführt.

Wie wir hier also sehen, werden Code-Blöcke in Python also einzig durch Einrücken markiert. Dies zwingt uns als Programmierer ganz nebenbei dazu, unsere Programmtexte übersichtlich zu halten. Bei anderen Programmiersprachen werden oft Klammern verwendet, um Blöcke zu markieren, so dass man dort im Grunde den Text nicht einrücken müsste und so einen extrem schwer lesbaren Programmtext produzieren könnte. Das kann uns hier nicht passieren!

die_sonne_scheint = True
mehr_als_zehn_euro = True

if(die_sonne_scheint and mehr_als_zehn_euro):
    print('Ich gehe ein Eis essen.')
    print(':)')
else:
    print('Ich gehe kein Eis essen.')
    print(':(')

Hier werden zwei Wahrheitswerte verwendet, um die Bedingung zu formulieren.

Allgemein muss die Bedingung irgendein Wahrheitswert sein. In diesem Beispiel sieht man unmittelbar, dass die Bedingung die_sonne_scheint and mehr_als_zehn_euro ein Wahrheitswert ist, aber auch die Bedingung konto > 0 aus dem ersten Beispiel in ein Wahrheitswert.

Manchmal sollen nur Anweisungen ausgeführt werden, wenn die Bedingung erfüllt ist und im anderen Fall einfach gar keine. Um dies zu erreichen, kann man den else-Zweig weglassen:

die_sonne_scheint = True
mehr_als_zehn_euro = True

if(die_sonne_scheint and mehr_als_zehn_euro):
    print('Ich gehe ein Eis essen.')
    print(':)')

Verschachtelte Verzweigungen

Wir können unsere Programme noch raffinierter gestalten, indem wir innerhalb einer Verzweigung noch weitere Verzweigungen verwenden. Hier haben wir im else-Zweig noch eine weitere Verzweigung:

die_sonne_scheint = True
mehr_als_zehn_euro = True

if(die_sonne_scheint and mehr_als_zehn_euro):
    print('Ich gehe ein Eis essen.')
    print(':)')
else:
    print('Ich gehe kein Eis essen.')
    
    if(not die_sonne_scheint):
        print('Bei schlechtem Wetter schmeckt es ohnehin nicht.')
    else:
        print('Ich muss gerade ein wenig sparen.')

Falls wir kein Eis essen, wird hier geprüft, ob dies am Wetter liegt. Scheint die Sonne nicht, wird dies als Grund angegeben. Scheint sie aber, dann muss es an unserem leeren Geldbeutel liegen, dass wir kein Eis essen.

Sollte aber die Sonne nicht scheinen und wir auch noch zu wenig Geld haben, wird in unserem Programm nur das Wetter als Grund angegeben. Das sollten wir noch verschönern:

die_sonne_scheint = True
mehr_als_zehn_euro = True

if(die_sonne_scheint and mehr_als_zehn_euro):
    print('Ich gehe ein Eis essen.')
    print(':)')
else:
    print('Ich gehe kein Eis essen.')
    
    if(not die_sonne_scheint):
        
        if(not mehr_als_zehn_euro):
            print('Ich muss gerade ein wenig sparen, aber das Wetter ist ja eh schlecht.')
        else:
            print('Bei schlechtem Wetter schmeckt es ohnehin nicht.')
            
    else:
        print('Ich muss gerade ein wenig sparen.')

Wenn die Sonne nicht scheint, wird hier noch einmal geprüft, ob das Geld knapp ist. Spätestens bei dieser Verschachtelung sehen wir, dass das Einrücken sehr hilfreich ist, um den Überblick zu behalten.

elif-Anweisungen

Möchten wir eine ganze Reihe von sich gegenseitig ausschließenden Fällen betrachten, könnten wir mit tief verschachtelten Verzweigungen arbeiten.

Hier ein Beispiel, in dem abhängig vom Kontostand eine Meldung ausgegeben wird:

konto = 90

if(konto > 100):
    print('Super!')
    
else:
    if(konto > 0):
        print('OK')
    else:
            
        if(konto == 0):
            print('Pleite!')
        else:
                    
            print('Schulden!')

Die Verzweigungen müssen verschachtelt werden, da wir sonst mehrere Meldungen erhalten könnten.

Für solche Fälle gibt es aber eine etwas elegantere Lösung. Das immer weiter Verschachteln durch ein if das auf ein else folgt, kann man auch mit elif erreichen. Dies spart uns das immer weitere Einrücken:

konto = 90

if(konto > 100):
    print('Super!')    
elif(konto > 0):
    print('OK')
elif(konto == 0):
    print('Pleite!')
else:
    print('Schulden!')