K103: Zählschleifen mit for und range()

In diesem Themenblock lernst du, wie man in Python einfache for Schleifen und damit beeindruckende Grafiken erstellen kann. Bei den nachfolgenden Aufgaben geht es auch darum, das grundsätzliche Konzept von Schleifen kennen zu lernen.

Inhaltsverzeichnis

Dieser Blog wird vom IAIP gratis zur Verfügung gestellt. Der Blog ist ein  Bestandteil des Kurses K103 «Programmieren mit Turtle Graphics» und gehört zur Lektion 7, Themenblock 1 (L7T1).

Der Kurs führt dich durch die einzelnen Blogs, enthält Zusatzmaterialien, Videos, viele Aufgaben mit Lösungen und Quizze zur Lernkontrolle. Der Kurs hat eine Kursgebühr von CHF 50.- Mit dem Einschreiben zum Kurs hilfst du mit, dass solche Blogs auch zukünftig noch gratis zur Verfügung gestellt werden können.

Einordnung

In diesem Themenblock beginnen wir uns mit Schleifen (wir verwenden hier die Begriffe «Schleifen» und «Schlaufen» gleichbedeutend) zu beschäftigen. Sie dienen dazu, einen gewissen Anweisungsblock mehrmals ausführen zu lassen.

Schleifen gehören neben den bedingten Anweisungen und Verzweigungen (if, if-else Befehle) zu den Kontrollstrukturen von Python. 

Die for ... in range() Schleife

Um was geht es bei Schleifen (oder auch Schlaufen)? Bis anhin hat Python für uns ein Programm ausgeführt und dabei der Reihe nach eine Anweisung nach der anderen abgearbeitet. Betrachten wir beispielsweise das folgende Programm:

from turtle import *

forward(100)
left(120)
forward(100)
left(120)
forward(100)
left(120)

exitonclick()

Das Programm zeichnet das bekannte gleichseitige Dreieck. Speziell an diesem Anweisungsblock ist, dass Python drei Mal genau dasselbe machen muss, nämlich 100 Schritte geradeaus gehen und 120 Grad nach links drehen. Einfacher wäre es, wenn wir Python sagen können, dass etwas wiederholt werden soll. Beispielsweise so:

wiederhole 3x:
– forward(100)
– left(120)

Wiederholte Anweisungen setzt man in Python mit sogenannten Schleifen (oder Schlaufen, manchmal spricht man auch von Iteratoren) um. Genau genommen gibt es in Python 2 Schleifentypen, namentlich die for Schleife und die while Schleife. Sie funktionieren ähnlich, an dieser Stelle betrachten wir aber nur die for Schleife.

Wie Schleifen arbeiten, sieht man am besten an einem Beispiel:

from turtle import *

for i in range(3):
    forward(100)
    right(120)

exitonclick()

Das Programm gibt erneut unser bekanntes Dreieck auf dem Bildschirm aus (dieses Mal haben wir nach rechts gedreht).

Dreieck

Wie funktioniert das? Als erstes müssen wird Python sagen, dass etwas wiederholt werden soll. Und natürlich auch, wie oft es wiederholt werden soll. Das machen wir mit dem Wort for, dann einen beliebigen Variablennamen, gefolgt von in und range(Anzahl Mal):

for variablen in range(anzahl):

Die Anweisung besteht aus 4 Teilen:

  1. for 
    Das Wort for ist ein sogenanntes Schlüsselwort. Es sagt Python, dass es sich beim Nachfolgenden um eine Wiederholung handelt. Deshalb muss es auch an erster Stelle stehen.
  2. variable
    Als nächstes kommt eine Variable. Das kann ein beliebiger Name sein. Beispielsweise i, aber auch Auto, Mister_x, etc. Genau genommen ist es ein Name, welcher auf ein Objekt verweist. Wozu dieser Name genau dient, werden wir später noch sehen. Hier ist erste einmal wichtig, dass es etwas braucht. Der Einfachheit halber schreiben wir nur einen einzelnen Buchstaben, hier ein i.
  3. in range(anzahl)
    Dann schreiben wir, wie oft etwas wiederholt werden soll. Für 3 Wiederholungen notieren wir in range(3), für 5 Wiederholungen in range(5) etc.
  4. :
    Am Ende steht ein Doppelpunkt! Bitte beachten, denn der Doppelpunkt geht am Anfang gerne mal vergessen.

Nachdem Python nun weiss, dass etwas wiederholt werden soll, müssen wir Python noch sagen, was es genau wiederholen soll. Das machen wir, indem wir die zu wiederholenden Anweisungen einrücken (in Python spricht man von Identation). Wichtig dabei ist, dass wir die zu wiederholenden Anweisungen immer genau gleich viel einrücken. Wie viel man die Anweisungen genau einrückt ist egal, aber es muss immer gleich viel sein (zur guten Praxis gehört eine Einrückung von 4 Leerschlägen).

Zu Illustration nachfolgend das oben bereits dargestellte Programm mit einem klassischen Fehler:

from turtle import *

for i in range(3):
    forward(100)
right(120)

exitonclick()

Was ist falsch? Die Anweisung right(120) ist nicht eingerückt. Python wird in diesem Fall 3x die Anweisung forward(100) wiederholen. Dann ist die Schleife beendet (alle eingerückten Bewegungen sind 3x abgearbeitet) und der normale (sequentielle) Programmablauf wird fortgesetzt.

