Читать книгу Routineaufgaben mit Python automatisieren - Al Sweigart - Страница 66

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) (). Daher wird der String 'You are not Alice, grannie.' ausgegeben und der Rest der elif-Anweisungen übersprungen. Merken Sie sich, dass höchstens eine Klausel ausgeführt wird und dass es auf die Reihenfolge der elif-Anweisungen ankommt.

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 Sie diesen Code als littleKid.py. Das Flussdiagramm sehen Sie in Abb. 2–7, die Ausführung dieses Programms auf https://autbor.com/littlekid/.

In Alltagssprache formuliert, lautet diese Flusssteuerungsstruktur wie folgt: »Wenn die erste Bedingung wahr ist, tu dies. Ist dagegen die zweite Bedingung wahr, tu jenes. Anderenfalls mach etwas anderes.« Wenn Sie alle drei Anweisungen kombinieren, müssen Sie sich an die Regeln für die Reihenfolge halten, damit Sie keine Fehler wie den aus Abb. 2–6 einbauen. Erstens muss es immer genau eine if-Anweisung geben. Jegliche elif-Anweisungen, die Sie brauchen, folgen auf die if-Anweisung. Zweitens: Wenn Sie sicherstellen wollen, dass mindestens eine Klausel ausgeführt wird, müssen Sie die Struktur mit einer else-Anweisung abschließen.

Abb. 2–6Das Flussdiagramm für das Programm vampire2.py. Der durchgestrichene Pfad kann logisch nie erreicht werden, denn wenn der Wert von age größer als 2000 ist, so ist er bereits größer als 100.

Abb. 2–7 Das Flussdiagramm für das Programm littleKid.py

Routineaufgaben mit Python automatisieren

Подняться наверх