Ga naar hoofdinhoud

Stap 4: Vijfhoeken (parameters)

info

Deze stap gebruikt parameters, uit Parameters. Hoe je een veelhoek tekent, staat in Elke veelhoek.

Een spirograaf hoeft niet van cirkels te zijn. Met een driehoek, een vierkant of een vijfhoek krijg je heel andere patronen. Welke vorm het wordt, geef je mee als parameter:

import turtle

def vorm(zijden, lengte):
for zijde in range(zijden):
turtle.forward(lengte)
turtle.left(360 / zijden)

vorm(3, 100)
vorm(6, 60)
import turtle

def vorm(zijden, lengte):
    for zijde in range(zijden):
        turtle.forward(lengte)
        turtle.left(360 / zijden)

vorm(3, 100)
vorm(6, 60)

vorm(3, 100) tekent een driehoek met zijden van 100, vorm(6, 60) een zeshoek met zijden van 60. Het eerste getal komt in zijden, het tweede in lengte. De schildpad draait na elke zijde 360 / zijden graden, dus na de laatste zijde is hij precies één keer rond.

Opdracht: een spirograaf van vijfhoeken​

Plak je programma uit stap 3 in het veld. Ben je het kwijt, neem dan de oplossing van stap 3.

Zet de functie vorm(zijden, lengte) in je programma. Geef ook bloem de parameters zijden en lengte, en laat hem daarmee een vorm tekenen in plaats van een cirkel. Teken zo de zes bloemen met vijfhoeken met zijden van 120.

Een rozet van 36 gekleurde vijfhoeken op zwart, met rechte lijnen die vanuit het midden naar buiten waaieren

# Plak hier je programma uit stap 3
Klik hier voor een tip.

Op de plek waar nu circle staat, komt de aanroep van vorm. De functie bloem weet zelf niet welke vorm het is: hij krijgt de zijden en de lengte mee, en geeft ze door aan vorm. Zo gaf huis in Een straat vol huizen zijn grootte door aan muren. Onderaan, in de loop, staan dan de getallen 5 en 120.

Klik hier voor de oplossing.
import turtle

def vorm(zijden, lengte):
for zijde in range(zijden):
turtle.forward(lengte)
turtle.left(360 / zijden)

def bloem(zijden, lengte):
kleuren = ["red", "orange", "yellow", "lime", "deepskyblue", "magenta"]
for kleur in kleuren:
turtle.pencolor(kleur)
vorm(zijden, lengte)
turtle.left(60)

turtle.bgcolor("black")
turtle.pensize(2)
for i in range(6):
bloem(5, 120)
turtle.left(10)

bloem(5, 120) geeft 5 en 120 aan bloem, en die geeft ze bij elke kleur door aan vorm. Probeer ook eens bloem(3, 150) of bloem(8, 60).

Er gaat iets mis​

Een melding over twee parameters​

TypeError: bloem() missing 2 required positional arguments: 'zijden' and 'lengte'

Oorzaak: je gaf bloem in de def twee parameters, maar in de loop onderaan staat nog de aanroep uit stap 3: bloem(), zonder getallen. Python noemt de twee parameters die hij niet kan vullen.

Oplossing: geef bij de aanroep twee getallen mee, in de volgorde van de def: bloem(5, 120).

Cirkels in plaats van vijfhoeken​

Je verwacht vijfhoeken, maar je krijgt weer cirkels.

Oorzaak: je schreef bloem(120, 5), met de getallen omgedraaid. Python vult de parameters op volgorde: zijden wordt 120 en lengte 5. Een vorm met 120 korte zijden ziet er bijna uit als een cirkel.

Oplossing: zet de getallen in dezelfde volgorde als de parameters in de def: eerst het aantal zijden, dan de lengte.

Kopieer je programma voordat je verdergaat: de editor bewaart het niet.

Door naar stap 5: een groeiende spiraal.