Les 1: Functies in Functies

Rekenen met parameters

Je kunt parameters ook gebruiken in berekeningen. In Python kun je de bewerkingen die je al kent ook doen:

Bewerking

in Python

plus of min

+ of -

keer

*

gedeeld door

/

tot de macht

^

Een voorbeeld is het tekenen van het volgende figuur:

We willen dat doen met twee functies:

import turtle as t

t.speed(0)

def driehoek(zijde):
  for _ in range(3):
    t.forward(zijde)
    t.left(120)

def driehoeken(lengte):
  # Teken drie keer een driehoek, steeds een stukje groter

driehoeken(50)

We krijgen de lengte mee als parameter dus die kunnen we gebruiken door er bijvoorbeeld eerst 50 en dan 100 bij op te tellen:

def driehoeken(lengte):
  driehoek(lengte)
  driehoek(lengte+50)
  driehoek(lengte+100)

Of we kunnen steeds vermenigvuldigen:

def driehoeken(lengte):
  driehoek(lengte)
  driehoek(1.5*lengte)  # kommagetallen hebben een punt in het Engels
  driehoek(2*lengte)

Het hangt er natuurlijk vanaf wat je wilt bereiken. Maar je kunt nu makkelijk dit maken:

import turtle as t

t.speed(0)

def driehoek(zijde):
  for _ in range(3):
    t.forward(zijde)
    t.left(120)

def driehoeken(lengte):
  driehoek(lengte)
  driehoek(1.5*lengte)
  driehoek(2*lengte)

driehoeken(20)
t.forward(40)
driehoeken(30)
t.forward(60)
driehoeken(40)
t.forward(80)

Opdracht 1*:

Maak functie die het volgende figuur tekent:

Opdracht 2*:

Gebruik de functie die je net hebt gemaakt om het volgende de tekenen:

Rekenen is bijvoorbeeld handig als je de Turtle wilt laten draaien, maar je weet nog niet over hoeveel graden. Je kunt bijvoorbeeld een cirkel tekenen door het volgende te doen:

def cirkel():
  for i in range(10):
    turtle.right(360.0/10)
    turtle.forward(10)


cirkel()

Een hele cirkel bevat 360 graden en als we die in tien stapjes tekenen, draaien we steeds 360/10 graden (36 graden). Maar als je dit uitvoert zie je dat de cirkel er niet heel netjes uit komt te zien. Om er achter te komen wat mooier is kunnen we de volgende methode gebruiken:

def cirkel(aantal_stukken):
  for i in range(aantal_stukken):
    turtle.right(360.0/aantal_stukken)
    turtle.forward(10)


cirkel(10)
cirkel(30)
cirkel(60)

Je ziet in de code twee opvallende dingen:

  • We berekenen nu steeds de hoek door aantal_stukken te gebruiken. De berekening 360.0/aantal_stukken geeft precies de hoek die we steeds willen. Bij 10 stukken geeft dit 360.0/10=36 graden en bij 20 stukken 360.0/20=18 en zo voort.

  • We voeren de for-loop niet 10 keer uit maar aantal_stukken keer. Dus als bijvoorbeeld aantal_stukken 20 is, dan doen we de inhoud van de loop 20 keer.

Opdracht 3:*

import turtle as t
t.speed(0)

def gem(lengte):
  t.left(45)
  t.forward(lengte)
  for _ in range(2):
    t.left(90)
    t.forward(lengte//2)
  t.left(90)
  t.forward(lengte)
  t.left(45)
  
def gems(lengte, aantal):
  # Hier komt jouw code
    
gems(20, 25)
t.forward(2)
gems(16, 20)
t.forward(2)
gems(12, 10)

Zorg dat er uiteindelijk dit plaatje uit komt:

Opdracht 4:*

Een sneeuwvlokje kun je maken door een paar parallellogrammen aan elkaar te plakken. Zie bijvoorbeeld:

In het eerste plaatje zijn er zes parallellogrammen naast elkaar getekend (de turtle draait na elke parallellogram een x aantal graden naar rechts en tekent vervolgens de volgende). Bij de sneeuwvlok zijn het ook allemaal parallellogrammen die naast elkaar zijn getekend (je hoeft niet te tellen hoeveel dat er zijn ;))

a] Maak een functie sneeuwvlok die het linker plaatje tekent. De functie sneeuwvlok moet gebruik maken van de functie parallellogram die je van mij cadeau krijgt.

import turtle

turtle.speed(1000)

def parallellogram(lengte):
  for i in range(2):
    turtle.forward(lengte)
    turtle.right(60)
    turtle.forward(lengte)
    turtle.right(120)

def sneeuwvlok(lengte):
  parallellogram(lengte)


sneeuwvlok(30)

b] Breid de functie sneeuwvlok uit door nog een parameter te gebruiken. Met deze tweede parameter kun je aangeven hoeveel parallellogrammen er in een sneeuwvlok moeten zitten. Dus als je sneeuwvlok (30, 6) uitvoert, dan maakt de turtle het eerste plaatje. Maar als je sneeuwvlok (30, 50) uitvoert, dan begint de turtle iets te maken wat op het tweede plaatje gaat lijken.

Last updated