Ga naar hoofdinhoud

Stap 3: Rondom in kleur (een functie)

info

Deze stap gebruikt een functie, uit Functies.

De bloem heeft zes cirkels, de ring uit stap 1 had er 36. Wil je 36 cirkels in zes kleuren, dan moet de bloem zes keer: steeds een klein stukje gedraaid. Dat lukt door de bloem in een functie te zetten, en die functie in een loop aan te roepen.

Een functie met een loop erin ziet er zo uit:

import turtle

def driehoek():
for zijde in range(3):
turtle.forward(100)
turtle.left(120)

for i in range(3):
driehoek()
turtle.left(30)
import turtle

def driehoek():
    for zijde in range(3):
        turtle.forward(100)
        turtle.left(120)

for i in range(3):
    driehoek()
    turtle.left(30)

Er staan nu twee loops in je programma. De onderste gaat drie keer rond, en elke ronde roept hij driehoek() aan. Die loopt dan zijn eigen loop helemaal af: drie zijden. Daarna draait de schildpad 30 graden, en begint de volgende ronde. Samen zijn dat drie driehoeken, met negen zijden. Druk op Stap voor stap, dan zie je Python heen en weer gaan tussen de twee loops.

Opdracht: zes bloemen rond​

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

Zet het tekenen van de bloem in een functie bloem(): de lijst kleuren en de loop erover gaan allebei de functie in. Teken daarmee zes bloemen, en draai na elke bloem 10 graden naar links. Maak de pen 2 breed, want er komen veel lijnen bij.

Zo heb je weer 36 cirkels, net als in stap 1, maar nu in zes kleuren die rondom terugkomen.

Een ronde rozet van 36 cirkels op zwart, met de kleuren rood, oranje, geel, groen, blauw en magenta die als vlakken rond het midden liggen

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

De lijst en de loop over de kleuren gaan de functie in, één stap verder ingesprongen. De achtergrond en de pen blijven buiten de functie: die hoeven maar één keer. Onderaan komt een nieuwe loop die zes keer gaat. Wat moet er in elke ronde gebeuren?

Klik hier voor de oplossing.
import turtle

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

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

Na een bloem kijkt de schildpad weer dezelfde kant op als ervoor, want zes keer 60 graden is één keer rond. Draai je dan 10 graden, dan ligt de volgende bloem net naast de vorige. Elke kleur heeft zo zes cirkels vlak naast elkaar, en die vormen samen een gekleurd vlak.

Er gaat iets mis​

Een melding over bloem​

NameError: name 'bloem' is not defined

Oorzaak: de loop die bloem() aanroept, staat boven de def. Python leest je programma van boven naar beneden. Bij de aanroep heeft hij de functie nog niet gezien.

Oplossing: zet de functie bovenaan, onder import turtle, en de loop die hem aanroept eronder.

Alleen een zwart vlak​

Je programma geeft geen fout, maar je ziet alleen de zwarte achtergrond, zonder één cirkel.

Oorzaak: de def zet de functie alleen klaar. Hij tekent pas als je hem aanroept, met haakjes: bloem(). Staat er in je loop bloem zonder haakjes, of ben je de loop onderaan vergeten, dan roept niets de functie aan.

Oplossing: zet bloem() met haakjes in de loop onderaan, vóór turtle.left(10).

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

Door naar stap 4: vijfhoeken.