Die kleine Schildkröte (2)

Bei unserem letzten Programm haben wir Ella immer wieder abwechselnd die selben zwei Befehle gegeben:

forward(100)
left(90)

Würde man ein langes Programm auch schreiben, in dem man alle Schritte einzeln aufzählt, müsste man ziemlich lange programmieren. Deshalb können wir Ella sagen, dass sie Befehle wiederholen soll. Das sieht so aus:

from turtle import *
shape("turtle")
for i in range(4):
   forward(100)
   left(90) 

Das Programm kannst Du wieder mit dem grünen „Run >“-Knopf starten.

Achte darauf, dass Du die beiden Befehle „forward(100)“ und „left(90)“ mit ein paar Leerzeichen am Anfang der Zeile einrückst. So sieht Ella, welche Befehle sie wiederholen soll. Wenn Du in der „console“ die Fehlermeldung „IndentationError“ bekommst, dann sind die Zeilen nicht richtig eingerückt und Ella weiß nicht, was sie tun soll.

range(4)“ bedeutet, dass die Befehle vier Mal wiederholt werden sollen. Solch eine Wiederholung nennen Programmierer „Schleife“. Wenn Du mit dem Finger auf die Programmzeilen zeigst, die ausgeführt werden sollen, malst Du nämlich vier Schleifen in die Luft.

Jetzt können wir Ella auch längere Aufgaben geben. Ändere dazu die Zahlen in dem Programm wie auf diesem Bild zu sehen:

from turtle import *
shape("turtle")
for i in range(40):
   forward(10)
   left(9) 

Jetzt wiederholt Ella die Schleife 40 Mal. Stell Dir vor, wir hätten das alles eintippen müssen! Die Schritte haben wir etwas kürzer gemacht, und bei jedem Schritt dreht Ella sich nur ein paar Grad. Dadurch sieht es fast so aus, als hätte Ella einen Kreis gemalt. Unser Programm hat aber eigentlich nur ein 40-Eck gemalt.

Wir haben in diesem Programm mehrere Werte verändert, damit Ella ein 40-Eck malt:

  • Wir haben Ella mehr Schleifendurchläufe machen lassen als beim Quadrat: 40 statt 4
  • Jeder Vorwärtsschritt war kürzer, 10 statt 100
  • Ella hat sich an jeder Ecke nur 9 Grad gedreht statt 90 Grad

Beim Quadrat hatten wir 4 Drehungen um 90 Grad. Beim 40-Eck waren es 40 Drehungen um 9 Grad. Die Winkel müssen zusammen 360 Grad ergeben, damit Ella eine ganze Runde läuft:
4 × 90 = 40 × 9 = 360
Auch die Schrittlänge haben wir der Anzahl der Ecken angepasst. Damit die Bilder gut auf das Zeichenblatt passt, waren alle Schritte zusammen 400 lang:
4 × 100 = 40 × 10 = 400
Wenn wir ein Achteck zeichnen wollen, dann müssen wir wieder drei Werte verändern:

Beim Quadrat hatten wir 4 Drehungen um 90 Grad. Beim 40-Eck waren es 40 Drehungen um 9 Grad. Die Winkel müssen zusammen 360 Grad ergeben, damit Ella eine ganze Runde läuft:
4 × 90 = 40 × 9 = 360
Auch die Schrittlänge haben wir der Anzahl der Ecken angepasst. Damit das Vieleck gut auf das Zeichenblatt passt, waren alle Schritte zusammen 400 lang:
4 × 100 = 40 × 10 = 400
Wenn wir ein Achteck zeichnen wollen, dann müssen wir wieder drei Werte verändern:

  • 8 Schleifenwiederholungen
  • 360 : 8 = 45 Grad Drehwinkel
  • 400 : 8 = 50 Schrittlänge

Das Programm sieht dann so aus:

from turtle import *
shape("turtle")
for i in range(8):
    forward(50)
    left(45) 

