🖌️
Python 0
  • Les 1 - Je eerste tekeningen
  • Loops
    • Les 2 - Herhalen - For-loops
    • Les 3 - Geneste loops
  • Functies
    • Les 4 - Functies maken
    • Les 5 - Functies met parameters
  • Les 6 - Nog een keer loops … - range() goed gebruiken
Powered by GitBook
On this page
  • Nog een keer loops
  • De loopcounter
  • Opdrachten
  • Range
  • Opdrachten

Was this helpful?

Les 6 - Nog een keer loops … - range() goed gebruiken

PreviousLes 5 - Functies met parameters

Last updated 3 years ago

Was this helpful?

Nog een keer loops

In één van de vorige lessen hadden we kennisgemaakt met 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 in plaats van 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. Dit kun je hieronder uitproberen:

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? Hier komt het antwoord ...

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) # hier stond eerst turtle.dot(1)
 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()

Het resultaat zie je hieronder:

Opdrachten

Opdracht 1

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

  2. En wat als je de dikte vervangt door dikte * 2?

Opdracht 2

Hierboven 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 enzovoorts.

Schrijf de functie tekenspiraal() 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

Teken de volgende dotspiraal.

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 loopcounter 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()

Zie ook het plaatje hieronder:

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]

Je krijgt dus vier stippen. Het resultaat kun je hieronder zien:

Opdrachten

Opdracht 5

Schrijf een programma waarmee je het volgende figuurtje natekent:

Denk er wel om dat je gebruik maakt van een loop!

Opdracht 6

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

    Je krijgt geen begin. Je moet het nu helemaal zelf doen :)

  2. (VWO+) Kun je er ook voor zorgen dat ieder vierkantje een willekeurige kleur krijgt?

Inleveropdracht - Spiraal

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.

Inleveropdracht - Vormen

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.

Screen Shot 2015-09-06 at 22.30.14.png