1. Python Turtle#
Start in Mu editor met een nieuw bestand door op de knop New te klikken. Typ onderstaande code in het bestand en let daarbij goed op het verschil tussen hoofdletters en kleine letters! Sla het bestand op als hello_turtle.py in de Documenten map.
Run deze code om het resultaat te bekijken.
Sommige functies zoals print() zitten standaard in Python, maar om met de schildpad te kunnen werken is het nodig de module turtle te importeren. Dat gebeurt op regel 1. Op regel 3 maken we met de functie Turtle() uit de turtle module een schildpad aan met de naam tony. Op regel 5 sturen we tony 100 pixels naar voren.
Maar wat is dat nu? Onze Tony lijkt helemaal niet op een schildpad! Hij lijkt meer op een pijlpunt! Daar gaan we verandering in brengen. En we gaan hem ook van richting laten veranderen. Pas je code als volgt aan (de nieuwe regels zijn gemarkeerd):
Op regel 4 zorgt tony.shape('turtle') ervoor dat onze schildpad er ook uitziet als een schildpad. De regels 7, 9 en 11 laten tony linksaf slaan alvorens verder te lopen.
Meer weten over turtle shapes?
Om de vorm van tony in een schildpad te veranderen, gaven we de functie tony.shape() de waarde 'turtle' mee. Er zijn echter nog andere vormen mogelijk. Dit is de volledige lijst:
'arrow''turtle''circle''square''triangle''classic'
De waarde die je tussen de haakjes aan de functie tony.forward() meegeeft, is het aantal pixels dat de schildpad vooruit moet bewegen. Maar wat doet het getal 90 tussen de haakjes van tony.left()?
Vraag 01
Wat betekent het getal 90 tussen de haakjes van turtle.left()?
Antwoord
Dat getal geeft aan hoeveel graden de turtle moet draaien. Een hoek van 90° is een rechte hoek. De aanroep turtle.left(90) zorgt er dus voor dat de turtle 90° naar links draait, oftewel linksaf slaat.
In onderstaande figuur zie je hoe een cirkel in graden is verdeeld. Hoeveel graden zitten er in een volledige cirkel denk je?
1.1. De basisbewegingen#
Tot nu toe hebben we in onze code voor de beweging van de schilpad de functies forward() en left() gebruikt. Kun je voorspellen welke bewegingsfuncties er nog meer zijn? Juist, backward() en right(). Omdat je deze vier functies heel vaak gebruikt, zijn er afkortingen voor, zodat je minder hoeft te typen.
Functie |
Afkorting |
|---|---|
|
|
|
|
|
|
|
|
Opdracht 01
Vervang de code in hello_turtle.py door onderstaande code. Je hoeft de code niet over te typen, je kunt kopiëren en plakken.
1import turtle
2
3tony = turtle.Turtle()
4tony.shape('turtle')
5
6tony.lt(90)
7tony.fd(100)
8tony.bk(50)
9tony.rt(90)
10tony.fd(60)
Run de code om te zien dat de schildpad het begin van een hoofdletter H tekent. Maak de code af zodat een volledige hoofdletter H wordt getekend.
1.2. Pen up, pen down en pen size#
Zoals je hebt gemerkt, is tony een schildpad die van tekenen houdt, want hij heeft een pen vast waarmee hij zijn afgelegde weg tekent. Soms wil je echter dat tony zijn pen even van het ‘papier’ haalt. Met de volgende twee functies kun je de pen van de schildpad bedienen:
Functie |
Afkorting |
|---|---|
|
|
|
|
Daarnaast kun je de pendikte instellen met de volgende functie:
Functie |
|---|
|
Bij de functies turtle.penup() en turtle.pendown() zet je niks tussen de haakjes, maar de functie turtle.pensize() heeft wél input nodig. Tussen de haakjes zet je een geheel getal dat de pendikte in pixels aangeeft. Dus bijvoorbeeld turtle.pensize(10)
Opdracht 02
Breid je code in hello_turtle.py uit zodat naast de letter H ook een hoofdletter E wordt getekend, met pendikte 5.
Kies zelf mooie lengtes voor de drie horizontale lijnen van de letter E, zodat je resultaat lijkt op het bovenstaande plaatje.
Hint
Na de code die de letter H tekent, moet je dus eerst tony.penup() aanroepen om de pen van het papier te halen. Vervolgens beweeg je de schildpad 20 pixels vooruit met tony.fd(20) (misschien moet je hem eerst nog draaien, zodat hij de goede kant op gaat). Daarna roep je tony.pendown() aan om de pen weer op het papier te zetten. Als je dat voor elkaar hebt, kun je de code maken die de letter E tekent.
1.3. Kleuren#
Onze schildpad tekent vooralsnog zwarte lijnen; tijd voor wat fleurigheid! Uiteraard is er een functie om de penkleur van tony te veranderen.
Functie |
|---|
|
Tussen de haakjes geef je de gewenste kleur mee met de Engelse naam tussen aanhalingstekens, bijvoorbeeld turtle.pencolor('yellow') of turtle.pencolor('green'). Andere kleuren zijn gold, orange, red, maroon, violet, magenta, purple, navy, blue, skyblue, cyan, turquoise, lightgreen, darkgreen, chocolate, brown, black en gray. En er zijn er nog veel meer! Op deze website kun je een kleurenpalet vinden.
Opdracht 03
Breid je code in hello_turtle.py uit zodat de schildpad het woord HELLO tekent, waarbij elke letter een andere kleur en een andere pendikte heeft. Je mag zelf je favoriete kleuren en pendiktes kiezen. Hieronder staat een voorbeeldje.
1.4. Draaiingshoeken#
Draaien met een hoek van 90° is niet zo moeilijk. Draaiingshoeken met een andere grootte zijn lastiger dan je misschien denkt. Probeer de onderstaande opdracht maar eens.
Opdracht 04
Extra uitdagend!
Begin met een nieuw codebestand (via de New knop). Importeer de turtle module en maak een turtle aan. In de vorige opdrachten heette de turtle tony, maar je mag nu ook zelf een naam verzinnen. Sla het bestand op onder de naam turtle_house.py.
Maak een algoritme dat de onderstaande figuur tekent zónder de pen van het papier te halen, zónder de turtle.bk() functie te gebruiken en zónder een draai van 180° te maken.
Hint 1
Teken de figuur eerst eens zelf op papier zonder je pen op te tillen. Kun je erachter komen in welk punt je het beste kunt beginnen?
Hint 2
Begin in de hoek linksonder en teken eerst het vierkant van 80 bij 80 pixels. Maak dan de diagonaal, het dak en tenslotte de diagonaal naar rechtsonder.
Hint 3
De hoeken in de figuur zijn niet altijd de hoeken die je moet invullen bij turtle.lt() of turtle.rt(). Kijk maar eens naar de onderstaande afbeelding. De turtle komt van boven naar beneden aangelopen en moet vervolgens de diagonaal van linksonder naar rechtsboven maken. Om dat te doen moet hij niet 45° draaien, maar 90° + 45° = 135°. Ook bij het tekenen van het dak moet je goed nadenken over de te draaien hoeken.
1.5. Figuurvulling#
Het is mogelijk om een door de turtle getekende figuur op te vullen met een kleur. Daarvoor gebruik je de volgende functies:
Functie |
Werking |
|---|---|
|
Op dezelfde manier als |
|
Roep deze functie aan juist voordat de te vullen vorm wordt getekend. |
|
Roep deze functie aan meteen nadat de te vullen vorm is getekend. |
Je kunt dit uitproberen met het onderstaande codevoorbeeld. Maak hiervoor weer een nieuw bestand aan, met de naam turtle_fill.py.
1import turtle
2
3tony = turtle.Turtle()
4tony.shape('turtle')
5tony.pensize(5)
6
7# Stel de penkleur en de vulkleur in
8tony.pencolor('black')
9tony.fillcolor('yellow')
10
11# Teken een driehoek met vulling
12tony.begin_fill()
13tony.fd(100)
14tony.lt(120)
15tony.fd(100)
16tony.lt(120)
17tony.fd(100)
18tony.lt(120)
19tony.end_fill()
Opdracht 05
Breid de code in turtle_fill.py uit, zodat links van het driehoekje een regelmatige vijfhoek met rode vulling wordt getekend, zoals in onderstaande figuur. De zijden van de vijfhoek zijn 60 pixels lang.
Hint
Om te berekenen hoeveel graden de turtle telkens moet draaien, kun je bedenken dat gedurende het tekenen van de vijfhoek de turtle in totaal precies één hele draai maakt van 360°. Deze draai wordt gelijk verdeeld over de vijf hoeken.
Vorm |
Aantal hoeken |
Turtle draaihoek |
Totale draaiing |
|---|---|---|---|
Driehoek |
3 |
120° |
3 * 120° = 360° |
Vierhoek |
4 |
90° |
4 * 90° = 360° |
Vijfhoek |
5 |
?° |
5 * ?° = 360° |
1.6. Cirkels#
Veelhoeken zijn leuke figuren, en we zullen er later nog vaker op terugkomen, maar soms wil je gewoon een cirkel tekenen. Met Python turtle kan dat op twee manieren; met turtle.dot() en met turtle.circle().
Functie |
Werking |
|---|---|
|
Tekent een ronde stip met een diameter die je aangeeft met |
|
Tekent een cirkel met een straal (dat is de afstand tussen het middelpunt van de cirkel en de rand, dus eigenlijk de halve diameter) die je aangeeft met |
Probeer beide functies uit met onderstaande code. Gebruik een nieuw bestand, met de naam turtle_circles.py
1import turtle
2
3tony = turtle.Turtle()
4
5tony.circle(40)
6tony.dot(80)
Zie je het verschil tussen de beide functies? turtle.dot() levert een gevulde cirkel (een stip) en turtle.circle() een niet-gevulde cirkel. Je kunt met turtle.begin_fill() en turtle.end_fill() de niet-gevulde cirkel natuurlijk alsnog vullen, zoals in onderstaand voorbeeld. Om het verschil tussen rand en vulling goed zichtbaar te maken worden in dit voorbeeld ook de pendikte en de kleuren ingesteld.
1import turtle
2
3tony = turtle.Turtle()
4tony.pensize(5)
5tony.pencolor("black")
6tony.fillcolor("green")
7
8tony.begin_fill()
9tony.circle(40)
10tony.end_fill()
11tony.dot(80)
Meer weten over extra mogelijkheden met turtle.circle()?
Behalve de straal van de cirkel, kun je aan turtle.circle() nóg een getal meegeven. Probeer de volgende code maar eens:
1import turtle
2
3tony = turtle.Turtle()
4
5tony.circle(40, 90)
Run het programma en wijzig daarna regel 5 in tony.circle(40, 180). Run weer en wijzig daarna regel 5 in tony.circle(40, 270). Zie je wat dat tweede getal doet?
Je kunt zelfs nog een derde getal toevoegen binnen de haakjes. Probeer het volgende:
1import turtle
2
3tony = turtle.Turtle()
4
5tony.circle(40, 360, 4)
Run het programma en wijzig daarna regel 5 in tony.circle(40, 360, 5). Run weer en wijzig daarna regel 5 in tony.circle(40, 360, 6). Zie je wat het derde getal doet?
Opdracht 06
Vervang de code in turtle_circles.py door een programma dat een stoplicht tekent zoals hieronder getoond. De afmetingen mag je zelf kiezen en hoeven niet exact overeen te komen met het voorbeeld.