Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Hieronder twee functies waarmee je een klein huisje kan maken met zijden van 50 pixels en aan de een functie waarmee je een groter huisje kan maken met zijden van 75 pixels:
Als je kijkt naar het verschil tussen de twee bovenstaande functies, dan merk je dat er haast geen verschil is; het enige dat anders is, is het getal waarmee je aangeeft hoeveel pixels de turtle vooruit moet gaan! Waarom zouden we dan zoveel code moeten schrijven? Kan het niet korter?
Het antwoord is: JA!
Als je functies zoals forward
, backward
, right
, left
, goto
en shape
aanroept, dan moet je tussen de haakjes iets opschrijven. Bij forward
bijvoorbeeld, moet je aangeven hoeveel de turtle vooruit moet gaan. Je zegt daarom turtle.forward(100)
om aan te geven, dat hij 100 pixels vooruit moet gaan. Zou het nou niet makkelijker zijn om ook onze tekenhuis
functie zo slim te maken, dat we slechts tekenhuis(100)
hoeven te zeggen, om een groter huis met zijden van 100 pixels te maken? En als we tekenhuis(50)
zeggen, dat hij dan een kleiner huis maakt, et cetera. Dit doen we als volgt:
In de def zetten we eerst het woordje lengte tussen de haakjes (je mag ook een ander woord kiezen). Zie rechts. Het gedeelte dat nu met geel gemarkeerd is, is dus veranderd.
Wat je tussen de haakjes zet noem je een parameter of argument.
Vervolgens vervangen we het getal dat we tussen forward
hebben gezet door het woordje lengte.
Dus overal waar de turtle 50 vooruit moet, gaat de turtle nu lengte vooruit.
Roep nu de functie aan met de gewenste lengte.
Wat er nu gebeurt: Als je tekenhuis(100)
opgeeft, dan wordt het woordje lengte gelijkgemaakt aan het getal 100. Overal waar lengte staat wordt dan 100 ingevuld.
Maak een functie vierkant waarin je tussen de haakjes kan aangeven hoe groot het vierkant
moet zijn. Je moet de functie dus als het volgt kunnen gebruiken:
vierkant(20)
vierkant(50)
vierkant(100)
et cetera.
Maak de volgende tekening:
Maak een functie driehoek()
die driehoeken van verschillende lengtes kan tekenen. Uiteindelijk moet je drie driehoeken tekenen. Één met zijden van 20 pixels, één met zijden van 40 pixels en één met zijden van 60 pixels. Het moet er als volgt uitzien:
Maak een programma dat het volgende tekent:
Maak een functie envelop()
die de parameter lengte moet meekrijgen. De aanroep envelop(50)
zal dan het volgende plaatje tekenen:
Pas je programma zo aan, dat er drie enveloppen worden getekend. De enveloppen moeten van links naar rechts steeds groter worden. De groottes mag je zelf bepalen.
Nu gaan we een stukje verder met de uitleg …
Als je een functie maakt, waar je een getal (of iets anders) aan kan meegeven, dan noem je dat een functie met een parameter. Dus de functie tekenhuis
uit het hierboven gegeven voorbeeld heeft een parameter genaamd lengte. Nu heb je ook al kennisgemaakt met functies die meer dan één parameter hebben. Denk maar aan de turtle.goto
functie. Daar moest je namelijk de x èn de y aan meegeven. Voorbeeld: turtle.goto(120,30)
Hoe kun je er nou voor zorgen dat jouw functie ook meer dan één parameter kan gebruiken? Het antwoord is vrij eenvoudig: door voor de tweede een andere naam te verzinnen en dat vervolgens te gebruiken.
Kun je ook functies hebben met meer dan twee parameters? Ja! Zoveel als je wilt. Maar voor de functies die we in deze module moeten maken komt dat niet zo vaak voor…
Breid de tekenhuis functie uit met een extra parameter waarmee je, naast de kleur, ook de lengte van de zijden van het huisje kan meegeven.
Maak nu zelf een functie genaamd rechthoek die twee parameters meekrijgt: lengte en breedte. Roep ten slotte de functie als volgt aan:
Voordat je begint met dit hoofdstuk wil ik graag dat je de volgende puzzel gaat oplossen:
Bekijk daarna deze film van Jurjen:
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.
In het volgende figuur hebben we 3 vierkanten naast elkaar staan die niet aan elkaar vast zitten.
We kunnen dit doen door met de volgende code:
Mooi, mooie code toch? Maar wat nu als we de vierkanten niet 20 maar 30 groot willen hebben? We moeten dan de gele regels code veranderen:
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:
En op elke plek waar we een vierkant willen schrijven we:
in plaats van
Dus dan krijgen we:
Als je nu andere grootte vierkanten wilt, hoef je het maar op één plek te veranderen.
Maak deze opgave in Repl.it 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.
Maak gebruik van functies om de volgende slinger te tekenen:
Als je een vierkant wilt gaan tekenen met zijden van 100 pixels, dan zou je het volgende programma kunnen uitvoeren:
Merk op dat de twee commando's turtle.forward(100)
en turtle.right(90)
vier keer worden herhaald! Zou het niet veel beter zijn als je de computer kort en krachtig kan aangeven dat hij die twee commando's vier keer moet uitvoeren? Dat kan! En hiervoor maak je gebruik van de herhaalinstructie (wordt ook een loop genoemd). Het bovenstaande programma kan dus ook als volgt worden geschreven:
De for-opdracht zorgt ervoor dat de twee opdrachten eronder vier keer worden uitgevoerd. Als er for i in range (14)
zou staan bijvoorbeeld, dan zouden die twee opdrachten 14 keer worden herhaald. Let wel op dat je eerst een tab plaatst voor de opdrachten die herhaald moeten worden. Dit noem je inspringen. Hetgeen dat herhaald moet worden, dient dus te worden ingesprongen. Als je dat niet doet, dan krijg je een foutmelding.
Voer het onderstaande programma uit en bekijk het resultaat. Kun jij het programma korter schrijven door gebruik te maken van een loop?
Gebruik een loop om een vierkant te tekenen waarvan de zijden 200 pixels lang zijn.
Voer het onderstaande programma uit en bekijk het resultaat. Kun jij het programma korter schrijven door gebruik te maken van een loop?
We gaan nu verder met nog meer uitleg. We zijn geïnteresseerd om het volgende figuurtje te tekenen door gebruik te maken van een loop:
Het eerste dat je doet is bepalen welk patroon steeds terugkeert. Dat moet je immers herhalen! Je zou bijvoorbeeld het volgende stukje als het te herhalen patroon kunnen aanmerken:
Uitgaande van de situatie dat je naar boven kijkt, zou je dit gedeelte als volgt kunnen maken:
Nadat we de bovenstaande regels hebben uitgevoerd kijkt de turtle naar rechts. Zie maar in het onderstaande plaatje:
Het enige dat we moeten doen is ervoor zorgen dat de turtle weer naar boven kijkt. Voor de rest moet je het patroon steeds herhalen, zodat je uiteindelijk het gewenste plaatje krijgt. De turtle naar boven laten kijken doen we uiteraard met de opdracht turtle.left(90).
We krijgen dan het volgende gewenste resultaat:
Als we dezelfde code dan nog eens herhalen, dan krijgen we het volgende plaatje:
Nu zien we dus dat het idee werkt en kunnen we, zoals in het onderstaande programma ook te zien is, het patroon 5 keer herhalen.
Veel van de onderstaande opgaven kunnen met dezelfde aanpak opgelost worden. Denk eraan om eerst het repetitieve patroon te ontdekken. Schrijf dan een programma dat dat patroon tekent. Denk vervolgens na over de heroriëntatie van de turtle zodat het patroon ook voor de tweede keer getekend kan worden. Schrijf dan een loop zodat je de hele tekening met een kort-en-krachtig programma kan gaan maken.
Schrijf een programma dat de onderstaande trap tekent. Ga volgens de bovenstaande aanpak te werk.
a] Teken:
b] De bovenstaande ster heeft 8 stralen met een lengte van 150 pixels. Kun je ook een ster maken met 16 stralen met een lengte van 100 pixels?
Deze module is een handige eerste stap als je wilt leren programmeren. Je gaat namelijk een turtle programmeren om allerlei leuke figuurtjes te tekenen. Je gaat leren hoe je tekeningen maakt, loops programmeert, functies maakt etc. Deze module bestaat uit een aantal lesbrieven die je moet doorwerken.
Lesmatriaal Het lesmateriaal bestaat uit lesbrieven waarin uitleg staat, maar ook een aantal opdrachten. De opdrachten maak je gewoon voor jezelf. De opdrachten met een ster maak je in een online klas. Je kunt je voor deze klas aanmelden via de volgende
Maak de lesbrieven en lever de opdrachten in volgens de planner.
Natuurlijk hoef je niet alle commando's en functies van een programmeertaal uit je hoofd te leren. Je kunt lekker gebruik maken van een cheatsheet (= spiekbrief). Wij hebben voor jou een handige spiekbrief gemaakt. Hier is hij:
Je leert in deze module hoe je moet programmeren in de programmeertaal Python. We leggen eerst kort uit wat een programma is en gaan daarna lekker aan de slag.
Een commando is een opdracht (instructie) die een computer kan begrijpen en kan uitvoeren. In feite kan een computer alleen maar eenvoudige opdrachten begrijpen. Deze kleine, eenvoudige instructies kunnen dan gecombineerd worden om ingewikkeldere en complexere taken uit te voeren. Zo'n verzameling van commando's wordt ook wel een computerprogramma genoemd. Het schrijven van een computerprogramma is niet eenvoudig. Sommige programma's bestaan wel uit meer dan een miljoen regels opdrachten. Wij gaan echter beginnen met vrij eenvoudige programma's waarin het de bedoeling is om een turtle te laten bewegen zodat hij bepaalde figuren en patronen kan tekenen.
Ons eerste programma ziet er als volgt uit:
Je kunt het hier zien werken: (druk linksboven op de 'play' knop)
Als je wilt tekenen met turtle, dan moet je dat op de allereerste regel van je programma aangeven. Dit doe je door de regel import turtle op te schrijven. De turtle kijkt altijd in het begin naar rechts.
En met de opdracht turtle.backward(100), gaat de turtle 100 stappen achteruit.
Draaien
Maak een nieuwe repl aan en maak het figuur.
Tip voor draaien
Let er wel op dat de draairichting altijd vanuit de huidige positie van de turtle wordt bepaald. In het onderstaande plaatje kijkt de turtle eerst naar beneden. Als je dan turtle.right(90) uitvoert dan draait de turtle dus 90 graden naar rechts toe!
Om het draaien duidelijk te maken hieronder nog een programma dat je in Python kan uitvoeren:
Maak voor de figuren hieronder een programma waarbij de turtle dat figuurtje tekent. De afmetingen mag je zelf bepalen.
Maak ook vier programma's waarmee je de volgende figuren kan tekenen.
Schrijf een programma waarmee je het onderstaande kan tekenen:
Je kunt het bovenstaande figuurtje tekenen door slechts gebruik te maken van de functie turtle.forward en turtle.right. Zorg ervoor dat je hetzelfde figuurtje maakt, maar dan alleen door uitsluitend gebruik te maken van deze twee functies.
Bever wil het onderstaande plaatje gaan tekenen. Kun jij hem helpen?
Teken nu een huis met de turtle. Je huis zou er zo uit kunnen zien (de lengte van de zijden mag je zelf bepalen):
of als je wat enthousiaster bent:
In één van de vorige lessen hadden we kennisgemaakt met de loops (herhalingen). Het gebruik van loops zorgde ervoor dat we met minder code hetzelfde konden bereiken. Een eenvoudige loop waarmee je een vierkant maakt ziet er als volgt uit:
Nu weten we dat door deze loop de opdrachten forward
en right
vier keer worden herhaald. Maar eigenlijk heb ik nooit uitgelegd wat die i betekent. En wat doet range eigenlijk? Daar gaan we in deze les iets dieper op in. Let dus goed op ;)
Allereerst is het belangrijk om te weten dat we i.p.v. i ook een andere naam hadden kunnen kiezen. De meeste programmeurs gebruiken vaak een letter zoals j,k,x, maar ook het woordje count
. De gouden regel blijft "een gepaste naam dat overeenkomt met de bedoeling ervan".
Deze i wordt ook wel de loopcounter of de teller genoemd. Tijdens het herhalen wordt hiermee bijgehouden bij welke herhaling de computer is! De eerste keer dat de loop herhaalt, is i gelijk aan het getal 0. De tweede keer wordt hij 1. De derde keer wordt hij 2 en de vierde keer wordt hij gelijk aan 3. En dan houdt de loop op. Wat kun je hier nu mee? Nou, een hele hoop! Laten we eerst een eenvoudig voorbeeld nemen:
Dit programma tekent 10 stippen achter elkaar. De dikte van elke stip is 1 pixel. Nadat hij een pixel heeft getekend, schuift de turtle 10 pixels op. En dat wordt 10 keer herhaald. Probeer dit eens in jou repl.it...
Bij elke herhaling gebeurt nu hetzelfde. Maar stel dat je na elke herhaling de stip 1 pixel groter wilt maken. Hoe doe je dat dan?
Omdat de i na elke herhaling eentje groter wordt kunnen we dat goed gebruiken. We vervangen de 1 van turtle.dot(1) met i. Dat ziet er dan als volgt uit:
Je kunt ook een andere naam gebruiken voor i:
Wat verandert er als je in het bovenstaande voorbeeld ook forward(10)
vervangt door turtle.forward(i)
?
En wat als je de i
vervangt door i * 2
?
Hoeronder zie je een spiraal die uit 400 strepen bestaat. Het allereerste streepje is 0 pixels lang. Vervolgens wordt een 90º hoek naar rechts gemaakt. Daarna een streepje van 1 pixel lang. Dan weer een 90º hoek naar rechts. Daarna een streepje van 2 pixels lang, et cetera.
De vraag is om een functie tekenspiraal()
te schrijven die dit plaatje maakt.
Verander de functie tekenspiraal()
nu zodanig, dat je bij de aanroep kan aangeven uit hoeveel streepjes hij moet bestaan. Dus tekenspiraal(20)
zou dan een piepklein spiraaltje tekenen.
De spiraal heeft 50 stippen. De eerste stip heeft dikte 0 en er komt steeds 1 bij. Kun je ook kleuren toevoegen?
Range is eigenlijk een functie die een lijst van getallen maakt. Zo maakt range(4)
de lijst [0,1,2,3]
. En range(10)
de lijst [0,1,2,3,4,5,6,7,8,9]
. Zoals je nu wel weet wordt tijdens elke herhaling de loop counter gelijkgesteld aan het volgende getal in de lijst die range
maakt. We hebben nu lijsten waarbij de getallen steeds met 0 beginnen en vervolgens met 1 toenemen. Maar stel dat je het volgende lijstje wilt hebben: [10,15,20,25]. Hoe doe je dat dan? Dat doe je als volgt:
Uitleg: range heeft dus in dit geval drie parameters. De eerste bevat de beginwaarde. We willen dus niet meer dat de lijst begint met 0 maar met 10. De tweede bevat de eindwaarde. De lijst wordt dus gevuld tot het getal 30 (niet tot en met!!). En als derde parameter geef je de stapgrootte mee. Die is standaard 1, maar nu hebben we hem ingesteld met 5. De lijst ziet er dan als volgt uit:
[10,15,20,25]
Schrijf een programma waarmee je het volgende figuurtje natekent:
Maak nu een programma waarmee de turtle het figuurtje kan tekenen. Het kleinste vierkantje heeft zijden van 20 pixels. Het grootste vierkantje zijden van 95 pixels.
Maak nu een programma waarmee je de volgende spiraal kan maken.
Het eerste streepje is 10 pixels lang. De stappen zijn 5 pixels lang. De laatste streep is 195 pixels lang.
Teken nu drie huizen naast elkaar. De eerste heeft zijden van 50 pixels. De laatste heeft zijden van 100 pixels. Doe dit met een loop!
Maak nu het volgende figuur na. Belangrijk om te weten: Je begint met een driehoek, vervolgens teken je een vierhoek, en dan een vijfhoek, en dan een zeshoek. En je gaat door totdat je een negenhoek hebt. De zijden van alle figuren zijn 50 pixels lang.
Je kunt ook een loop in een ander loop gebruiken! Kijk maar eens naar het volgende figuur:
We doen eigenlijk zes keer hetzelfde:
teken vierkant
draai 90 graden naar rechts
loop langs een zijde
draai 30 graden links
Maar programmeurs houden niet van onnodige code. Het gele stuk bevat vier keer dezelfde twee regels! Dus daar maken we een loop van. En dan krijg je de code zoals hieronder:
Teken:
Taken:
Voer het volgende programma uit en bantwoord dan de vraag die onder de code staat:
Vraag: Kan dit programma korter? Zo ja, hoe?
In principe is de turtle steeds in pen-mode. Dit betekent dat hij steeds een lijn aan het tekenen is terwijl hij beweegt. De turtle kan ook in wandel-mode terecht. Dan kan hij bewegen, terwijl hij geen spoor nalaat. Je kunt tijdens het uitvoeren van een programma meerdere keren naar pen-mode of wandel-mode.
Door het commando turtle.up()
in te geven kom je in wandel-mode terecht.
Door het commando turtle.down()
in te geven kom je in pen-mode terecht.
a] Schrijf een programma dat de onderstaande tekening maakt.
b] Schrijf een programma dat de onderstaande tekening maakt.
Maak de volgende figuren:
Ga naar en meld je aan. Maak een nieuwe Repl (turtle) aan. Neem het voorbeeld hierboven over en zorg dat er een rechthoek getekend wordt.
Vooruit met turtle
Met de opdracht turtle.forward(100), gaat de turtle dan 100 stappen vooruit. Zie het plaatje hiernaast.
De turtle heeft altijd een bepaalde richting. En als hij beweegt, dan beweegt hij ook die richting op. Je kunt echter de richting veranderen door het commando turtle.right() of turtle.left() in te geven.
Als je turtle.right(90) ingeeft, dan draait de turtle 90 graden naar rechts. En als je turtle.right(180) ingeeft, dan draait hij zich om.
Maak een nieuwe repl aan en maak het volgende figuur"
Maak het volgende figuur: