Routineaufgaben mit Python automatisieren. Al Sweigart
Wenn der Benutzer einen anderen Namen als Joe eingibt (
Abb. 2–12Das Flussdiagramm für das Programm swordfish.py. Der mit X markierte Pfad wird nie erreicht, da die Schleifenbedingung stets True ist.
»Truthy«- und »Falsey«-Werte
Es gibt auch einige Werte anderer Datentypen, die in Bedingungen als gleichwertig mit True und False angesehen werden. In Bedingungen gelten 0, 0.0 und '' (ein leerer String) als False, alle anderen Werte dagegen als True. Betrachten Sie beispielsweise das folgende Programm:
name = ''
while not name:
print('Enter your name:')
name = input()
print('How many guests will you have?')
numOfGuests = int(input())
if numOfGuests:
print('Be sure to have enough room for all your guests.')
print('Done')
Die Ausführung dieses Programms können Sie sich auf https://autbor.com/howmanyguests/ ansehen. Wenn der Benutzer einen leeren String für name eingibt, dann ist die Bedingung der while-Anweisung True (
Sie könnten auch not name != '' statt not name und numOfGuests != 0 statt numOfGuests schreiben, aber mit den sogenannten Truthy- und Falsey-Werten wird der Code übersichtlicher.
Führen Sie das Programm swordfish.py aus und machen Sie einige Eingaben. Erst wenn Sie sich als Joe vorstellen, werden Sie nach dem Passwort gefragt. Nachdem Sie das richtige Passwort eingegeben haben, endet das Programm.
Who are you?
I'm fine, thanks. Who are you?
Who are you?
Joe
Hello, Joe. What is the password? (It is a fish.)
Mary
Who are you?
Joe
Hello, Joe. What is the password? (It is a fish.)
swordfish
Access granted.
Die Ausführung dieses Programms können Sie sich auf https://autbor.com/hellojoe/ ansehen.
For-Schleifen und die Funktion range()
While-Schleifen werden durchlaufen, solange die Bedingung True ist. Was aber machen Sie, wenn Sie einen Codeblock eine bestimmte Anzahl von Malen ausführen wollen? Das können Sie mit der Anweisung for und der Funktion range() erreichen.
Eine for-Anweisung hat die Form for i in range(5) und weist die folgenden Bestandteile auf:
Das Schlüsselwort for
Einen Variablennamen
Das Schlüsselwort in
Einen Aufruf der Methode range(), wobei bis zu drei Integer übergeben werden können
Einen Doppelpunkt
Einen eingerückten Codeblock (die for-Klausel), der in der nächsten Zeile beginnt
Um uns eine for-Schleife in Aktion anzusehen, schreiben wir das Programm five-Times.py:
print('My name is')
for i in range(5):
print('Jimmy Five Times (' + str(i) + ')')
Die Ausführung dieses Programms können Sie sich auf https://autbor.com/fivetimesfor/ ansehen. Der Code in der for-Klausel wird fünfmal ausgeführt. Beim ersten Mal hat die Variable i den Wert 0. Der Aufruf von print() in der Klausel gibt daher Jimmy Five Times (0) aus. Nach einem kompletten Durchlauf durch den Code in der Klausel wird die Ausführung wieder am Anfang der Schleife fortgesetzt und i um 1 erhöht. Die Funktion range(5) ruft fünf Iterationen durch die Klausel hervor, da i nacheinander auf 0, 1, 2, 3 und 4 gesetzt wird. Die Variable wird erhöht, bis die nächste Erhöhung den an range() übergebenen Wert erreichen würde. Das Flussdiagramm für fiveTimes.py sehen Sie in Abb. 2–13.
Abb. 2–13 Das Flussdiagramm für fiveTimes.py
Wenn Sie das Programm ausführen, gibt es fünfmal Jimmy Five Times jeweils gefolgt von dem Wert von i aus, bevor es die Schleife verlässt.
My name is
Jimmy Five Times (0)
Jimmy Five Times (1)
Jimmy Five Times (2)
Jimmy Five Times (3)
Jimmy Five Times (4)
Hinweis
Auch in for-Schleifen können Sie die Anweisungen break und continue verwenden. Dabei sorgt eine continue-Anweisung dafür, dass das Programm mit dem nächsten Wert des Schleifenzählers fortfährt, als wäre die Ausführung