Stap 1: Eén schildpad (random)
Dit project komt na de lijn Tekenen met turtle; maak die eerst af. Daaruit ken je forward (Lijnen en hoeken), penup en pendown (Een huis), goto (Een dobbelsteen) en pencolor (Kleur en dikte). Uit de cursus gebruik je import uit Modules importeren en de for-loop uit For-loop.
Vier schildpadden racen naar een finishlijn. Niemand weet vooraf wie er wint, want elke stap is een verrassing: soms een flinke sprong, soms maar een klein stapje. Aan het eind zegt de winnaar het zelf. Zo kan een race straks aflopen:
Dat programma schrijf je zelf, in acht stappen. Je begint met één schildpad.
Willekeurige getallen
Een stap van willekeurige lengte haal je uit de module random. De
functie randint daarin geeft een willekeurig geheel getal:
import random
print(random.randint(1, 20))
Elke keer dat je op Uitvoeren drukt, komt er een getal van 1 tot en met 20.
Anders dan bij range kan het tweede getal zelf ook uitkomen, dus 20 is een
mogelijke stap.
Zo'n getal kun je meteen aan de schildpad geven. Druk een paar keer op Uitvoeren: de lijn is steeds anders lang.
import turtle import random turtle.forward(random.randint(1, 200))
Opdracht: twintig stappen
Schrijf een programma dat:
- een finishlijn tekent, van
(80, 130)recht naar beneden tot(80, -130); - de schildpad zonder te tekenen naar de start brengt, op
(-220, 0); - de pen van de schildpad rood maakt;
- de schildpad 20 stappen vooruit laat zetten, elke stap met een willekeurige lengte van 1 tot en met 20.
Bij jou loopt de race anders dan op het plaatje, want de stappen zijn willekeurig. Druk een paar keer op Uitvoeren. Haalt de schildpad ooit de finish?
import turtle
Klik hier voor een tip.
Voor een lijn zonder te tekenen gebruik je penup, en daarna weer
pendown. Na de finishlijn kijkt de schildpad nog steeds naar rechts,
want goto draait hem niet. Voor de twintig stappen heb je een loop met
range nodig. De module voor willekeurige getallen moet je eerst
importeren, net als turtle.
Klik hier voor de oplossing.
import turtle
import random
turtle.penup()
turtle.goto(80, 130)
turtle.pendown()
turtle.goto(80, -130)
turtle.penup()
turtle.goto(-220, 0)
turtle.pendown()
turtle.pencolor("red")
for stap in range(20):
turtle.forward(random.randint(1, 20))
In elke ronde van de loop kiest randint een nieuw getal. Daarom is elke
stap anders lang.
Haalt hij ooit de finish?
Bijna nooit. Een stap is gemiddeld 10,5 lang, dus twintig stappen brengen de schildpad gemiddeld 210 ver, en de finish ligt 300 verderop. Hij haalt het alleen als bijna elke stap groot uitvalt: ongeveer één keer op de 5000 keer Uitvoeren. In stap 2 laat je hem doorlopen tot hij er is.
Er gaat iets mis
TypeError: Random.randint() missing 1 required positional argument: 'b'
Oorzaak: je schreef random.randint(20), zoals bij range(20). Maar
randint wil twee getallen: het kleinste en het grootste.
Oplossing: geef allebei mee, random.randint(1, 20).
In de volgende stap bouw je verder op dit programma. Kopieer je programma voordat je verdergaat: de editor bewaart het niet.
Door naar stap 2: tot de finish.