🖌️
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
  • Functies maken
  • Opdrachten
  • Nog meer functies - Een huis tekenen met een functie
  • Opdrachten
  • TL;DR

Was this helpful?

  1. Functies

Les 4 - Functies maken

PreviousLes 3 - Geneste loopsNextLes 5 - Functies met parameters

Last updated 4 years ago

Was this helpful?

Functies maken

De onderstaande uitleg mag je ook als filmpje bekijken

We gaan in deze lesbrief aan de slag met het maken van functies.

Je gebruikt al functies al je iets tekent met turtle:

  • turtle.forward() - een functie om de turtle vooruit te laten gaan

  • turtle.left() - draai de turtle

  • range(4) - maak een lijstje met de getallen 0, 1, 2 en 3

Eigenlijk alles waar je ()-jes achter zet in Python is een functie.

Je weet dan niet hoe het programma de turtle beweegt, je weet wel wat er uiteindelijk gebeurt. We kunnen ook zelf functies maken. En dit is echt superhandig.

Kijk naar dit figuur:

We hebben 3 vierkanten naast elkaar staan die niet aan elkaar vast zitten.

We kunnen dit doen door met de volgende code:

Mooie code toch? Maar wat nu als we de vierkanten niet 20 maar 30 groot willen hebben? We moeten dan de code op regel 4, 13 en 22 veranderen. Op drie plekken dus! Zie code hieronder.

import turtle

for _ in range(4): # Maak een vierkant
 turtle.forward(30) # 20 veranderen naar 30
 turtle.right(90)
 
turtle.penup() # naar de volgende plek
turtle.forward(30)
turtle.left(90)
turtle.pendown()

for _ in range(4): # Maak een vierkant
 turtle.forward(30) # 20 veranderen naar 30
 turtle.right(90)

turtle.penup() # naar de volgende plek
turtle.right(90)
turtle.forward(30)
turtle.pendown()

for _ in range(4): # Maak een vierkant
 turtle.forward(30) # 20 veranderen naar 30
 turtle.right(90)

En als we nog meer vierkanten zouden tekenen zouden we het op nog meer plekken moeten doen! Dubbele code is meestal niet handig. We maken nu een functie die alleen een vierkant tekent:

def vierkant():
  for _ in range(4): # Maak een vierkant
    turtle.forward(20)
    turtle.right(90)

En op elke plek waar we een vierkant willen schrijven we:

vierkant()

in plaats van

 for _ in range(4): # Maak een vierkant
   turtle.forward(20)
   turtle.right(90)

Dus dan krijgen we:

Als je nu andere grootte vierkanten wilt, hoef je het maar op één plek te veranderen.

Opdrachten

Opdracht 1

Bekijk de code hieronder en voer hem uit. Maak een functie waarmee je een driehoek tekent en verbeter daarmee de code. Uitdaging: Gebruik een loop en teken de driehoeken in maximaal 13 regels code.

import turtle

turtle.speed(0)

for _ in range(3):
  turtle.forward(20)
  turtle.right(120)

turtle.penup() 
turtle.forward(30)
turtle.pendown()

for _ in range(3):
  turtle.forward(20)
  turtle.right(120)

turtle.penup()
turtle.forward(30)
turtle.pendown()

for _ in range(3):
  turtle.forward(20)
  turtle.right(120)
 
turtle.penup()
turtle.forward(30)
turtle.pendown()

for _ in range(3):
  turtle.forward(20)
  turtle.right(120)

Inleveropdracht - Slinger

Maak gebruik van functies om de volgende slinger te tekenen.

Denk erom: je moet twee functies maken en loops gebruiken!

Nog meer functies - Een huis tekenen met een functie

Met de onderstaande regels zorg je ervoor dat de turtle een huis tekent.

Het zou toch echt makkelijker zijn als je de computer in een keer had kunnen zeggen dat de turtle een huis had moeten tekenen. Wat zou het handig zijn als je een opdracht zoiets als tekenhuis() had kunnen invoeren die dan direct voor jou het huis tekent. Dit kan natuurlijk door het maken van een functie.

Belangrijk

Je hoeft maar één keer aan te geven wat een functie moet doen.

