Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
De havo maakt de opdrachten in Python Kunst. Het vwo kiest een van de drie andere eindopdrachten.
Success
De eerste de 2 lessen volgens de planner en ga dan aan de slag met de eindopdracht.
Succes!
Je kunt parameters ook gebruiken in berekeningen. In Python kun je de bewerkingen die je al kent ook doen:
Bewerking
in Python
plus of min
+ of -
keer
*
gedeeld door
/
tot de macht
^
Een voorbeeld is het tekenen van het volgende figuur:
We willen dat doen met twee functies:
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.
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 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?
Voor deze opdracht krijg je wat begincode. Zie: https://repl.it/@hakkas/FluffyFrugalIde
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;
Zet de woorden in een database zoals SQLite. Zie hiervoor: http://zetcode.com/db/sqlitepythontutorial/
Met python kun je ook een spel met een echte gebruikersinterface maken. Een GUI dus. Maak Wordmind met een echte GUI. Zie hiervoor: http://www.techrepublic.com/article/a-quickstart-to-building-gui-based-applications-in-python/6310615
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 Havo
Je hebt geoefend met loops en functies. Nu is het tijd om aan een eindopdracht te werken!
De classroom voor de eindopdracht kun je hier vinden. De eindopdracht is ……. Laat je Turtle een mooie tekening maken. Je kunt denken aan:
een landschap;
een stukje van een stad
een beeld uit de ruimte of oceaan
Je opdracht moet minimaal voldoen aan de volgende eisen:
Je hebt minimaal zes verschillende objecten in je tekening. Voorbeelden van een object:
huis
zon
vogel
ruimteschip
vis
komeet
bloem
boom
etc
Voor elk object in je tekening maak je een functie. Dus bijvoorbeeld voor een gebouw, een ruimteschip, een komeet, een vis maak je allemaal functies
Elke functie heeft parameters. Bijvoorbeeld voor de kleur van het object, de grootte van het object en de positie (x en y)
Je plaatje moet er leuk uitzien, dus gebruik van kleuren is een vereiste.
Waar je loops kunt gebruiken, moet je die ook gebruiken. Dus geen onnodige code in je programma.
Extra punten:
Je zou de positie van sommige objecten random kunnen bepalen zodat je turtle elke keer een andere tekening maakt
Zorg ervoor dat minstens 1 object kan bewegen. Doe dit met event-handling. Zie Les 2 van Python Kunst.
Voor een idee zou je kunnen kijken naar de volgende plaatjes:
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;
Zet de woorden in een database zoals SQLite. Zie hiervoor: http://zetcode.com/db/sqlitepythontutorial/
Met python kun je ook een spel met een echte gebruikersinterface maken. Een GUI dus. Maak Hangman met een echte GUI. Zie hiervoor: http://www.techrepublic.com/article/a-quickstart-to-building-gui-based-applications-in-python/6310615
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?