Ga naar hoofdinhoud

Stap 4: Vier schildpadden (een lijst)

info

Deze stap gebruikt lijsten uit Lijsten, en in het voorbeeld right uit Lijnen en hoeken. Een loop over een lijst met een variabele die elke ronde verandert, deed je al in Een regenboog.

Voor twee schildpadden schreef je alles twee keer. Met vier wordt het klaarzetten lang: elke schildpad moet met de pen omhoog naar zijn baan, en daar de pen weer omlaag. Dat stuk is voor elke schildpad hetzelfde, en dus werk voor een loop.

Daarvoor zet je de schildpadden in een lijst. In een lijst mag alles staan, ook schildpadden:

import turtle

rood = turtle.Turtle()
rood.pencolor("red")
rood.left(30)

blauw = turtle.Turtle()
blauw.pencolor("blue")
blauw.right(30)

schildpadden = [rood, blauw]

for schildpad in schildpadden:
schildpad.forward(100)
import turtle

rood = turtle.Turtle()
rood.pencolor("red")
rood.left(30)

blauw = turtle.Turtle()
blauw.pencolor("blue")
blauw.right(30)

schildpadden = [rood, blauw]

for schildpad in schildpadden:
    schildpad.forward(100)

De loop gaat de lijst langs: eerst is schildpad de rode, daarna de blauwe. Elk loopt 100 stappen, in zijn eigen richting en met zijn eigen kleur.

Opdracht: vier op een rij​

Plak je programma uit stap 3 in het veld. Ben je het kwijt, neem dan de oplossing van stap 3.

Pas je programma zo aan dat:

  1. er vier schildpadden meedoen: rood, blauw, oranje en paars, met een pen in de kleur "red", "blue", "orange" en "purple";
  2. ze in een lijst schildpadden staan;
  3. een for-loop over die lijst ze naar de start brengt: de rode op (-220, 90), en elke volgende baan 60 lager, dus de blauwe op (-220, 30), de oranje op (-220, -30) en de paarse op (-220, -90);
  4. ze in de race om de beurt een stap zetten, net als in stap 3, zolang ze alle vier nog vóór de streep staan.

Vier gekleurde lijnen naar de finishlijn; de rode en de oranje zijn er allebei net overheen

Bij jou loopt de race anders dan op het plaatje.

# Plak hier je programma uit stap 3
Klik hier voor een tip.

De kleur geef je elke schildpad meteen als je hem maakt, zoals in stap 3. In de loop over de lijst doe je alleen wat voor elke schildpad hetzelfde is. Alleen de hoogte van de baan verschilt: houd die bij in een variabele y die na elke schildpad 60 kleiner wordt, zoals bij de regenboog. De race schrijf je nog met vier regels, één per schildpad.

Klik hier voor de oplossing.
import turtle
import random

turtle.penup()
turtle.goto(80, 130)
turtle.pendown()
turtle.goto(80, -130)
turtle.hideturtle()

rood = turtle.Turtle()
rood.pencolor("red")
blauw = turtle.Turtle()
blauw.pencolor("blue")
oranje = turtle.Turtle()
oranje.pencolor("orange")
paars = turtle.Turtle()
paars.pencolor("purple")

schildpadden = [rood, blauw, oranje, paars]

y = 90
for schildpad in schildpadden:
schildpad.penup()
schildpad.goto(-220, y)
schildpad.pendown()
y -= 60

while rood.xcor() < 80 and blauw.xcor() < 80 and oranje.xcor() < 80 and paars.xcor() < 80:
rood.forward(random.randint(1, 20))
blauw.forward(random.randint(1, 20))
oranje.forward(random.randint(1, 20))
paars.forward(random.randint(1, 20))

De regel met while is lang, maar hij zegt hetzelfde als in stap 3: de race gaat door zolang niemand over de streep is.

Er gaat iets mis​

Alle vier de schildpadden lopen bovenaan, in dezelfde baan.

Oorzaak: y -= 60 staat niet ingesprongen. Dan hoort hij niet bij de for-loop maar komt hij erna, en is y voor elke schildpad nog 90.

Oplossing: spring y -= 60 in, net als de regels erboven. Dan wordt y na elke schildpad 60 kleiner.

Kopieer je programma voordat je verdergaat: de editor bewaart het niet.

Door naar stap 5: om de beurt.