Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
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 link
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: Spiekbrief Python Turtle
Welkom in de Python modules! Werk hieronder de lesbrieven af volgens je planner.
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) https://trinket.io/python/13544723e5
Ga naar https://repl.it en meld je aan. Maak een nieuwe Repl (turtle) aan. Neem het voorbeeld hierboven over en zorg dat er een rechthoek getekend wordt.
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:
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?
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:
Voordat je begint met dit hoofdstuk wil ik graag dat je de volgende puzzel gaat oplossen: https://studio.code.org/s/artist/stage/1/puzzle/8
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:
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:
In deze module ga je leren hoe je programma's kan schrijven waarbij je de gebruiker ook vragen kunt stellen en afhankelijk van het antwoord je programma iets laat doen. Dit noemen we ook wel interactieve programma's.
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.
Voor de lessen 1 t/m 3 is hier de classroom.
Voor de lessen 4 t/m 7 is hier de classroom.
Enjoy!
De eerste de 2 lessen volgens de planner en ga dan aan de slag met de eindopdracht.
Succes!
De havo maakt de opdrachten in Python Kunst. Het vwo kiest een van de drie andere eindopdrachten.
Success
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.
Met Python is het mogelijk om tekst en getallen op het scherm te tonen. Dat doe je met de functie print()
. Deze functie "print" gewoon de informatie die je wilt op het scherm.
Zoals je ziet kun je ook berekeningen tussen de haakjes van de print()
-functie zetten. Let er wel op dat de voorrangsregels van de wiskunde ook gelden voor programmeertalen: de * en de / gaan dus vóór de + en de -.
Er bestaat iets als een string. Een string is een rij van tekens (karakters). Een teken is een letter (zoals ‘a’, ‘B’), nummer (‘0’, ‘2’), symbool (‘#’, ‘^’, ‘}’), enz. en kan gebruikt worden om allerlei soorten informatie in op te slaan. Vaak is dit dus gewoon een stukje tekst wat iemand op het scherm wil printen.
'string' betekent in het Engels touw of draad. Het is dus eentouw met karakters er aan.
Schrijf een programma dat met de print()
functie “Hello, world” op het scherm zet via trinket.
Schrijf een programma dat met de print()
functie de volgende boodschap op het scherm zet:
Welkom bij mijn geweldige programma!
We gaan allemaal toffe dingen laten zien.
Dit doen we met behulp van de print()-functie.
^_^
Vaak wil je in je programma tijdelijk gegevens bewaren. Dit doe je met variabelen. Een variabele kun je zien als een emmer met een label erop. Je kunt er iets in zetten en je kunt er iets uithalen. Hieronder zie je een stukje code met ernaast een plaatje waarop te zien is wat er gebeurt:
Je ziet dus dat er nu drie emmers zijn. Elke emmer heeft een naam/label en een inhoud. In het begin zijn alle emmers leeg. Maar na de drie regels van hierboven verandert de zaak:
In de emmer met als naam a komt namelijk het getal 20 te staan.
In emmer b komt 15 te staan.
En in c komt de tekst "hallo" te staan.
We kunnen nu ook een vierde emmer genaamd d in het leven roepen. In die variabele kunnen we het verschil (min) tussen a en b berekenen en bewaren. Dat gaat zo:
We halen dus het getal 20 uit emmer A en we halen het getal 15 uit emmer b. Het verschil wordt vervolgens berekend en het antwoord komt in emmer d te staan.
Uiteindelijk zouden we ook de inhoud van de variabelen op het scherm kunnen tonen. Dat doen we natuurlijk met de functie print. Dit gaat zo:
Schrijf een programma waarbij je de volgende berekeningen doet in Python:
8483937 - 523455
23.22342 * 34309483
218739345 + 3498348
Stop de antwoorden in drie verschillende variabelen. Tel de drie antwoorden bij elkaar op en print het uiteindelijke antwoord.
De naamgeving van een variabele kan je altijd zelf bepalen. Dus als je berekeningen wilt doen met je favoriete getal, kan je deze in een variabele stoppen met als naam bijvoorbeeld favoriete_getal
. Dit is handig omdat je dan makkelijk kan bijhouden wat er in de variabelen zit. Noem je variabelen dus altijd op een logische manier! Kijk maar naar het volgende voorbeeld:
Zoals je kan zien zijn de eerste drie antwoorden van het programma (dit worden ook wel outputs genoemd) gewoon een wiskundesom die de inhoud van onze variabelen gebruikt. Daarna wordt er een verandering gemaakt in de variabele favoriete_getal
. Er wordt een andere waarde aan de variabele gegeven, namelijk 4 + 5, dus 9. Je kan na het toewijzen van de waarde van een variabelen deze dus altijd ook nog later veranderen.
Bij de laatste output zien we een beetje een instinkertje. Namelijk doordat er " "
om favoriete_getal
stonden, wordt deze gezien als wat? Ja! Een string! Het is dus heel erg belangrijk om in je achterhoofd te houden of je iets wilt printen als een string of als een variabele. Als je de " " namelijk vergeet, gaat het programma zoeken naar een variabele met die naam. En als er dus geen variabele toegewezen is kan je hierdoor een foutmelding (oftewel een error) krijgen.
Bij de vorige opdrachten heb je steeds een aparte string geprint op het scherm. Nu bestaat er ook iets als string concatenation, waarin je twee strings samen kan voegen. Concatenation is een Engels woord voor “aaneenschakeling”, en in python is dit ontzettend makkelijk: Je plakt twee string aan elkaar vast met een +! Probeer maar:
Deze code kan je natuurlijk ook weer zelf proberen in je eigen omgeving!
Schrijf steeds een programma waarin je de gegeven variabele op de goede plek in de string gebruikt zoals in het voorbeeld.
naam = Lotte
<naam> heeft pannenkoeken gegeten!
naam = Kees
De kat van <naam> heeft een muis gevangen.
naam = Bas
tijd = nacht
De parkiet van <naam> heeft hem de hele <tijd> wakker gehouden.
Print bij deze opdracht de komende drie woorden in alle volgordes die er maar zijn dus bijvoorbeeld: ‘Niezen Kikkers Blij’ of 'Knikkers Niezen Blij'. Hint, er zijn 6 verschillende volgordes.
speelgoed = "knikkers"
gevoel = "blij"
werkwoord = "niezen"
print(speelgoed + gevoel + werkwoord)
# Ga Verder
Schrijf je eigen kleine verhaaltje.
Gebruik een variabele voor de naam van de hoofdpersoon zodat je makkelijk de hoofdpersoon kunt wijzigen.
Voorbeeldverhaal: Henk is een blije jongen. Hij gaat op de fiets naar school. Als Henk op school is gaat hij vrolijk naar de les. Einde!
Code die hier bij hoort:
naam = "Henk"
print(naam + " is een blije jongen.") # denk aan de extra spatie!
print("Hij gaat op de fiets naar school.")
print("Als " + naam + " op school is gaat hij vrolijk naar de les.")
print("Einde!")
Een ‘error’ is een foutmelding. Op errors gaan we later dieper in, maar voor nu is het handig om te weten dat je bij bijvoorbeeld de volgende code:
getel = 4
print (getal + 1)
iets kan krijgen als:
Traceback (most recent call last):
File "<stdin>", line 2, in <module>NameError: name 'getal' is not defined
Als je kijkt naar line 2 (regel 2) dan wordt daar een variabele met de naam getal gebruikt, terwijl deze dus niet bestaat of geen waarde toegewezen heeft gekregen. Je ziet dat er een spelfout is gemaakt in regel 1. Er staat getel in plaats van getal. Als je dat verandert verdwijnt de foutmelding.
Veel voorkomende fouten
Een error kun je bijvoorbeeld krijgen als:
je de " " om een string ergens vergeten bent,
je variabelenaam verkeerd hebt gespeld
je variabele nog niet een waarde hebt gegeven
Het kan ook zijn dat je de toewijzing andersom doet, zoals: 4 = x
Dan krijg je een error die eruit ziet als:
Traceback (most recent call last):
In line 1 of the code you submitted:
4 = x
^
SyntaxError: can't assign to literal
Deze foutmelding houdt dan dus in dat je altijd eerst je variabelenaam moet noemen, en dan pas de inhoud ervan moet geven. In de geval verbeter je het dus door er van te maken:
x = 4
In de toekomst gaan we dieper in op errors en hoe je problemen kunt oplossen. Maar het is handig dat je hier alvast wat over hebt gelezen, in het geval dat je straks wat schrijft en opeens een error krijgt. Ze zien er altijd heel ingewikkeld uit, maar als je hier eenmaal handig in wordt valt het best mee! Neem gewoon rustig je tijd, en bekijk wat er staat en neem je code dan nog even door.
Run de volgende codes, en los de errors op:
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:
Een van de handigste eigenschappen van een computer is dat deze in staat is om logische stappen te maken. Je kan een programma heel makkelijk sturen door een “als / dan” situatie te creëren. Bijvoorbeeld:
Als ik mijn schoen in mijn handen heb dan: Trek ik hem aan.
Als ik het koud heb dan: Pak ik mijn jas.
Dit soort situaties zijn heel handig, omdat je dan direct invloed hebt op oorzaak / gevolg. Bij de voorgaande voorbeelden was de oorzaak (wat moet er aan de hand zijn) steeds dik gedrukt, en het gevolg cursief (wat ga je dan doen?). Als de dik gedrukte situatie gebeurt, wordt de cursieve opdracht uitgevoerd. Bij programmeren doen we dit met een if-statement. Het if
-statement wordt als volgt gebruikt:
In het voorgaande voorbeeld zien we dat x de waarde 3 toegewezen krijgt Na de vergelijking if x == 3
: wordt de printopdracht uitgevoerd. Het dubbele is-teken (==)
betekent hier ‘is hetzelfde als’. Als x dus niet 3 is, was de printfunctie na de if
nooit uitgevoerd.
Nu zie je dus dat er niks geprint wordt.
Op deze manier hebben we er niet zoveel aan: we weten precies wat er gaat gebeuren. Maar als we dit combineren met de input()
-functie kun je leuke dingen doen!
Vraag de gebruiker om een stadsnaam. Als de gebruiker dan bijvoorbeeld "Amsterdam" invoert print je een boodschap zoals "Wat leuk! Dat is mijn favoriete stad!"
Lees een getal in. Als het getal gelijk is aan 4 print je uit: "Je hebt precies 4 geraden!" Als het getal gelijk is aan 6 print je uit: "Zes is een perfect getal!" In alle andere gevallen doe je niets.
Je kunt nu met IF iets doen als de gebruiker bijvoorbeeld "soep" in voert. Maar wat nou als je iets wilt doen als de gebruiker NIET invoert wat je wilt? Dit kan je opvangen dat een else:
statement te gebruiken. Hierbij zeg je “als keuze gelijk is aan "soep", voer de komende opdracht uit. En anders (keuze is niet gelijk aan "soep"), doe het volgende (iets anders)”. Dit werkt als volgt:
Op deze manier kan je dus alle situaties opvangen die je niet in je if
gedeelte beschreven hebt. Het werkt natuurlijk ook met getallen:
Schrijf een programma dat de gebruiker vraagt hoe warm het is. Als het 20 graden of warmer is, schrijf dan naar het scherm 'Dat is lekker warm!''. Als het kouder is, schrijf dan 'Dat is koud...'.
HINT: met behulp van >= controleer je of het groter dan of gelijk is.
Schrijf een programma dat de gebruiker vraagt hoe oud hij is. Als hij 18 of ouder is, dan zegt het programma: Gefeliciteerd, je bent volwassen! Anders zegt het programma: Helaas, nog niet volwassen.
Het programma wordt altijd afgesloten met de melding: “Bedankt voor je deelname!”.
Je kunt ook een if-statement in een ander if-statement gebruiken. We geven hier een korte uitleg. In de volgende lesbrieven gaan we hier uitgebreider op in.
Je ziet dat we eerste vragen wat iemand wil eten. En alleen als het "soep" is vragen we hoeveel kopjes. Als het iets anders is vragen we niets anders meer.
Laat de gebruiker een getal raden onder de 10.
Als de gebruiker precies 9 raadt, heeft hij gewonnen en mag hij een prijs kiezen. V raag: "Je hebt gewonnen! Wil je een koekje?" Als de gebruiker "ja" zegt, zeg je: "Alsjeblieft!". Anders zeg je: "Ok, dan geen koekje."
Als de gebruiker NIET 9 heeft print je uit: "Jammer, niet gewonnen."
In een spel is er een geheim ingebouwd. Er zijn twee manieren om het te vinden. Als je eerst '+' invoert en daarna 'a' kom je bij het geheim. Je voert steeds een Enter in na ieder karakter.
Print eerst: Probeer de geheime code te raden: Zorg daarna dat je met de geheime code bij het geheim kan komen. Als je het geheim gevonden hebt print je: Je hebt het gevonden! Anders print je: Helaas dat klopt niet!
Print aan het einde van het programma een afscheidsboodschap: Doei!
Naast de > en < heb je nog meer vergelijkingsoperatoren. Hieronder een tabel van alle vergelijkingsoperatoren en de bijbehorende betekenis:
Vergelijking
Betekenis
not x == y
x is niet gelijk aan y
x > y
x is groter dan y
x < y
x is kleiner dan y
x >= y
x is groter dan of gelijk aan y
x <= y
x is kleiner dan of gelijk aan y
x == y
x is gelijk aan y
Met 5-letter LINGO is het de bedoeling dat een gebruiker een woord invoert dat precies 5 karakters bevat. Zo niet, dan moet het programma aangeven dat het ingegeven woord incorrect is. Maak een programma (functie) die de gebruiker om een woord vraagt, vervolgens berekent hoeveel letters erin zitten. Als er meer of minder dan 5 letters inzitten, dan geeft hij een foutmelding. Zo niet, dan zegt het programma: “Goed zo, je hebt een 5 letter woord ingevoerd. (TIP: gebruik de functie len()
, als je dan bijvoorbeeld woord_len = len(“broek”)
komt er 5 in woord_len
te staan)
Uitdaging: zorg dat je programma alleen letters accepteert (en niet bijvoorbeeld ‘+’ of ‘:’.
Interactieve programma's met de input functie
Met de print functie kun je gegevens op het scherm printen. Maar wat als je nou wilt dat de gebruiker iets kan invoeren? Heb je daar ook iets voor? Jazeker! De input()
-functie.
Je ziet dat je programma wacht op invoer. Als je iets intypt en eindigt met enter dan gaat het programma verder. Op deze manier kan je dus een programma schrijven dat reageert op de antwoorden van zijn gebruiker!
Belangrijk: Je moet het resultaat van de input()-functie wel eerst in een variabele zetten, zodat dit later gebruikt kan worden.
De regels tekst (strings) worden nu onder elkaar geprint maar je kunt ook string aan elkaar plakken met + (concatenation):
Schrijf een programma dat de voornaam van de gebruiker opvraagt met de functie input. Vervolgens wordt de gebruiker gegroet met 'Hallo, [en hier komt de voornaam van de gebruiker]!'. Hint: denk aan concatenation!
Schrijf een programma dat de gebruiker vraagt om een zelfstandig naamwoord (bv. boom, huis, kast), een bijvoeglijk naamwoord (bv. groot, vies, vervelend) en een infinitief van een werkwoord (bv. lopen, schrijven, eten). Vul de ingevoerde vervolgens in, in de onderstaande zin en zet het resultaat op het beeld. Vond je ooit een zo ontzettend dat je het voortdurend opnieuw wilde ? Bijvoorbeeld: Vond je ooit een boom zo ontzettend mooi dat je het voortdurend opnieuw wilde knuffelen?
Zoek je verhaal op die je bij lesbrief 1 hebt gemaakt. Maar vraag nu de naam van de hoofdpersoon aan de gebruiker!
Voorbeeldverhaal: Hoe heet je? Henk
Henk is een blije jongen. Hij gaat op de fiets naar school. Als Henk op school is gaat hij vrolijk naar de les. Einde!
Code die hier bij hoort:
naam = input("Hoe heet je?")
print(naam + " is een blije jongen.") # denk aan de extra spatie!
print("Hij gaat op de fiets naar school.")
print("Als " + naam + " op school is gaat hij vrolijk naar de les.")
print("Einde!")
Schrijf een programma dat om drie woorden vraagt en vervolgens die drie woorden in alle zes mogelijke volgordes weer naar het scherm schrijft. Je moet zes keer een print commando geven!
Bekijk eens het onderstaande programma:
Je zou denken dat je hiermee een optelprogramma hebt gemaakt, maar dat valt vies tegen! Probeer maar eens een paar getallen op te tellen en kijk goed naar het resultaat. Probeer het pogramma uit.
Wat gaat hier nou mis? Als je voor het eerste getal 22 kiest en voor het tweede getal 56, dan is het resultaat 2256. Wat is hier misgegaan?
Python heeft de twee 'getallen' aan elkaar vastgeplakt. Dit doet hij, omdat hij denkt dat je twee strings aan elkaar wilt vastplakken (concatenation!). Net alsof je "programmeren is " en "fun" aan elkaar wilt vastplakken. Maar wij willen niet dat Python die twee getallen aan elkaar vastplakt, maar dat hij ze bij elkaar optelt! Eigenlijk willen we dat Python de twee getallen ook echt als twee getallen gaat beschouwen. De vraag is: Hoe doen we dat?
De input-functie is hier van belang. Die zegt altijd dat de invoer van de gebruiker als tekst moet worden beschouwd. Wij kunnen expliciet aangeven dat de invoer toch moet worden opgevat als een echt getal. Dit doen we door de functie int() te gebruiken. Dit ziet er als volgt uit:
Let vooral op het gebruik van de functie int()
! int is een afkorting voor integer. Het is de Engelstalige benaming voor een geheel getal. Je zegt hier eigenlijk: Hetgeen dat de gebruiker invoert met de input functie moet worden opgevat als een getal.
Schrijf een programma dat vraagt om vier getallen. Tel de eerste twee getallen bij elkaar op, deel dat dan door het derde getal, en vermenigvuldig het met het vierde getal. Print vervolgens het antwoord op het scherm.
Schrijf een programma dat de gebruiker vraagt om vijf getallen en schrijf daarna het gemiddelde van die vijf getallen naar het scherm (niet afronden).
Schrijf een programma dat de gebruiker vraagt om het huidige jaartal en om het jaar waarin hij geboren is. Reken uit hoe oud de gebruiker is aan het eind van het huidige jaar (in hele jaren) en schrijf het antwoord naar het scherm.
Inmiddels ben je al bekend met twee soorten informatietypes (datatypes), namelijk strings
en int’s.
Strings
zijn een verzameling karakters die als het ware als een zin gebruikt worden door de computer. Een string
is een type (soort) informatie waarvan de computer alles tussen de “” als een geheel behandeld. En net zoals dat een string een type informatie is, zijn er ook nog andere types. Een van de belangrijkste hiervan ken je nu ook al. De int
wat dus staat voor integer, was een heel getal. Maar wat nou als je met decimale getallen wilt werken (getallen met een komma erin)? Hiervoor bestaat er nog een ander type informatie. Namelijk de float
wat een getal is met nog cijfers achter de komma.
In het Engels gebruik je een '.' (punt) in plaats van een '.' (komma). Daarom schrijf je een getal 2,63 bij programma als 2.63
Deze laatste twee datatypes zijn heel erg belangrijk aangezien je er complexe berekeningen mee kan doen. Eerder deze les heb je al meerdere berekeningen gedaan met gehele getallen. Als je daarentegen met decimale getallen wilt werken heb je dus de floats nodig. Een paar voorbeelden van floats
zijn:
Hierboven zie je dat er verscheidene berekeningen gedaan worden met floats
. Als je met de input()
functie werkt, wordt het belangrijk om hetzelfde trucje toe te kunnen passen als we eerder met de integers
hebben gedaan. Als je namelijk niet expliciet het type informatie geeft aan de input()
functie, gaat dit altijd als string behandeld worden. Maar als je het type int
aan een float
mee geeft krijg je hier een error van. Geef bij het volgende voorbeeld maar een float
als input mee en kijk wat er gebeurt!
Hierboven zie je dat er verscheidene berekeningen gedaan worden met floats
. Als je met de input()
functie werkt, wordt het belangrijk om hetzelfde trucje toe te kunnen passen als we eerder met de integers
hebben gedaan. Als je namelijk niet expliciet het type informatie geeft aan de input()
functie, gaat dit altijd als string behandeld worden. Maar als je het type int
aan een float
mee geeft krijg je hier een error van. Geef bij het volgende voorbeeld maar een float
als input mee en kijk wat er gebeurt!
Om dit op te lossen kan je dus simpelweg in plaats van de functie int()
de float()
functie gebruiken. Als je dit doet, wordt de input behandeld als float
en kan je hier dus weer berekeningen mee maken met getallen achter de komma.
Het bovenstaande voorbeeld laat dus heel goed het verschil tussen float
en int
waardes zien. Bij berekeningen moet je hier dus goed op letten hoe je het in gaat voeren en wat voor antwoord je wilt krijgen.
Verder kan het natuurlijk ook zo zijn dat je wilt dat een int
of float
als string
behandeld wordt. Dit is namelijk nodig als je een variabele die een int
of float
bevat wilt printen. Een voorbeeld hiervan is het volgende:
Bedenk wat de types zijn van de volgende tien dingen. Kies uit integer, float of string.
19
“3”
21.234
“Hoela hoepen”
24 * 21.4
29 / 3
“293.3”
25.1 + 5
2 / 3 * 9
8 + 30 / 10
Zoals je hierboven kan zien, maakt het erg veel uit hoe je de berekening invoert. Voor de volgende opdracht ga je hier zelf een programma voor schrijven:
Schrijf een programma dat 2 of meer inputs vraagt, maak er een berekening mee en print het antwoord uit. In het programma moeten alle drie de datatypes voorkomen.
Als je even niet meer weet wat voor type iets heeft, bestaat er een functie die je hiervoor kan gebruiken. Als je namelijk type(variabele) gebruikt, zegt de computer wat het type is.
Nu we al die lastige informatie hebben verwerkt gaan we even weer verder met berekeningen met variabelen en deze straks combineren met strings!
We kunnen de variabelen bijvoorbeeld ook weer gebruiken om de turtle, die je hebt leren kennen in Python 0, vooruit te laten bewegen. In plaats van dat je een getal meegeeft aan de forward()
functie, kun je bijvoorbeeld ook een variabelenaam meegeven. En ook een berekening met een variabele! Dat ziet er dan zo uit: turtle.forward(d*10)
Wat wordt met de onderstaande code op het scherm geprint? Bedenk het eerst voor jezelf en probeer het daarna uit.
Schrijf een programma waarmee je twee variabelen instelt met een beginwaarde. De eerste met waarde 3 en de tweede variabele met waarde 8. De namen van de variabelen mag je zelf weten. Tel de twee getallen bij elkaar op en sla het resultaat op in een nieuwe variabele. Print uiteindelijk het resultaat naar het scherm.
Functies heb je inmiddels al een paar keer gezien, maar niet echt zelf gemaakt! Een functie is een stuk code die je kan aanroepen en zo steeds dezelfde acties kan uitvoeren door de naam ervan aan te roepen. Je hebt al heel vaak inmiddels functies gebruikt als print()
, len(), input()
etc. Maar nu gaan we kijken hoe we dit soort dingen zelf kunnen maken!
Voorbeeld:
Het programma doet niets… Dit komt omdat we wel de functie gemaakt hebben, maar hem niet gebruiken.
Wil je dat de functie wordt gebruikt, dan moet je hem aanroepen.
Test de code in je eigen compiler.
Voorbeeld #2
Stel je wilt van drie verschillende getallen steeds weten welke de grootste is, dan kan je daar een functie voor schrijven
Hier stopt de functie. Hieronder kan je dan vervolgens de functie aanroepen en dan wordt het bovenstaande uitgevoerd, zonder het aanroepen van de functie wordt deze dus ook niet uitgevoerd.
max_van_drie()
Hier zie je dat alles wat onder de def staat ingesprongen is (een tab ervoor heeft) bij de functie hoort. Zo kan je voor vrijwel alles een functie schrijven, die je later simpelweg alleen maar hoeft aan te roepen om hem meerdere keren te kunnen gebruiken! Handuuuuuuuugh!
Verder kan je ook nog een variabele aan een functie mee geven, zo kunnen we bijvoorbeeld de max_van_drie functie ook omschrijven zodat er geen input van de gebruiker gevraagd wordt. Dit werkt als volgt:
Als we de functie nu aanroepen, kunnen we de waarden van a, b en c meer geven tussen de haakjes. Zoals dit:
max_van_drie(4, 9, 23)
Hier wordt de 4 als het eerste argument gezien dat meegegeven wordt aan de functie, en zal dus als “a” in de functie zelf gebruikt kunnen worden . Test dit maar in je eigen compiler.
Schrijf een functie die een zin vraagt aan de gebruiker en deze vervolgens achterstevoren print. Dit kan met de slicing techniek!
Schrijf een functie die steeds om een aantal getallen vraagt, en deze allemaal bij elkaar optelt en de som ervan uiteindelijk uit print.
Schrijf een functie die checkt of de input van een gebruiker binnen een bepaalde range valt. Dus of deze tussen twee verschillende getallen past.
>>> Hallo, wilt u mij een getal geven?
>>> 38
>>> 38 valt niet tussen de 3 en de 9
Schrijf een functie die drie verschillende strings vraagt aan de gebruiker, de lengte ervan berekend, deze lengte vervolgens bij elkaar op telt, dit getal dan deelt door 2.5, en het dat uiteindelijke getal afgerond naar boven en naar beneden print.
Schrijf een functie die de laagste van vijf cijfers terug print.
Schrijf een functie die drie variabelen mee krijgt, en vervolgens deze allemaal met elkaar vermenigvuldigt en het totaal print.
In de vorige les hebben we het over while loops gehad, maar wat nou als je na een bepaalde tijd wilt stoppen met de loop? Bijvoorbeeld na tien keer dezelfde vraag gesteld te hebben dat het programma stopt. Dit kan door booleaanse vergelijkingen met de while mee te geven. Als de vergelijking dan False is, stopt het programma. Het gaat als volgt:
We maken een eerst een counter aan met een bepaalde beginwaarde. Vervolgens updaten we deze steeds en als deze tien wordt stopt het programma.
Je kan hier zien dat er hier twee verschillende manieren gebruikt worden om uit de while loop te komen. De eerste is als het woordje "quit
" getypt wordt, want dan wordt er vervolgens een break
gebruikt die ervoor zorgt dat we uit de loop springen. De tweede manier is dus de booleaanse vergelijking na de while
. Zolang deze vergelijking True
geeft, blijft de loop in werking. Maar op het moment dat deze booleaanse vergelijking een waarde van False
heeft, wordt de loop gestopt en gaan we verder naar de rest van het programma (in dit geval dus: print ("EINDE")
).
Schrijf een programma waar de gebruiker steeds om een getal wordt gevraagd. Tel dit getal dan op bij het voorgaande getal. Als deze som van alle voorgaande getallen uiteindelijk groter is dan 200, stopt het programma en wordt uit uiteindelijke getal geprint.
>>> Hallo, wil je mij een getal geven?
>>> 27
>>> Hallo, wil je mij een getal geven?
>>> 150
>>> Hallo, wil je mij een getal geven?
>>> 63
>>> Het totaal is: 240
Schrijf een programma waarbij de gebruiker vijf pogingen krijgt om een getal onder de tien moet raden. Als het getal geraden is stopt het programma en krijgt de gebruiker een vrolijk berichtje dat hij/zij heeft gewonnen! Als het niet geraden wordt stopt het programma dus na vijf keer.
>>> Geef mij een getal onder de tien a.u.b.
>>> 5
>>> Helaas!
>>> Geef mij een getal onder de tien a.u.b.
>>> 6
>>> Helaas!
>>> Geef mij een getal onder de tien a.u.b.
>>> 7
>>> Helaas!
>>> Geef mij een getal onder de tien a.u.b.
>>> 8
>>> Helaas!
>>> Geef mij een getal onder de tien a.u.b.
>>> 9
>>> Helaas! Je hebt het niet geraden binnen vijf pogingen :(
Vraag de gebruiker om het langste woord dat ze kunnen bedenken, en print vervolgens elke letter daarvan apart uit. (denk aan slicing)
Schrijf een programma waarin je om de gebruiker zijn email adres vraagt, en vervolgens alles voor het “@ ” teken print.
Schrijf een programma waarin je de gebruiker om een zin vraagt, en print vervolgens elk woord apart uit.
Eerder hebben we bij de if
-expressies vergelijkingen gebruikt. Als dit waar is, dan doen we dat! Deze vergelijkingen worden ook wel booleaanse expressies genoemd. Een booleaanse expressie is een vergelijking waarvan er alleen gezegd kan worden of deze waar is of niet. Het kan niet misschien waar zijn of half waar. Hier krijg je dan de Engelse woorden true
(waar), en false
(onwaar) van. In Python schrijf je waar als True
en onwaar als False
. Hieronder wat voorbeelden:
Bij de if-expressies zou de booleaanse expressie 4>3, een true geven, en dan wordt de code in deze if-expressie uitgevoerd. Bij 4<3 zou er een false gegeven worden, en zou er niks gebeuren, of gaat de computer naar de volgende if-expressie. Kijk de volgende voorbeelden maar door, hier zie je een hele lijst met booleaanse expressies. Kijk maar of je snapt waarom het programma deze antwoorden terug geeft.
Als je een true terug krijgt bij deze booleaanse expressies, voert het programma alles af wat nog komt binnen de if-expressie, en anders stopt het en gaat deze verder. Later zullen we nog andere gevallen leren waarbij booleaanse expressies van belang zullen zijn.
Bedenk voordat je de komende booleaanse expressies zelf uitvoert, of ze een true of false geven. Voer ze daarna uit.
4 > 5
4 != 4
4 == (7 - 3)
a = 3
b = 6
b - a == a
“hallo” == “hallo”
Zoals je hierboven kan zien, kan je ook booleaanse expressies uitvoeren met strings. Het komt erop neer dat alles dat voor de vergelijkings expressie hetzelfde is als erna, dat er dan true uit komt. Dit is handig voor als je input wilt vergelijken en wilt dat de gebruiker dit precies in typt zoals jij wilt! Dit hebben we natuurlijk al eerder gezien.
Schrijf een programma dat door middel van booleaanse waarden kijkt welke soorten fruit de gebruiker wilt, en vervolgens vraagt hoeveel de gebruiker er van zou willen. Geef twee verschillende soorten fruit als mogelijkheid. voorbeeld
>>> Hallo, wilt u appels of peren?
>>> peren
>>> Hoeveel peren wilt u?
>>> 6
>>> Oke! Wij sturen u 6 peren!
Met de if opdracht kun je een onderscheid maken tussen twee verschillende mogelijkheden: of de if-voorwaarde is waar of hij is onwaar. Soms zijn er meer dan twee mogelijkheden en hebben we meer dan twee takken nodig. Een manier om een dergelijke berekening vorm te geven is een gekoppelde voorwaarde:
Als ik mijn schoen in mijn handen heb.
Trek ik hem aan.
of Als ik het koud heb.
Pak ik mijn jas.
En anders
Ga ik op de bank zitten.
Hier is dus een situatie waar je je schoen aantrekt, als je hem in je handen hebt.. Of ‘als je het koud hebt’, ‘dan pak je je jas’. En in alle andere gevallen ga je op de bank zitten. Je kunt dit soort situaties programmeren met een elif. We gaan dat uitleggen met een voorbeeld met getallen. Bekijk de volgende code:
Hoe de if-elif-else constructie werkt zie je in het volgende plaatje:
elif is een afkorting van "else if". Ook hier wordt precies één tak uitgevoerd. Er is geen limiet op het aantal elif instructies. Staat er een else opdracht, dan is dat het einde, maar deze hoeft er niet te staan.
Schrijf een programma waar de gebruiker een temperatuur moet ingeven. Als het onder nul is moet het programma zeggen "Het vriest!". Als de temperatuur tussen 0 en 15 zit, zeg je: "Trek een jas aan als je naar buiten gaat." Anders zeg je: "Je kan zonder jas naar buiten!"
Schrijf een programma dat de gebruiker vraagt om drie dingen:
het huidige jaar,
zijn/haar geboortejaar
leeftijd.
Als het geboortejaar na het huidige jaar ligt, schrijf dan naar het scherm:
Je bent nog niet geboren.
Als de persoon al jarig is geweest schrijf je:
Je bent dit jaar al jarig geweest.
Als de persoon nog niet jarig is geweest schrijf je:
Je bent dit jaar nog niet jarig geweest.
Als de leeftijd niet kan kloppen schrijf je:
Je leeftijd klopt niet met de jaartallen!
Elke voorwaarde wordt in volgorde gecontroleerd. Is de eerste onwaar, dan wordt de volgende gecontroleerd, enzovoorts. Is er één waar dan wordt de bijbehorende tak uitgevoerd en de instructie eindigt. Zelfs als er meer dan één voorwaarde waar zou zijn. Alleen de tak bij de eerste keer waar wordt uitgevoerd.
Schrijf een programma waarin de gebruiker wordt gevraagd om een getal, en vergelijk die vervolgens met een ander getal die je er zelf in hebt gezet. Is het getal hetzelfde, vertel dit dan aan de gebruiker, en zeg anders dat het niet hetzelfde is.
Schrijf een programma waar de gebruiker wordt gevraagd van welk soort fruit hij/zij houdt. De keuze moet tussen twee soorten fruit zijn, en dit moet een toepasselijke reactie opbrengen. En als de gebruiker iets anders zegt moet dit ook opgevangen worden met een reactie.
Schrijf een programma die een getal naar beneden afrondt als de gebruiker “beneden” in typt, naar boven afrondt als er “boven” wordt gegeven, en anders de wortel van het getal neemt.
Schrijf een programma dat reageert als een rekenmachine door middel van de input()
functie. Zorg ervoor dat de eerste input de soort berekening wordt (optellen, aftrekken, delen of vermenigvuldigen) en de tweede en derde input de getallen zijn waarmee de berekening uitgevoerd wordt. Denk eraan hoe je bij bepaalde berekeningen de input en output wilt hebben in verband met informatietypes!
In de vorige les heb je geleerd dat over if-elif-else expressies, maarrrr wist je ook dat je if-opdrachten in if-opdrachten kan plaatsen?! Dit worden geneste
if-opdrachten genoemd. Zo een geneste if ziet er schematisch uit als volgt:
Voorbeeld:
Als num groter dan of gelijk is aan 0, dan komt het programma in een tweede if. Deze tweede if wordt alleen uitgevoerd als de vergelijking num >= 0
waar is (als deze booleaanse vergelijking dus true terug geeft!). De eerste else die er staat hoort bij de tweede if. Dit kun je zien aan de hand van de tabjes die zijn gebruikt. Het goed gebruiken van de tabs is hier dus ontzettend belangrijk! Mede omdat het een vereiste is van python zelf, maar ook omdat het je code een stuk leesbaarder maakt. Dit is altijd heel erg belangrijk!
Schrijf een programma die de gebruiker vraagt of hij een ‘lahmacun’ wil of een ‘borek’. Als de gebruiker kiest voor ‘lahmacun’, dan moet hij een tweede vraag krijgen: Wil hij er één met sambal of zonder sambal? Als de gebruiker er één met sambal wil dan zegt het programma "Alsjeblieft! Een lahmacun met sambal". Zo niet, dan zegt hij "Alsjeblieft! Een lahmacun zonder sambal". Zo ziet de werking van het programma eruit:
>>> Welkom bij de digitale kantine :)
>>> Maak een keuze (lahmacun of borek) lahmacun
>>> Wil je er ook sambal op? ja
>>> Alsjeblieft! Een lahmacun met sambal.
Breid nu het bovenstaande programma uit. Als de gebruiker borek wil, dan krijgt hij een tweede vraag: Met gehakt of kaas? Afhankelijk van zijn keuze krijgt hij een bericht te zien. Zo kan het eruit zien:
>>> Welkom bij de digitale kantine :)
>>> Maak een keuze (lahmacun of borek) borek
>>> Met gehakt of kaas gehakt
>>> Alsjeblieft! Een borek met gehakt!
Schrijf een programma waarbij je de gebruiker een vraag stelt waar alleen ja of nee op geantwoord mag worden (bij wat anders moet dit opgevangen worden!) en als er ja geantwoord wordt dan moet er een nieuwe vraag gesteld worden. Deze vragen mag je zelf bedenken, wees creatief!
Je kunt ook if-opdrachten in if-opdrachten in if-opdrachten plaatsen. In principe kun je if-opdrachten oneindig gaan nesten. Maar in de praktijk hangt het af van hoe slim je het programmeert en hoe moeilijk de keuzestructuur is.
Zoals je nu inmiddels heel goed weet kan je booleaanse expressies gebruiken bij verscheidene dingen! Maar wat nou als je meerdere voorwaarden tegelijk wilt controleren. Nou dit kan dus heel makkelijk! Dit kan namelijk door middel van het gebruik van and, or en not operatoren. Het gaat als volgt:
Hier schrijven we een programma waarin we checken of de gebruiker een goede keuze heeft gemaakt. De "and" operator kijkt of de twee booleaanse expressies allebei True geven en dan pas is het geheel ook True.
We kunnen ook een "or" operator gebruiken, hier wordt er gechecked of een van de twee booleaanse expressies waar zijn. Als een van de twee true geeft, is het geheel ook true. Zo kan je hier goed het verschil zien tussen "and" en "or".
Dan heb je als laatst de "not" operator. Hier worden de verwachtingen van de uitkomst van de booleaanse expressies omgekeerd. Waar true wordt verwacht, wordt nu false verwacht.
Schrijf een functie die kijkt of een waarde tussen de 3 en de 8 zit. Als de waarde hier tussen zit, meld dit dan door middel van een print.
Schrijf een functie die kijkt of een waarde lager is dan 20 of hoger is dan 100. Meld weer je bevinding van de waarde d.m.v. een print.
Stel je krijgt de keuze om naar Walibi of naar slagharen te gaan. Als je naar Walibi wilt, dan krijg je korting als je met 10 of meer mensen gaat. En als je naar slagharen gaat, dan krijg je al korting als tussen de 5 of de 10 mensen mee neemt. Schrijf een programma die vraag of de gebruiker naar Walibi of slagharen wilt. En vervolgens moet er gevraagd worden met hoeveel mensen de gebruiker erheen wilt. Geef dan aan of de gebruiker korting krijgt of niet bij een bepaalde hoeveelheid mensen.
Schrijf een programma dat een zin vraagt aan de gebruiker, en vervolgens kijkt of het woord “de” niet in de zin voorkomt. Meld dit dan vervolgens.
Je hebt al eerder kennis gemaakt met hoe for-loops werken. Als je wilt dat iets tien keer wordt herhaald, dan gebruik je de for-loop. Hier een voorbeeld:
In dit geval wordt de regel "Dit is herhaling" tien keer herhaald. En na de zin Dit is een herhaling volgt de inhoud van de loopcounter i
Je kunt nu ook invoer van de gebruiker gebruiken om je for-loop aan te passen:
Je kunt ook loops en if-statements combineren natuurlijk:
Schrijf een programma dat vraagt of iemand wel of niet naar de dierentuin wil, en als het antwoord ja is, vraag dan met hoeveel mensen zij erheen willen. Print dan voor ieder persoon waarvan ze willen die mee gaat een keer “veel plezier!”.
Breid het voorgaande uit. Als er op de eerste vraag een nee gegeven wordt, vraag dan of ze anders misschien naar de film willen. Zo ja, met hoeveel personen (en weer zo vaak printen), en zo nee print dan een gepast antwoord.
Schrijf een programma dat getallen gaat optellen. Vraag eerst hoeveel getallen een gebruiker wil optellen. Vraag daarna steeds opnieuw om een getal en tel dat op bij het totaal. Aan het einde print je:
De som van de getallen is <som van de getallen>.
HINT: Gebruik een teller buiten je for-loop:
som = 0
for _ in range(5):
som = som + getal
print(som)
In de voorgaande herhalingen weet je precies hoe vaak je het wilt herhalen. Maar wat als je niet van te voren weet hoe vaak je iets wilt herhalen? Dan gebruik je een andere soort loop. De while
-loop.
Als je dit programma uitvoert, dan zal hij nooit stoppen. Hij zal continu vragen om een woord in te typen en zodra je een woord intypt geeft hij de lengte van het ingetypte woord. Dit betekent dat het woordje EINDE nooit geprint zal worden.
We kunnen een while loop ook laten stoppen door gebruik te maken van een boolean (True/False waarde). We kunnen namelijk dit zeggen: Als iemand het woordje quit intypt, dan stoppen we met de loop.
Dit worden ook wel interactieve while loops genoemd. Het aantal keren dat de loop herhaalt is dan niet van te voren bepaald, maar hangt af van de invoer van de gebruiker!
Maak een interactieve while loop waarin een gebruiker net zo lang woorden kan intypen, totdat hij het woordje stop ingeeft. Zodra hij dat doet, gaat het programma uit de loop en eindigt hij. Een verloop van het programma zou er als volgt uit kunnen zien:
>>> Voer een woord in: hoi
>>> Voer een woord in: doei
>>> Voer een woord in: informatica
>>> Voer een woord in: boe
>>> Voer een woord in: stop
>>> Je wilt stoppen? Dat kan! Tot de volgende keer!
Lees herhaaldelijk een woord in van de gebruiker. Print dan steeds uit: Wat een mooi woord: Waarbij het woord is dat de gebruiker invoert. Zodra de gebruiker stop invoert stop je de loop.
Strings zijn rijen met letters
Een stukje tekst (string) in Python is eigenlijk een rij met letters. En zo kun je een variabele met tekst ook benaderen. Zie het volgende voorbeeld:
Door achter de variabele fruit
blokhaken (daarmee bedoel ik de tekens ‘[‘ en ‘]’) te plaatsen en daartussen een getal te zetten, geef je eigenlijk aan dat je de letter op positie drie wilt uitprinten. Dus in dit geval zeg ik: geef mij de letter op positie drie in het woord ‘banaan’. Maar denk erom dat python begint te tellen bij 0! Kortom, je krijgt niet de n te zien, maar de a! probeer maar eens.
Maak een programma dat de gebruiker steeds vraagt(in een while loop) om een woord in te voeren. Als het woord begint met een n, dan zegt hij "Je woord begint met een n" en stopt hij met de loop.
Maak een programma dat de gebruiker steeds vraagt(in een while loop) om een woord in te voeren. Als het woord eindigt met een n, dan zegt hij "Je woord eindigt met een n" en stopt hij met de loop.
TIP: Omdat je niet weet hoe lang het woord is, dat de gebruiker intypt, kun je ook niet zomaar naar de zoveelste letter kijken. Maar wellicht kun je wel dankbaar gebruik maken van de len()
functie!
Het volgende programma telt het aantal keren dat de letter ‘a’ voorkomt in een woord.
Hierboven staat een variant van een loop die je als het goed is nog niet eerder hebt gezien. for letter in woord
is een loop die in dit geval zes keer wordt herhaald. Waarom? Omdat het woordje banaan uit zes letters bestaat! En elke keer bevat de variabele letter de volgende letter in het woord. De eerste keer bevat het de letter b
, de tweede keer de letter a
, de derde keer n
enzovoorts.
Dit programma demonstreert ook het gebruik van een teller. De variabele teller is aan het begin ingesteld op 0 en vervolgens wordt hij iedere keer opgehoogd zodra een ‘a’ is gevonden. Als de loop afloopt, bevat teller het resultaat: namelijk het totaal aantal ‘a’-s.
Pas het bovenstaande programma aan, zodat de gebruiker een woord mag ingeven. Vervolgens moet het programma het aantal klinkers (‘a’, ‘e’, ‘i’, ‘o’ , ‘u’) tellen in dat woord.
Net als dat if-opdrachting in if-opdrachten gezet kunnen worden, kan dit ook met for-loops. Dit is heel handig als je bijvoorbeeld tien keer door een woord wilt loopen.
Zoals je kan zien wordt er hier 5 keer door het woord 'banaan' heen geloopt. En elke keer word er een print actie uitgevoerd per letter in dat woord. Daarom staat elke letter op een nieuwe regel. Als je bijvoorbeeld een ander woord zou nemen in plaats van “for i in range(5)
:” zou er net zo vaak banaan geschreven worden, als er letters in dat woord zou zitten
Hier zie je dus dat het woord banaan
drie keer geprint wordt, omdat het woord 'koe
' bestaat uit drie letters. Bij het volgende voorbeeld wordt dat nog iets duidelijker hoe het werkt
Hier zie je dat er eerst een 'k’
geprint wordt, vervolgens een 'b’
, daarna weer een 'k’
, dan een 'a’
etc. Zo zie je dat er per letter in koe, steeds door het woord banaan gegaan wordt.
Schrijf een programma dat vier keer, elke letter van het woord “lolly” print.
Schrijf een programma dat afwisselend elke letter van twee verschillende woorden print, dus: koe + man wordt:
>>> k
>>> m
>>> o
>>> a
>>> e
>>> n
Je kunt in Python ook met de in operator kijken of een letter in een woord voorkomt:
In alle drie de gevallen is de in-constructie een vergelijking die waar of onwaar is. Daarom mag je hem achter een if zetten.
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:
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:
We hebben nu daisy in het leven geroepen. Nu kunnen ze de liefde aan elkaar verklaren door gezamenlijk een driehoek te tekenen ;)
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.
Je kunt de turtle ook laten reageren op een muisklik of een toetsaanslag. Dit soort “gebeurtenissen” worden ook wel events genoemd. Hier een voorbeeld:
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:
Merk op dat we hier maar één keer de listen functie hoeven aan te roepen!
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)?
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 e 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:
Je kunt parameters ook gebruiken in berekeningen. In Python kun je de bewerkingen die je al kent ook doen:
Een voorbeeld is het tekenen van het volgende figuur:
We willen dat doen met twee functies:
We krijgen de lengte mee als parameter dus die kunnen we gebruiken door er bijvoorbeeld eerst 50 en dan 100 bij op te tellen:
Of we kunnen steeds vermenigvuldigen:
Het hangt er natuurlijk vanaf wat je wilt bereiken. Maar je kunt nu makkelijk dit maken:
Maak functie die het volgende figuur tekent:
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:
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:
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.
Zorg dat er uiteindelijk dit plaatje uit komt:
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.
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.
Eindopdracht voor het VWO
Het is de bedoeling dat je het spel “het langste woord” maakt. Als de speler het spel opstart, dan wordt hij/zij gevraagd naar zijn naam. Vervolgens wordt de speler welkom geheten. Het spel kan dan pas echt beginnen!
De speler krijgt zeven letters aangereikt. Drie daarvan zijn klinkers en vier daarvan zijn medeklinkers. De letters die de speler krijgt zijn willekeurig. De opdracht is nu om vijf keer een woord te maken van de letters die je hebt gekregen. Hoe langer het woord hoe meer punten je krijgt. Om preciezer te zijn: voor elke letter dat in het goede woord zit krijg je een punt. Je kunt via de functie bestaat_woord()
checken of een opgegeven woord bestaat in het woordenboek. Als een opgegeven woord niet in het woordenboek bestaat of andere letters bevat dan de letters die je hebt gekregen, dan gaan er - afhankelijk van het aantal letters in het verkeerde woord - punten vanaf. Je mag vijf keer een poging doen. Het totaal aantal punten dat je behaalt is afhankelijk van de vijf pogingen die je hebt gedaan. Nadat de vijf pogingen zijn gedaan krijgt de speler de mogelijkheid om het spel opnieuw te spelen. Als de speler dan wilt, dan begint het opnieuw (hij hoeft dan niet weer zijn naam op te geven), zodra de speler dat niet wilt, dan mag een ander het spel spelen. Het programma vraagt dan hoe de nieuwe speler heet. Het spelverloop zou er als volgt uit kunnen zien (de dikgedrukte woorden zijn de dingen die de speler heeft moeten intypen):
Je kunt het spel op verschillende niveau’s programmeren.
aan het begin van het spel mag de speler zijn naam invoeren en tijdens het spel wordt deze naam gebruikt
de speler krijgt zeven willekeurige letters waarvan drie klinkers
de speler mag vijf woorden invoeren
de hoogste score wordt bijgehouden (in een variabele)
de score van de speler wordt goed bijgehouden
de woorden die de speler invoert worden goed gecontroleerd
het aantal punten per woord wordt goed berekend
de speler kan het spel opnieuw starten
je kunt aan het begin van het spel kiezen uit verschillende woordenlijsten. Engels, Frans of Nederlands;
er wordt een highscore bijgehouden in een apart bestand/database
vrije invulling. Je mag het spel zo mooi maken als je wilt. Overleg wel even met mij (je docent)
In hoeverre zijn alle eisen in het spel aanwezig?
Goed gebruik van loops
Goed gebruik van if-elif-else constructies
Goed gebruik van variabelen en variabelenamen
Goed gebruik van functies? Maak je zelf ook functies waardoor de code wat georganiseerder en overzichtelijker wordt? Hoe noem je die functies?
Zet je genoeg commentaar in je code, zodat de code overzichtelijk is voor anderen?
Begrijp je het ook= Ik ga je vragen, voordat ik het cijfer geef, of je wilt uitleggen hoe het precies werkt, en welk onderdeel van het programma welke gevolgen heeft.
Er wordt niet alleen gekeken of het werkt, maar ook hoe je hebt geprogrammeerd. Bondig programmeren, als iets in twee regels kan en je hebt het in tien regels gedaan dan werkt dat niet in je voordeel.
Hoe ziet het er uit?
Eindopdracht voor het VWO
Het is de bedoeling dat je het spel Wordmind maakt. Wordmind is een woordspelletje wat veel weg heeft van het welbekende spel Lingo. De essentie van het spel is als het volgt: De speler van het spel moet een woord raden. Afhankelijk van de invoer van de gebruiker geeft het programma aan in hoeverre het woord goed is geraden. Het spel blijft de speler vragen om het woord te raden totdat de speler het goede woord raadt of totdat de speler aangeeft dat hij wil stoppen met het spel. Een verloop van het programma zou er als volgt uit kunnen zien (we gaan ervan uit dat het geheime woord brommer is:
Het spel moet aan de volgende eisen voldoen:
Als je een woord raadt en een letter komt qua positie exact overeen met het geheime woord, dan laat je dat voor de volgende keer zien. Voorbeeld: (stel je voor dat het geheime woord henk is, en de speler raadt het volgende: kaak. Dan gebeurt het volgende:
Als de speler een woord raadt, en een letter komt wel voor in het woord, maar niet op de juiste plek. Dan moet deze letter aangegeven worden met een ?. Voorbeeld: (Dus stel je voor dat het geheime woord henk is, en de speler raadt nico. Dan gebeurt het volgende:
Als de speler het goede woord raadt, dan geeft het programma aan met hoeveel keer het goede woord is geraden. Zie ook het voorbeeld aan het begin van dit document.
Extra opdrachten voor leerlingen die extra uitdaging op prijs stellen:
Voeg een puntentellingssysteem aan het spel. Hoe sneller je het woord raadt, hoe hoger je score! (TIP: gebruik hier import time voor). Voeg ook een highscorelist toe aan het spel.
Op het scherm verschijnen evenveel streepjes als dat er letters in het woord zijn. De gebruiker typt een letter. Als de letter voorkomt, verschijnt deze op de stippen waar het voorkomt;
Het programma moet het bestand <woordenlijst> in kunnen lezen om daar willekeurig een woord uit te kiezen. Dit ‘geheime’ woord moet dan worden geraden;
In het programma moet het mogelijk zijn om deze woordenlijst aan te passen; d.w.z.: je moet woorden kunnen toevoegen aan de woordenlijst;
Vrije invulling. Bespreek je voorstel even met je docent.
In hoeverre zijn alle eisen in het spel aanwezig?
Goed gebruik van loops
Goed gebruik van if-elif-else constructies
Goed gebruik van variabelen en variabelenamen
Goed gebruik van functies? Maak je zelf ook functies waardoor de code wat georganiseerder en overzichtelijker wordt? Hoe noem je die functies?
Zet je genoeg commentaar in je code, zodat de code overzichtelijk is voor anderen?
Begrijp je het ook? Ik ga je vragen, voordat ik het cijfer geef, of je wilt uitleggen hoe het precies werkt, en welk onderdeel van het programma welke gevolgen heeft.
Er wordt niet alleen gekeken of het werkt, maar ook hoe je hebt geprogrammeerd. Bondig programmeren, als iets in twee regels kan en je hebt het in tien regels gedaan dan werkt dat niet in je voordeel.
Hoe ziet het er uit?
Eindopdracht voor de VWO
Het is de bedoeling dat je het spel Hangman, oftewel Galgje ontwikkelt. Iedereen heeft wel eens hangman gespeeld, maar toch even de essentie van het spel: De speler van het spel moet een woord raden. Dat doet hij/zij door iedere keer een letter te noemen die hopelijk voorkomt in het geheime woord. Het spel blijft de speler om een letter vragen totdat de speler weet wat het woord is. Een verloop van het programma zou er als volgt uit kunnen zien (we gaan ervan uit dat het geheime woord banaan is:
Zoals je hierboven ziet mag een speler steeds een letter raden van het geheime woord. Als de letter in het woord zit dan wordt dat aangegeven en anders wordt er stap voor stap een galgje opgebouwd. Als de speler weet om welk woord het gaat, dan kan hij/zij i.p.v. een letter het vraagteken invoeren. Dan mag je namelijk het woord raden. Als je na 5 mislukte pogingen nog steeds het woord niet weet, dan hang je. Dat ziet er als volgt uit: (het onderstaande is na 5 mislukte pogingen)
Je mag precies 1 karakter invoeren of een vraagteken. Als iemand 2 karakters invoert, dan moet het programma een foutmelding geven. Zie:
Kiest de speler een letter dat hij al eerder had gekozen, dan telt dat niet mee en dan krijg je een foutmelding. Zie:
Bij elke mislukte poging wordt het galgje steeds verder opgebouwd. Na 5 mislukte pogingen is het “Game over” en hang je helemaal. Ook wordt het geheime woord nog even getoond.
De letters die de speler goed heeft geraden geef je steeds weer. Dat hoeft niet in de juiste volgorde. Zie:
Als de speler alle letters al heeft geraden, dan krijgt hij de mogelijkheid om het hele woord te raden. Zie:
De speler mag aan het begin van het spel het geheime woord opgeven;
Het programma houdt bij na hoeveel keer het woord is geraden (of juist niet);
De speler mag geen getallen of andere tekens invoeren. Zo ja, dan krijg je een foutmelding;
Als de speler QQ intypt, dan eindigt het spel sowieso.
Voeg een puntentellingssysteem aan het spel. Hoe sneller je het woord raadt, hoe hoger je score! (TIP: gebruik hier import time voor). Voeg ook een highscorelist toe aan het spel.
Op het scherm verschijnen evenveel streepjes als dat er letters in het woord zijn. De gebruiker typt een letter. Als de letter voorkomt, verschijnt deze op de stippen waar het voorkomt;
Het programma moet het bestand <woordenlijst> in kunnen lezen om daar willekeurig een woord uit te kiezen. Dit ‘geheime’ woord moet dan worden geraden;
In het programma moet het mogelijk zijn om deze woordenlijst aan te passen; d.w.z.: je moet woorden kunnen toevoegen aan de woordenlijst;
Vrije invulling. Bespreek je voorstel even met je docent.
In hoeverre zijn alle eisen in het spel aanwezig
Goed gebruik van loops
Goed gebruik van if-elif-else constructies
Goed gebruik van variabelen en variabelenamen
Goed gebruik van functies? Maak je zelf ook functies waardoor de code wat georganiseerder en overzichtelijker wordt? Hoe noem je die functies?
Zet je genoeg commentaar in je code, zodat de code overzichtelijk is voor anderen?
Begrijp je het ook? Ik kan je vragen uit te leggen hoe het precies werkt, en welk onderdeel van het programma welke gevolgen heeft.
Er wordt niet alleen gekeken of het werkt, maar ook hoe je hebt geprogrammeerd. Bondig programmeren, als iets in twee regels kan en je hebt het in tien regels gedaan dan werkt dat niet in je voordeel.
Hoe ziet het er uit?
Voor deze opdracht krijg je wat begincode. Zie:
Zet de woorden in een database zoals SQLite. Zie hiervoor:
Met python kun je ook een spel met een echte gebruikersinterface maken. Een GUI dus. Maak Wordmind met een echte GUI. Zie hiervoor:
Zet de woorden in een database zoals SQLite. Zie hiervoor:
Met python kun je ook een spel met een echte gebruikersinterface maken. Een GUI dus. Maak Hangman met een echte GUI. Zie hiervoor:
Booleaanse expressie
True / False
4 > 3
True
5 <= 2
False
2 != 3
True
2 <= 2
True
2 < 2
False
"Henk" == "Henk"
True
"henk" == "Henk"
False
Bewerking
in Python
plus of min
+ of -
keer
*
gedeeld door
/
tot de macht
^