Les 5: Loops & Range()

In één van de vorige lessen hadden we kennisgemaakt met de loops (herhalingen). Het gebruik van loops zorgde ervoor dat we met minder code hetzelfde konden bereiken. Een eenvoudige loop waarmee je een vierkant maakt ziet er als volgt uit:

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

Nu weten we dat door deze loop de opdrachten forward en right vier keer worden herhaald. Maar eigenlijk heb ik nooit uitgelegd wat die i betekent. En wat doet range eigenlijk? Daar gaan we in deze les iets dieper op in. Let dus goed op ;)

De loopcounter

Allereerst is het belangrijk om te weten dat we i.p.v. i ook een andere naam hadden kunnen kiezen. De meeste programmeurs gebruiken vaak een letter zoals j,k,x, maar ook het woordje count. De gouden regel blijft "een gepaste naam dat overeenkomt met de bedoeling ervan".

Deze i wordt ook wel de loopcounter of de teller genoemd. Tijdens het herhalen wordt hiermee bijgehouden bij welke herhaling de computer is! De eerste keer dat de loop herhaalt, is i gelijk aan het getal 0. De tweede keer wordt hij 1. De derde keer wordt hij 2 en de vierde keer wordt hij gelijk aan 3. En dan houdt de loop op. Wat kun je hier nu mee? Nou, een hele hoop! Laten we eerst een eenvoudig voorbeeld nemen:

for i in range(10):
  turtle.dot(1)
  turtle.penup()
  turtle.forward(10)
  turtle.pendown()

Dit programma tekent 10 stippen achter elkaar. De dikte van elke stip is 1 pixel. Nadat hij een pixel heeft getekend, schuift de turtle 10 pixels op. En dat wordt 10 keer herhaald. Probeer dit eens in jou repl.it...

Bij elke herhaling gebeurt nu hetzelfde. Maar stel dat je na elke herhaling de stip 1 pixel groter wilt maken. Hoe doe je dat dan?

Omdat de i na elke herhaling eentje groter wordt kunnen we dat goed gebruiken. We vervangen de 1 van turtle.dot(1) met i. Dat ziet er dan als volgt uit:

for i in range(10):
  turtle.dot(i)
  turtle.penup()
  turtle.forward(10)
  turtle.pendown()

Je kunt ook een andere naam gebruiken voor i:

for dikte in range(10):
  turtle.dot(dikte)
  turtle.penup()
  turtle.forward(10)
  turtle.pendown()

Opdracht 1

Wat verandert er als je in het bovenstaande voorbeeld ook forward(10) vervangt door turtle.forward(i)?

En wat als je de i vervangt door i * 2?

Opdracht 2

Hoeronder zie je een spiraal die uit 400 strepen bestaat. Het allereerste streepje is 0 pixels lang. Vervolgens wordt een 90º hoek naar rechts gemaakt. Daarna een streepje van 1 pixel lang. Dan weer een 90º hoek naar rechts. Daarna een streepje van 2 pixels lang, et cetera.

De vraag is om een functie tekenspiraal() te schrijven die dit plaatje maakt.

Opdracht 3:

Verander de functie tekenspiraal() nu zodanig, dat je bij de aanroep kan aangeven uit hoeveel streepjes hij moet bestaan. Dus tekenspiraal(20) zou dan een piepklein spiraaltje tekenen.

Opdracht 4:

De spiraal heeft 50 stippen. De eerste stip heeft dikte 0 en er komt steeds 1 bij. Kun je ook kleuren toevoegen?

Range

Range is eigenlijk een functie die een lijst van getallen maakt. Zo maakt range(4) de lijst [0,1,2,3]. En range(10) de lijst [0,1,2,3,4,5,6,7,8,9]. Zoals je nu wel weet wordt tijdens elke herhaling de loop counter gelijkgesteld aan het volgende getal in de lijst die range maakt. We hebben nu lijsten waarbij de getallen steeds met 0 beginnen en vervolgens met 1 toenemen. Maar stel dat je het volgende lijstje wilt hebben: [10,15,20,25]. Hoe doe je dat dan? Dat doe je als volgt:

for dikte in range(10,30,5):
	turtle.dot(dikte)
	turtle.penup()
	turtle.forward(dikte*2)
	turtle.pendown()

Uitleg: range heeft dus in dit geval drie parameters. De eerste bevat de beginwaarde. We willen dus niet meer dat de lijst begint met 0 maar met 10. De tweede bevat de eindwaarde. De lijst wordt dus gevuld tot het getal 30 (niet tot en met!!). En als derde parameter geef je de stapgrootte mee. Die is standaard 1, maar nu hebben we hem ingesteld met 5. De lijst ziet er dan als volgt uit:

[10,15,20,25]

Opgave 5:

Schrijf een programma waarmee je het volgende figuurtje natekent:

Opgave 6:

Maak nu een programma waarmee de turtle het figuurtje kan tekenen. Het kleinste vierkantje heeft zijden van 20 pixels. Het grootste vierkantje zijden van 95 pixels.

Opgave 7:

Maak nu een programma waarmee je de volgende spiraal kan maken.

Het eerste streepje is 10 pixels lang. De stappen zijn 5 pixels lang. De laatste streep is 195 pixels lang.

Opgave 8:

Teken nu drie huizen naast elkaar. De eerste heeft zijden van 50 pixels. De laatste heeft zijden van 100 pixels. Doe dit met een loop!

Opgave 9:

Maak nu het volgende figuur na. Belangrijk om te weten: Je begint met een driehoek, vervolgens teken je een vierhoek, en dan een vijfhoek, en dan een zeshoek. En je gaat door totdat je een negenhoek hebt. De zijden van alle figuren zijn 50 pixels lang.

Last updated