Routineaufgaben mit Python automatisieren. Al Sweigart
Else-Anweisungen
Auf eine if-Klausel kann optional auch eine else-Anweisung folgen. Die else-Klausel wird nur dann ausgeführt, wenn die Bedingung der if-Anweisung False ist. Eine else-Anweisung entspricht also folgender Formulierung: »Wenn diese Bedingung wahr ist, führe diesen Code aus, wenn nicht, dann jenen Code.« Die else-Anweisung braucht keine Bedingung. Sie weist immer die folgenden Bestandteile auf:
Das Schlüsselwort else
Einen Doppelpunkt
Einen eingerückten Codeblock (die else-Klausel), der in der nächsten Zeile beginnt
In unserem Alice-Beispiel können wir eine else-Anweisung verwenden, um eine andere Begrüßung anzuzeigen, wenn die Person nicht den Namen Alice hat:
if name == 'Alice':
print('Hi, Alice.')
else:
print('Hello, stranger.')
Das Flussdiagramm für diesen Code sehen Sie in Abb. 2–3.
Abb. 2–3Flussdiagramm einer else-Anweisung
Elif-Anweisungen
Bei den bisherigen Anweisungen wird entweder die if- oder die else-Klausel ausgeführt, doch es kann auch der Fall sein, dass Sie eine von vielen möglichen Klauseln ausführen lassen wollen. Die elif-Anweisung (»else if«) kann hinter einer if- oder einer anderen elif-Anweisung stehen, um eine weitere Bedingung zu prüfen, falls die vorherigen alle False waren. Eine elif-Anweisung weist immer folgende Bestandteile auf:
Das Schlüsselwort elif
Eine Bedingung (einen Ausdruck, der zu True oder False ausgewertet wird)
Einen Doppelpunkt
Einen eingerückten Codeblock (die elif-Klausel), der in der nächsten Zeile beginnt
Um die elif-Anweisung in Aktion zu erleben, fügen wir sie unserem Namensprüfungsprogramm hinzu:
if name == 'Alice':
print('Hi, Alice.')
elif age < 12:
print('You are not Alice, kiddo.')
Dieses Mal wird das Alter der Person geprüft, und wenn sie jünger als 12 ist, teilt das Programm ihr etwas anderes mit. Das Flussdiagramm dafür sehen Sie in Abb. 2–4.
Abb. 2–4Flussdiagramm einer elif-Anweisung
Die elif-Klausel wird ausgeführt, wenn age < 12 den Wert True ergibt und name == 'Alice' den Wert False. Wenn aber beide Bedingungen False sind, dann werden beide Klauseln übersprungen. Es gibt keine Garantie dafür, dass wenigstens eine ausgeführt wird. Bei einer Kette von elif-Anweisungen wird höchstens eine einzige davon ausgeführt. Sobald eine Bedingung dieser Anweisungen zu True ausgewertet wird, werden alle restlichen elif-Klauseln verworfen. Um sich das in einem Beispiel anzusehen, öffnen Sie ein neues Dateieditorfenster, geben den folgenden Code ein und speichern ihn als vampire.py:
name = 'Carol'
age = 3000
if name == 'Alice':
print('Hi, Alice.')
elif age < 12:
print('You are not Alice, kiddo.')
elif age > 2000:
print('Unlike you, Alice is not an undead, immortal vampire.')
elif age > 100:
print('You are not Alice, grannie.')
Die Ausführung dieses Programms können Sie sich auf https://autbor.com/vampire/ ansehen. Hier habe ich zwei weitere elif-Anweisungen hinzugefügt, damit das Programm die Person auf der Grundlage des Wertes von age mit verschiedenen Meldungen begrüßt. Das Flussdiagramm dafür sehen Sie in Abb. 2–5.
Abb. 2–5Flussdiagramm für das Programm vampire.py mit mehreren elif-Anweisungen
Dabei kommt es jedoch auf die Reihenfolge der elif-Anweisungen an. Um das zu zeigen, ordnen wir sie um, sodass sich ein Fehler ergibt. Da alle restlichen elif-Klauseln verworfen werden, sobald eine wahre Bedingung gefunden wurde, führt eine Umsortierung der Klauseln in vampire.py zu einem Problem. Ändern Sie den Code wie folgt und speichern Sie diese Version als vampire2.py:
name = 'Carol'
age = 3000
if name == 'Alice':
print('Hi, Alice.')
elif age < 12:
print('You are not Alice, kiddo.')
elif age > 100:
print('You are not Alice, grannie.')
elif age > 2000:
print('Unlike you, Alice is not an undead, immortal vampire.')
Die Ausführung dieses Programms können Sie sich auf https://autbor.com/vampire2/ ansehen. Nehmen wir nun an, die Variable age enthält vor der Ausführung dieses Codes den Wert 3000, dann könnte man glauben, dass das Programm deshalb den String 'Unlike you, Alice is not an undead, immortal vampire.' ausgibt. Allerdings hat schon die Bedingung age > 100 den Wert True (schließlich ist 3000 größer als 100) (
Abb. 2–6 zeigt das Flussdiagramm für den vorstehenden Code. Die Rauten für age > 100 und age > 2000 sind hier vertauscht.
Optional können Sie hinter der letzten elif-Anweisung noch eine else-Anweisung einfügen. In diesem Fall wird garantiert genau eine Klausel ausgeführt. Wenn die Bedingungen in sämtlichen if- und elif-Anweisungen False sind, wird die else-Klausel ausgeführt. Bauen wir unsere Alice-Beispiel noch ein wenig um, sodass es if-, elif- und else-Klauseln verwendet:
name = 'Carol'
age = 3000
if name == 'Alice':
print('Hi, Alice.')
elif age < 12:
print('You are not Alice, kiddo.')
else:
print('You are neither Alice nor a little kid.')
Speichern