All pages
Powered by GitBook
2 of 4

Python Kunst

De eerste de 2 lessen volgens de planner en ga dan aan de slag met de eindopdracht.

Succes!

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.

Les 2: Meerdere turtle's

We hebben tot nu toe de hele tijd gewerkt met precies één turtle. Maar je kan met Python meerdere turtle's gebruiken in hetzelfde programma. Die turtle's moet je dan eerst maken en elk een andere naam geven. Iets moeilijker gezegd noemen we dat: meerdere instanties maken van een turtle. Dat doen we zo:

import turtle
harry = turtle.Turtle()
harry.color("blue")       # Verander de kleur van Harry
harry.pensize(3)          # Verander de dikte van de pen van Harry
harry.forward(50)
harry.left(120)
harry.forward(50)

De naam harry hebben we even zelf bedacht. Nu kun je i.p.v. turtle.forward(100) harry.forward(100) zeggen. Maar het leuke is, dat we ook andere turtle's kunnen maken. Die moeten we dan wel een andere naam geven. Zie hieronder:

import turtle

harry = turtle.Turtle()
daisy = turtle.Turtle()

daisy.color("red")	    # Verander de kleur van Daisy
harry.color("blue")       # Verander de kleur van Harry
daisy.pensize(3)          # Verander de dikte van de pen van Daisy
harry.pensize(3)          # Verander de dikte van de pen van Harry

harry.forward(50)
harry.left(120)
harry.forward(100)

daisy.left(180)		    # Daisy draait zich eerst 180 graden om
daisy.forward(50)
daisy.right(120)
daisy.forward(100)

We hebben nu daisy in het leven geroepen. Nu kunnen ze de liefde aan elkaar verklaren door gezamenlijk een driehoek te tekenen ;)

Opdracht 1

Gebruik drie turtles om een landschap te tekenen. Ze hebben elk een andere kleur. De ene turtle is verantwoordelijk voor het tekenen van een huis. De andere voor het tekenen van de zon en weer de ander voor het tekenen van een poppetje.

event-handling

Je kunt de turtle ook laten reageren op een muisklik of een toetsaanslag. Dit soort “gebeurtenissen” worden ook wel events genoemd. Hier een voorbeeld:

import turtle
 
def vooruit ():
	turtle.forward(10)
 
turtle.onkey(vooruit,"Up")
turtle.listen()

Wat gebeurt hier nou? Allereerst hebben we een functie gemaakt genaamd vooruit () Als deze functie wordt aangeroepen dan gaat de turtle 10 pixels vooruit. Maar wanneer wordt deze functie dan aangeroepen? Nu komt het nieuwe: met de regel turtle.onkey(vooruit, “Up”) hebben we gezegd dat de functie vooruit wordt aangeroepen als je op de bijbehorende pijltjestoets drukt. Uiteindelijk moet je ook de functie listen aanroepen. Deze functie zorgt ervoor dat je programma ‘luistert’ naar de toetsaanslagen die binnenkomen.

Je kunt op dezelfde manier ook meerdere events koppelen aan zelfgemaakte functies. Stel dat je het bovenstaande programma zou willen uitbreiden met een nieuwe functie waarmee de turtle achteruit gaat. Dit zou er dan als volgt uit kunnen zien:

import turtle
 
def vooruit ():
  turtle.forward(10)
 
def achteruit ():
  turtle.backward(10)
 
turtle.onkey(vooruit,"Up")
turtle.onkey(achteruit,"Down")
 
turtle.listen()

Merk op dat we hier maar één keer de listen functie hoeven aan te roepen!

Opdracht 2

Breid het bovenstaande programma uit, zodat je met je pijltjestoetsen de turtle vrij kan laten bewegen. Met de linker en rechter pijltjestoets zou je de richting van de turtle kunnen aanpassen. Wat gebeurt er als je twee toetsen tegelijkertijd indrukt (om bijvoorbeeld schuin te bewegen)?

De eindopdracht

Eindopdracht voor de Havo

Je hebt geoefend met loops en functies. Nu is het tijd om aan een eindopdracht te werken!

De classroom voor de eindopdracht kun je hier vinden. De eindopdracht is ……. Laat je Turtle een mooie tekening maken. Je kunt denken aan:

  • een landschap;

  • een stukje van een stad

  • een beeld uit de ruimte of oceaan

Je opdracht moet minimaal voldoen aan de volgende eisen:

  • Je hebt minimaal zes verschillende objecten in je tekening. Voorbeelden van een object:

    • huis

    • zon

    • vogel

    • ruimteschip

    • vis

    • komeet

    • bloem

    • boom

    • etc

  • Voor elk object in je tekening maak je een functie. Dus bijvoorbeeld voor een gebouw, een ruimteschip, een komeet, een vis maak je allemaal functies

  • Elke functie heeft parameters. Bijvoorbeeld voor de kleur van het object, de grootte van het object en de positie (x en y)

  • Je plaatje moet er leuk uitzien, dus gebruik van kleuren is een vereiste.

  • Waar je loops kunt gebruiken, moet je die ook gebruiken. Dus geen onnodige code in je programma.

Extra punten:

  • Je zou de positie van sommige objecten random kunnen bepalen zodat je turtle elke keer een andere tekening maakt

  • Zorg ervoor dat minstens 1 object kan bewegen. Doe dit met event-handling. Zie Les 2 van Python Kunst.

Voor een idee zou je kunnen kijken naar de volgende plaatjes: