Schleifen

Einführung

Wie du sicher bemerkt hast, enthalten unsere Programme oft Wiederholungen. In Python gibt es ein mächtiges Konzept genannt Schleifen (Jargon: Iterationen), welches wir später genauer erkunden werden. Probieren wir doch zunächst mal dieses simple Beispiel aus:

for name in "John", "Sam", "Jill":
    print("Hello " + name)

Dies ist außerordentlich hilfreich wenn wir etwas mehrere Male tun möchten — beispielsweise die Umrandung einer geometrischen Form zeichnen — aber den Programmcode dafür nur einmal schreiben möchten. Hier ist eine andere Version einer Schleife:

for i in range(10):
    print(i)

Beachte dass wir nur eine einzige Programme Zeile mit i schreiben, es aber 10 unterschiedliche Werte annimmt.

Die range(n)-Funktion kann man als eine Abkürzung für 0, 1, 2, ..., n-1 sehen. Falls du mehr über sie wissen möchtest kannst du die Hilfe im Pythoninterpreter benutzen indem du help(range) tippst. Benutz die q-Taste um die Hilfe wieder zu verlassen.

Du kannst auch Elemente Deiner Wahl in einer Schleife verarbeiten:

total = 0
for i in 5, 7, 11, 13:
    print(i)
    total = total + i

print(total)

Schreib das Beispiel aus und führ es mit Python aus um zu überprüfen, ob es so funktioniert wie du möchtest.

Bemerkung

Beachte wie oben die Zeilen, die wiederholt werden, die sind die eingerückt sind. Das ist ein wichtiges Konzept in Python - das ist wie es weiß welche Zeilen zur for-Schleife gehören und welche danach kommen, als Rest des Programms. Benutz vier Leerzeichen (drück Tab) um deinen Quelltext einzurücken.

Manchmal möchtest du Code wiederholen aber scherst dich nicht um den Wert von der Variable i; hier bietet es sich an diese durch _ zu ersetzen. Das macht deutlich, dass uns der Wert egal ist, oder wir ihn nicht benutzen. Hier ist ein einfaches Beispiel:

for _ in range(10):
    print("Hello!")

Du magst dich vielleicht über die Variable i wundern oder auch nicht – warum wird sie oben die ganze Zeit verwendet? Nunja, sie steht einfach für “index” und ist der häufigste Variablenname den man überhaupt in Quelltext findet. Aber wenn du eine Schleife über etwas anderes als nur Zahlen ausführst, wähle besser einen anderen Namen. Zum Beispiel:

for drink in list_of_beverages:
    print("Would you like a " + drink + "?")

Das ist sofort klarer zu verstehen als wenn wir i statt drink benutzt hätten.

Eine gestrichelte Linie zeichnen

Übung

Zeichne eine gestrichelte Linie. Du kannst die Schildkröte bewegen ohne dass sie zeichnet, indem Du die Funktion turtle.penup() aufrufst; um sie wieder zeichnen zu lassen, verwende turtle.pendown().

_images/dashed.png

Lösung

for i in range(10):
    turtle.forward(15)
    turtle.penup()
    turtle.forward(5)
    turtle.pendown()

Bonus

Kannst du die Striche immer größer werden lassen?

_images/dashedprogressing.png

Hinweis

Verwirrt? Schau dir i in jedem Schleifendurchlauf an:

for i in range(10):
    print(i)
    # write more code here

Kannst du i — üblicherweise als Index- oder Schleifenvariable bezeichnet — benutzen um immer größere Schritte zu machen?

Kommentare

Im obigen Beispiel wird die Zeile die mit # anfängt ein Kommentar genannt. In Python wird alles das auf der Zeile nach # folgt ignoriert. Benutz Kommentare um zu erklären was dein Programm macht ohne das Programmverhalten zu verändern. Sie können auch benutzt werden um kurzzeitig Quelltext zu deaktiveren, oder “auszukommentieren”.

Kommentare können auch an das Zeilenende gepackt werden, wie hier:

turtle.left(20)     # tilt our next square slightly

Effizientere Quadrate

Übung

Die Quadrate die wir am Anfang des Materials gemalt haben erforderten viele wiederholten Quelltextzeilen. Kannst du ein Programm zum Malen von Quadraten mit weniger Zeilen schreiben wenn du Schleifen benutzt?

Lösung

for _ in range(4):
    turtle.forward(100)
    turtle.left(90)

Bonus

Probier Schleifen zu verschachteln (nesting) indem du eine direkt in die andere packst, mit einigen Malanweisungen die in beiden drin sind. Das könnte in etwa so aussehen:

for ...:
    for ...:
        # drawing code inside the inner loop goes here
        ...
    # you can put some code here to move
    # around after!
    ...

Ersetz ... mit deinem eigenen Quelltext und schau, ob du etwas lustiges oder interessantes erstellen kannst. Fehler sind erwünscht!