Daarna kun je meerdere malen gebruik maken van deze functie door slechts de naam van de functie op te schrijven met () erachter.

We gaan eerst een functie tekenhuis() maken:

import turtle

def tekenhuis():
  for i in range(4): # inspringen met tab is verplicht!
    turtle.forward(50) # hier springen we twee keer in
    turtle.left(90)

  turtle.left(90) # hier springen we weer maar 1 keer in
  turtle.forward(50)
  turtle.right(90)

  for i in range(3):
    turtle.forward(50)
    turtle.left(120)

Merk op dat je bij het maken van zo'n functie met de afkorting def begint. def staat voor definieer. Dus je definieert een functie genaamd tekenhuis. De haakjes erachter horen er altijd bij.

Belangrijk

Alle opdrachten die bij de functie horen moeten worden ingesprongen (dus een tab ervoor).

Nu heb je dus eigenlijk je eigen commando/functie gemaakt. Deze functie kun je zo vaak aanroepen als je wilt.

Probeer maar eens het programma uit:

Let vooral op regel 16 en 27. Door de opdracht tekenhuis()twee keer te geven, worden er twee huizen getekend. Door na het eerste huisje, de turtle te verplaatsen, wordt het tweede huisje ernaast getekend.

Opdrachten

Opdracht 2

Pas het programma nu aan zodat niet twee, maar drie huizen worden getekend.

Opdracht 3

Pas nu het programma aan zodat er zes huizen naast elkaar worden getekend. Maak gebruik van een loop/herhaling!

Opdracht 4

Je krijgt de functie tekenster() cadeau:

import turtle

turtle.shape("turtle")

def tekenster ():
    for i in range(12):
        turtle.forward(50)
        turtle.backward(50)
        turtle.right(30)
        
tekenster()
  1. Verander het programma nu zo, zodat de tekenster functie twee keer wordt aangeroepen, maar zorg ervoor dat de turtle de tweede ster op een andere plek gaat tekenen.

  2. Maak nu een programma waarbij de turtle drie sterren naast elkaar gaat tekenen. Maak gebruik van een loop! Het moet er als volgt uitzien:

Opdracht 5

Maak drie functies. Een functie genaamd vierkant100() die een vierkant met zijden van 100 pixels tekent. Een functie genaamd vierkant150() die een vierkant met zijden van 150 pixels tekent. En een functie genaamd vierkant200() die een vierkant met zijden van 200 pixels tekent. Roep alle drie de functies vervolgens achter elkaar aan. Het resultaat moet er als volgt uitzien:

Opdracht 6

Maak een functie om het volgende figuur te tekenen:

Maak daarna hiermee een programma dat het volgende tekent:

Inleveropdracht - Vierkantbloem

Maak het onderstaande figuur na.

(Extra uitdaging!) Kun je het programma ook zo aanpassen dat elk vierkantje een andere kleur krijgt?

Opdracht 7

  1. Maak een programma waarmee je tekening die hierboven staat namaakt. Je mag beginnen met het volgende programma dat al één rij huizen tekent:

import turtle


turtle.setheading(90)
turtle.speed(20)


def tekenhuis ():
  for i in range(4):
    turtle.forward(50)
    turtle.right(90)
  
  turtle.forward(50)
  turtle.right(30)
  turtle.forward(50)
  turtle.right(120)
  turtle.forward(50)
  turtle.right(30)
  turtle.forward(50)
  turtle.right(90)
  turtle.forward(50)
  turtle.right(90)

def rijhuizen():
  for i in range(3):  
    tekenhuis()
    turtle.penup()
    turtle.right(90)
    turtle.forward(50)
    turtle.left(90)
    turtle.pendown()
    
rijhuizen()

TL;DR

Functies maken en gebruiken in Python:

def mooie_naam():
 commando # inspringen is vereist!
 commando # voor ieder commando dat bij de functie hoort
 for _ in range(3): # loops in functies? geen probleem
   commando # dit commando dus 2 keer inspringen

mooie_naam() # gebruik de naam van de functie met () erachter
commando
mooie_naam() # nog een keer gebruiken? geen probleem!

Screen Shot 2015-08-26 at 21.48.23.png
Screen Shot 2015-08-26 at 22.39.15.png