Aber wäre es nicht schöner, wenn Ella für uns ausrechnet, wie weit sie sich drehen soll? Dazu lernen wir Variablen kennen. Variablen sind so etwas wie kleine Kreidetafeln, auf der Ella sich Dinge merken kann. Die Kreidetafeln haben einen Namen, damit Ella sich auch noch daran erinnert, was sie sich merken will. Mit dem Befehl ecken=8 schreiben wir auf die Kreidetafel eine 8. Immer, wenn Ella auf die Tafel schauen soll, schreiben wir den Namen der Tafel in unser Programm. Außerdem müssen wir jetzt Ella sagen, wie sie ausrechnet, wie weit sie laufen soll und wie weit sie sich drehen soll. Statt eines Doppelpunktes, wie wir in Deutschland „geteilt durch“ schreiben, versteht Ella nur das englische Zeichen für das Teilen: den Schrägstrich „/“. Fünf geteilt durch drei schreibt man dann so: 5 / 3

from turtle import *
shape("turtle")
ecken = 8
for i in range(ecken):
    forward( 400 / ecken )
    left( 360 / ecken )

Ich habe in diesem Programm „ecken“ klein geschrieben, weil Programmierer Variablen meist mit Kleinbuchstaben schreiben. Du kannst es auch richtig schreiben: „Ecken“ – auch dann funktioniert das Programm. Wichtig ist nur, dass Du es immer gleich schreibst!

Wenn Ella nun den Befehl forward( 400 / ecken ) sieht, dann schaut sie zuerst auf ihre Kreidetafel und setzt den Wert ein, der auf der Tafel steht: forward( 400 / 8 ). Dann rechnet Ella die Rechenaufgabe aus.
400 geteilt durch 8 ist 50: forward( 50 ). Nun weiß sie, wie weit sie gehen muss und geht 50 Schritte nach vorne.

Wenn Du jetzt ein Sechseck zeichnen willst, musst Du das Programm nur noch an einer Stelle ändern. Probier es aus!

Ella kann sich nicht nur einmal eine Zahl auf die Kreidetafel schreiben, sie kann sie auch auswischen und eine neue Zahl drauf schreiben. Schau Dir dieses Programm an:

from turtle import *
shape("turtle")
schritt = 1
for i in range(100):
  forward( schritt )
  left(10)
  schritt = schritt + 1

Bei jeder Wiederholung der Schleife sieht Ella diesen Befehl: schritt = schritt + 1. Sie erkennt an dem Anfang des Befehls, dass sie einen neuen Wert auf die Tafel schreiben soll: schritt =. Dann sieht sie eine Rechenaufgabe: schritt + 1. Und schritt ist der Name einer Kreidetafel, also schaut Ella auf die Tafel und schreibt den Wert von der Tafel in die Aufgabe. Beim ersten Mal lautet die Aufgabe dann 1+1. Das ist 2.
Also schreibt Ella auf die Kreidetafel nun den Wert 2. Beim nächsten Schleifendurchlauf liest sie wieder die Tafel ab und setzt die Zahl in die Aufgabe ein: 2+1. Das ist 3. Also schreibt Ella eine 3 auf die Tafel. In jedem Schleifendurchlauf macht Ella also einen etwas längeren Schritt. Die Figur, die Ella nun zeichnet, heißt Spirale.

Schauen wir uns den Schleifenbefehl noch einmal genauer an:

for i in range(100):

Als wir den Schleifenbefehl das erste Mal benutzt haben, habe ich das „i“ nicht erklärt. „i“ ist auch eine Variable (Ich werde jetzt das Wort Variable für die Kreidetafeln verwenden). Bisher haben wir die Variable „i“ noch nicht benutzt. Diese Variable ist aber sehr nützlich: Bei jedem Schleifendurchlauf zählt Ella diese Variable selbst hoch, ohne dass wir einen Befehl dafür schreiben müssen. Außerdem muss diese Variable nicht „i“ heißen, wir können sie auch in schritt umbenennen.

from turtle import *
shape("turtle")
for schritt in range(100):
   forward( schritt )
   left(10)

Jetzt haben wir genug gelernt, um auf der nächsten Seite zu lernen, wie wir Ella neue Befehle beibringen können.