Les 2: Herhalen

Als je een vierkant wilt gaan tekenen met zijden van 100 pixels, dan zou je het volgende programma kunnen uitvoeren:

import turtle

turtle.shape("turtle")        

turtle.forward(100)
turtle.right(90)
turtle.forward(100)
turtle.right(90)
turtle.forward(100)
turtle.right(90)
turtle.forward(100)
turtle.right(90)

Merk op dat de twee commando's turtle.forward(100) en turtle.right(90) vier keer worden herhaald! Zou het niet veel beter zijn als je de computer kort en krachtig kan aangeven dat hij die twee commando's vier keer moet uitvoeren? Dat kan! En hiervoor maak je gebruik van de herhaalinstructie (wordt ook een loop genoemd). Het bovenstaande programma kan dus ook als volgt worden geschreven:

import turtle

turtle.shape("turtle")        

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

De for-opdracht zorgt ervoor dat de twee opdrachten eronder vier keer worden uitgevoerd. Als er for i in range (14) zou staan bijvoorbeeld, dan zouden die twee opdrachten 14 keer worden herhaald. Let wel op dat je eerst een tab plaatst voor de opdrachten die herhaald moeten worden. Dit noem je inspringen. Hetgeen dat herhaald moet worden, dient dus te worden ingesprongen. Als je dat niet doet, dan krijg je een foutmelding.

Opdracht 1

Voer het onderstaande programma uit en bekijk het resultaat. Kun jij het programma korter schrijven door gebruik te maken van een loop?

import turtle

turtle.shape("turtle")        

turtle.forward(50)
turtle.right(60)
turtle.forward(50)
turtle.right(60)
turtle.forward(50)
turtle.right(60)
turtle.forward(50)
turtle.right(60)
turtle.forward(50)
turtle.right(60)
turtle.forward(50)
turtle.right(60)

Opdracht 2

Gebruik een loop om een vierkant te tekenen waarvan de zijden 200 pixels lang zijn.

Opdracht 3

Voer het onderstaande programma uit en bekijk het resultaat. Kun jij het programma korter schrijven door gebruik te maken van een loop?

import turtle

turtle.shape("turtle")        

turtle.forward(100)
turtle.right(120)
turtle.forward(100)
turtle.right(120)
turtle.forward(100)
turtle.right(120)

Moeilijkere patronen

We gaan nu verder met nog meer uitleg. We zijn geïnteresseerd om het volgende figuurtje te tekenen door gebruik te maken van een loop:

Het eerste dat je doet is bepalen welk patroon steeds terugkeert. Dat moet je immers herhalen! Je zou bijvoorbeeld het volgende stukje als het te herhalen patroon kunnen aanmerken:

Uitgaande van de situatie dat je naar boven kijkt, zou je dit gedeelte als volgt kunnen maken:

turtle.forward(50)
turtle.backward(50)
turtle.right(90)
turtle.forward(50)

Nadat we de bovenstaande regels hebben uitgevoerd kijkt de turtle naar rechts. Zie maar in het onderstaande plaatje:

Het enige dat we moeten doen is ervoor zorgen dat de turtle weer naar boven kijkt. Voor de rest moet je het patroon steeds herhalen, zodat je uiteindelijk het gewenste plaatje krijgt. De turtle naar boven laten kijken doen we uiteraard met de opdracht turtle.left(90).

We krijgen dan het volgende gewenste resultaat:

Als we dezelfde code dan nog eens herhalen, dan krijgen we het volgende plaatje:

Nu zien we dus dat het idee werkt en kunnen we, zoals in het onderstaande programma ook te zien is, het patroon 5 keer herhalen.

Veel van de onderstaande opgaven kunnen met dezelfde aanpak opgelost worden. Denk eraan om eerst het repetitieve patroon te ontdekken. Schrijf dan een programma dat dat patroon tekent. Denk vervolgens na over de heroriëntatie van de turtle zodat het patroon ook voor de tweede keer getekend kan worden. Schrijf dan een loop zodat je de hele tekening met een kort-en-krachtig programma kan gaan maken.

Opdracht 4

Schrijf een programma dat de onderstaande trap tekent. Ga volgens de bovenstaande aanpak te werk.

Opdracht 5

a] Teken:

b] De bovenstaande ster heeft 8 stralen met een lengte van 150 pixels. Kun je ook een ster maken met 16 stralen met een lengte van 100 pixels?

Last updated