Ga naar hoofdinhoud

Stap 1: Eén schildpad (random)

info

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:

Vier gekleurde lijnen van links naar een zwarte finishlijn; de oranje is er net overheen, heeft een dikke stip op de streep en schreef erachter: Gewonnen in 29 rondes

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:

  1. een finishlijn tekent, van (80, 130) recht naar beneden tot (80, -130);
  2. de schildpad zonder te tekenen naar de start brengt, op (-220, 0);
  3. de pen van de schildpad rood maakt;
  4. de schildpad 20 stappen vooruit laat zetten, elke stap met een willekeurige lengte van 1 tot en met 20.

Een zwarte finishlijn rechts, en een rode lijn van links die er na twintig stappen nog een eind vandaan stopt

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.