Löse nun als nächstes die unten stehenden Aufgaben. Zur Wiederholung:

  • Mit for sagen wir Python, dass ein Anweisungsblock mehrere Male wiederholt werden soll.
  • Nach dem for benötigen wir einen Variablennamen. Wir nehmen hier momentan einen einfachen Buchstaben wie i, j oder k (das ist typisch für sogenannte Zählschleifen).
  • Anschliessend kommt in range(). In die Klammern schreibt man die Anzahl Wiederholungen.
  • Doppelpunkt nicht vergessen!
  • Das, was wiederholt werden soll, wird anschliessend eingerückt. Und zwar immer genau gleich viel.

Noch einen letzten Hinweis zur Terminologie (zu der gebräuchlichen Bezeichnung): Die erste Zeile nennt man auch den Schleifenkopf, die eingerückten, zu wiederholenden Zeilen nennt man den Schleifenrumpf oder Schleifenkörper.

Übungsaufgaben

Nachfolgend findest Du ein paar Übungsaufgaben. 

Lösungen zu den Aufgaben findest du im Kurs K103 «Programmieren mit Turtle Graphics «: 
Lektion 7, Themenblock 1 (L7T1)

Aufgabe 1: ein Viereck

Das rechts abgebildete Programm soll ein Viereck (ein Quadrat) zeichnen. Es hat aber einige Fehler. Korrigiere es!

from turtle import *
 
for i in range(4) 
forward(150) 
right(90) 
      
exitonclick()

Aufgabe 2: eine Sechseck

Versuche das rechts abgebildete Sechseck nachzuzeichnen. Du kannst die Längen der Strecken selber wählen.

Hinweis: Alternativ könnte man es auch über die circle() Anweisung realisieren, beispielsweise mit circle(-100, 360, 6). Hier wollen wir aber Anweisungen wiederholen.

Sechseck

Aufgabe 3: Vom Viereck zum 8-Eck

Studiere das abgebildete Programm. Das Programm zeichnet ein Quadrat. Ändere das Programm so, dass ein 8 Eck entsteht.

Tipp: Du musst die Anzahl Wiederholungen und den Winkel ändern.Bei einem 8-Eck muss man nicht 90 Grad sondern jeweils 45 Grad drehen. 

Am Ende muss man immer 360 Grad gedreht haben. Bei einem Viereck dreht man somit total 4 x 90 = 360 Grad. Bei einem 8-Eck dreht man total 8 x 45 = 360 Grad.

from turtle import *

for i in range(4):
  forward(100)
  right(90)
  
exitonclick()

Aufgabe 4: 10-Eck mit variabler Grösse

Studiere das abgebildete Programm. Es arbeitet mit Variablen. Gedacht ist, dass man am Anfang des Programms die Länge und damit die Grösse des 10- Ecks definieren kann. Aber Achtung! Irgendetwas stimmt nicht. Korrigiere das Programm. Probiere es mit einer Länge von 200 aus.

from turtle import *

# Variablen definieren
länge = 100
winkel = 360/10

# Vieleck zeichnen
for i in range(10):
  forward(100)
  right(winkel)

Aufgabe 5: Vom Viereck zum Vieleck

Studiere das abgebildete Programm. Es arbeitet wiederum mit Variablen. Gedacht ist, dass man am Anfang des Programms die Länge und auch die Anzahl Ecken definieren kann. Aber Achtung! Irgendetwas stimmt nicht. Korrigiere das Programm.

from turtle import *

# Variablen definieren
länge = 100
ecken = 12
winkel = 360/ecken

# Vieleck zeichnen
for i in range(4)
  forward(lange)
right(90)

Aufgabe 6: Zwei Vierecke (Identation)

Erstelle ein Programm, welches die abgebildeten 2 Vierecke zeichnet.

Aufgabe 7: Ein Stern

Versuche den rechts abgebildeten Stern zu zeichnen.

Tipp: Der Stern hat 5 Striche und die Turtle dreht sich insgesamt 2x um sich selber (720 Grad)

Aufgabe 8: viele Kreise

Versuche die rechts abgebildete Figur nachzustellen.

Hinweis: Es sind insgesamt 20 Kreise, wobei man nach jedem Kreis jeweils etwas dreht. Wieviel? Am Ende müssen es wiederum 360 Grad sein!

20 Kreise

Aufgabe 9: viele Kreise - Zusatzaufgabe

Versuche die rechts abgebildete Figur nachzuzeichnen

Hinweis: Man muss die Turtle nur etwas verschieben, dass sie nicht immer an Ort und Stelle dreht. Hierzu muss du einfach nur ein paar Schritte geradeaus gehen.

20 Kreise mit Abstand

Aufgabe 11: viele Stäbe

Versuche die rechts abgebildete Figur nachzuzeichnen.

Hinweis: Zeichne zuerst ein einzelnes Element (einen einzelnen Stab) und gehe entlang des Stabes wieder zurück zur Mitte. Dann drehe die Turtle leicht.

Aufgabe 12: Masteraufgabe

Versuche die rechts abgebildete Figur nachzuzeichnen

Hinweis: Das Grundelement ist identisch zur vorangehenden Aufgabe. Der Mittlere Strich wird einfach nicht gezeichnet.

Comments