← RU Pythoncursus

Turtlegraphics

In deze opdracht gaan we tekenen! Hiervoor gebruiken we de library turtlegraphics, waarmee je met Python een schildpad kunt 'besturen', die vervolgens lijntjes tekent. We zullen stapsgewijs kleine tekeningetjes maken, waarbij we uiteindelijk de volgende figuur gaan tekenen:

image

Zoals je kunt zien bestaat de figuur uit heel veel driehoekjes. We willen de code om één driehoekje te tekenen maar één keer opschrijven. Daarom is het handig om hier een functie voor te maken. Als oefening gaan we eerst wat simpele dingen tekenen. Om te beginnen met tekenen moet je de volgende code bovenin je Python-programma zetten:

import turtle
#
# Zet hier je turtle-code
#
turtle.done()

De done() aan het einde van het programma zorgt ervoor dat het venster niet meteen afgesloten wordt. Om het venstertje van turtlegraphics af te sluiten kun je op de rode 'stopknop' van PyCharm drukken.

Nu heb je de beschikking over de schildpad! In de onderstaand tabel kun je een aantal functies vinden die je kunt gebruiken om de schildpad te laten lopen en tekenen. In de documentatie kun je nog veel meer informatie en functies vinden.

Functie Beschrijving
position() Vraag de positie op van de schilpad: je krijgt een x en een y terug.
done() Pauzeert het programma aan het einde van het tekenen, zodat het venster niet meteen afgesloten wordt.
forward(n) Laat de schildpad n stapjes zetten.
left(n) Draai de schildpad n graden naar links. right(n) bestaat natuurlijk ook.
reset() Maak de tekening leeg en zet de turtle weer in het midden.
circle(n) Teken een cirkel met straal n
setposition(x, y) Zet de schildpad op positie x,y.
speed(n) Zet de snelheid waarmee de schildpad loopt op n.
  1. Teken twee losse vierkantjes met de schildpad, waarbij je gebruik maakt van de functies uit de tabel. Je mag de grootte van de vierkantjes zelf bepalen.

Naast het 'saaie' zwart kun je ook andere kleuren gebruiken om te tekenen. Met color() kun je de huidige gebruikte kleuren opvragen. Uit deze functie komen twee waarden, waarbij de eerste de kleur van de pen is en de tweede de kleur waarmee je vlakken in kunt kleuren.

Je kunt de penkleur veranderen met pencolor(c) waarbij $c$ een string is van de kleur (in het Engels). De invulkleur verander je met fillcolor(c).

Je kunt gesloten vlakken (zoals een vierkant, cirkel of driehoek) ook automatisch inkleuren. Voordat je begint met tekenen van een vlak roep je de functie begin_fill() aan. Vervolgens teken je het vlak. Als je het hele vlak getekend hebt (en het vlak dus gesloten is aan alle kanten), roep je de functie end_fill() aan.

  1. Vraag aan de gebruiker om twee kleuren en een afmeting in te vullen. Gebruik deze twee kleuren en de afmeting om een vierkant te tekenen. Het is de bedoeling dat je de kleuren in het Nederlands vraagt. Vervolgens moet je ze omzetten naar de Engelse benaming omdat pencolor(c) Engelse kleuren vereist. Zorg dat je programma in ieder geval geel, groen, rood, blauw en paars ondersteunt.

Nu we wat geoefend hebben met de schildpad gaan we de figuur tekenen. Deze figuur bestaat uit allemaal driehoekjes.

  1. Probeer als oefening eerst een driehoekje te tekenen. Gebruik voor zowel de pen- als de fillcolor de kleur 'red'.

  2. We moeten heel wat driehoekjes tekenen, maar we willen deze code maar eenmalig opschrijven. Maak daarom nu een functie tekendriehoek(kleur) die als parameter een kleur meekrijgt en vervolgens een driehoek met die kleur tekent.

Nu we met een enkele functie een driehoek kunnen tekenen is het tijd om de hele figuur te tekenen. Deze figuur bestaat uit zes driehoeken. De andere driehoeken bestaan uit verschillende kleuren. Let op dat sommige randen een andere kleur hebben dan de binnenkant! Je zult dus zowel de pencolor als de fillcolor aan moeten passen.

  1. Teken nu alle driehoeken van de figuur op de juiste plaats, waarbij je de tekendriehoek-functie gebruikt die je bij 4. hebt gemaakt. Je zult hier een parameter aan moeten toevoegen voor de pencolor. Om de schildpad op de juiste plaats te zetten kun je gebruik maken van setposition(x,y).

  2. Maak nu een functie, die het onderstaande 'zonnetje' tekent. Maak de functie zo dat het aantal uitsteeksels kan variëren. Hiervoor moet je nadenken over de hoek die je moet draaien, deze is afhankelijk van het aantal uitsteeksels. Misschien is het nodig dit eerst op papier uit te tekenen.

image

  1. Gebruik de functie uit de vorige opdracht om de onderstaande afbeelding te maken. Werkt je oplossing ook goed, als je niet 4 maar 100 figuren zou moeten tekenen?

image

Python dictionaries

Voor het vertalen van de Nederlandse kleurnaam kun je natuurlijk een functie schrijven en met behulp van een aantal if en elif statements de Engelse naam return-en. Python heeft echter een mooiere manier om dit probleem op te lossen: dictionaries.

Een dictionary in python is een datastructuur die gebruikt kan worden voor het opslaan van zogenaamde key-value paren. Je definieert een dict ongeveer op dezelfde manier als een lijst, maar dan met accolades:

dictionary = {
  "brand": "Ford",
  "model": "Mustang",
  "year": 1964
}

Een alternatieve manier om deze dictionary te definieren is

dictionary = dict(brand="Ford", model="Mustang", year=1964) 

Vervolgens kun je informatie uit de dict ophalen via dictionary["brand"]. Dit retourneert in dit geval "Ford".

Je kunt een dictionary dus gebruiken om gelabelde informatie op te slaan. Dit kun je gebruiken voor het opslaan van gelabelde informatie (zoals in het voorbeeld hierboven over een auto), maar je kunt op dezelfde manier een dict ook gebruiken om letterlijke vertalingen van bijvoorbeeld kleuren op te slaan.