Quiz - PERL...De leerlingen kunnen zelfstandig met deze les aan de slag, een klassikale introductie...

13
Quiz Doel: de leerlingen schrijven een quizprogramma in Python waarbij ze spreekwoorden op de juiste manier moeten afmaken. Een goed antwoord levert punten op. Beginsituatie: De leerlingen kennen de basisbeginselen van programmeren in Python (introductieles), het werken met lijsten (zinnengenerator, alfabetische volgorde), het omgaan met input (alfabetisch ordenen), het werken met randomness (zinnengenerator) en lussen (alfabetische volgorde). De leerlingen hebben ervaring met de programmeerconcepten strings, lijsten, input, randomness, lussen, voorwaarden en variabelen (in Scratch). Materiaal: een laptop/pc per leerling of duo Werkvorm: Als aan de voorwaarden voor de beginsituatie voldaan is, kunnen de leerlingen deze les zelfstandig maken. De leerlingen werken bij voorkeur in tweetallen. Start – kern – slot De leerlingen kunnen zelfstandig met deze les aan de slag, een klassikale introductie of afsluiting is facultatief. De leerlingen werken met de lesbrief. De leerkracht loopt rond om vragen te beantwoorden en hulp te bieden waar nodig. Een aantal opdrachten in deze les wordt in tweetallen gemaakt. Naar eigen inzicht kunnen delen van de les klassikaal gedaan worden.

Transcript of Quiz - PERL...De leerlingen kunnen zelfstandig met deze les aan de slag, een klassikale introductie...

Page 1: Quiz - PERL...De leerlingen kunnen zelfstandig met deze les aan de slag, een klassikale introductie of afsluiting is facultatief. De leerlingen werken met de lesbrief. De leerkracht

Quiz

Doel: de leerlingen schrijven een quizprogramma in Python waarbij ze spreekwoorden op de juiste manier

moeten afmaken. Een goed antwoord levert punten op.

Beginsituatie: De leerlingen kennen de basisbeginselen van programmeren in Python (introductieles), het

werken met lijsten (zinnengenerator, alfabetische volgorde), het omgaan met input (alfabetisch ordenen),

het werken met randomness (zinnengenerator) en lussen (alfabetische volgorde). De leerlingen hebben

ervaring met de programmeerconcepten strings, lijsten, input, randomness, lussen, voorwaarden en

variabelen (in Scratch).

Materiaal: een laptop/pc per leerling of duo

Werkvorm: Als aan de voorwaarden voor de beginsituatie voldaan is, kunnen de leerlingen deze les

zelfstandig maken. De leerlingen werken bij voorkeur in tweetallen.

Start – kern – slot De leerlingen kunnen zelfstandig met deze les aan de slag, een klassikale introductie of afsluiting is

facultatief. De leerlingen werken met de lesbrief. De leerkracht loopt rond om vragen te beantwoorden

en hulp te bieden waar nodig. Een aantal opdrachten in deze les wordt in tweetallen gemaakt.

Naar eigen inzicht kunnen delen van de les klassikaal gedaan worden.

Page 2: Quiz - PERL...De leerlingen kunnen zelfstandig met deze les aan de slag, een klassikale introductie of afsluiting is facultatief. De leerlingen werken met de lesbrief. De leerkracht

Quiztime! Wat is de hoofdstad van Spanje?

Hoeveel poten heeft een spin?

Wie heeft de gloeilamp uitgevonden?

Weet je het antwoord op deze vragen? Dan ben je vast ook goed in quizzen. Maar, ben je ook goed in het

maken van quizzen voor iemand anders? Na deze les wel. Je gaat namelijk een quiz maken in Python die

door anderen gespeeld kan worden. Wie haalt de hoogste score op jouw quiz?

Je maakt een quiz over tegenstellingen, maar als je weet hoe dat moet, kun je daarna net zo makkelijk

quizzen maken over elk onderwerp dat je wil! Laten we beginnen.

We gebruiken hiervoor dingen die je al weet over programmeren in Scratch, maar het uiteindelijke

programma schrijven we in Python. We gebruiken ook dingen die je in de vorige lessen al geleerd hebt

over programmeren in Python.

De basis Wat zijn de belangrijkste onderdelen van een quiz? Natuurlijk de vragen en de antwoorden! Dus die ga je

eerst bedenken. De quiz die je gaat maken, gaat over tegenstellingen, zoals warm-koud. Schrijf hieronder

vijf tegenstellingen op.

Nu gaan we de tegenstellingen in ons programma zetten. Maak daarvoor een nieuw bestand aan op

repl.it en noem dat bestand ‘quiz’.

? De computer is niet zo slim als jij, je moet hem nog vertellen welke woorden bij elkaar horen. Hoe zou

je dat kunnen doen, denk je?

Page 3: Quiz - PERL...De leerlingen kunnen zelfstandig met deze les aan de slag, een klassikale introductie of afsluiting is facultatief. De leerlingen werken met de lesbrief. De leerkracht

Misschien heb je in Scratch wel eens een quiz gemaakt.1 Dan heb je waarschijnlijk twee lijsten gemaakt,

een met alle vragen en een met alle antwoorden. Je hebt er dan waarschijnlijk voor gezorgd dat de vraag

en het antwoord die bij elkaar horen op dezelfde plaats in de lijst stonden; de eerste vraag hoorde bij het

eerste antwoord, de tweede vraag bij het tweede antwoord, enzovoort. Dat zag er dan ongeveer zo uit:

Je kunt je programma

dan laten controleren

of de vraag en het

antwoord op

dezelfde plaats staan

in de lijst en als dat

zo is, dan krijg je

punten anders niet,

of ben je af.

In Python zoud je dat ook zo kunnen doen. Je weet tenslotte al hoe je lijsten moet maken en hoe je

daarmee moet werken. Je moet alleen wel heel erg goed opletten dat je vraag en je antwoord op dezelfde

plaats staan, ieder in hun eigen lijst. In Python kunnen we dit op een andere manier oplossen: We kunnen

een lijst maken van… lijsten!

We maken van elk vraag-antwoord-paar een lijst, en van die lijsten met vraag-antwoord-paren maken we

dan één lange lijst waarin alle vraag-antwoord-paren staan. Snap je het nog? Geen nood, we doen het

samen, stap voor stap!

De voorbereidingen

Stap 1: alles op een rijtje Maak eerst eens een lijst waarin je jouw tegenstellingen zet, elk woord is een apart item in deze lijst, en

noem deze lijst ‘tegenstellingen’. Eerst het ene woord, daarna het tegengestelde, dan het volgende woord

en daarna hiervan het tegengestelde en zo door. Hoe ziet jouw lijst eruit?

! Heb je eraan gedacht dat je elk woord tussen aanhalingstekens moet zetten?

1 Bijvoorbeeld in de MOOC Scratch: programmeren voor kinderen op https://courses.edx.org/courses/course-v1:DelftX+ScratchX+2T2016/course/

Het is niet erg als dit wat snel gaat voor de leerlingen, dat is met

opzet. In het vervolg van de les wordt alles stap voor stap duidelijk.

In zowel de les over de zinnengenerator als

de les over alfabetische volgorde hebben de

leerlingen al met lijsten gewerkt. Dit zou dus

niet moeilijk voor ze moeten zijn. Verwijs

anders naar deze voorgaande lessen.

Page 4: Quiz - PERL...De leerlingen kunnen zelfstandig met deze les aan de slag, een klassikale introductie of afsluiting is facultatief. De leerlingen werken met de lesbrief. De leerkracht

Probeer nu eens de woorden uit je lijst op je scherm te printen. Weet je nog hoe dat moet? In de les over

de zinnengenerator heb je dat ook al gedaan.

Het is ook heel gemakkelijk om een woord en zijn tegengestelde toe te voegen aan deze lijst. Bedenk nog

twee tegenstellingen en voeg deze toe aan je lijst. Als je niet meer weet hoe dat ging, kun je kijken bij de

les over de zinnengenerator.

Stap 2: paren maken Wij weten nu dat woorden die naast elkaar staan elkaars tegengestelde zijn. Tenminste, het eerste en het

tweede woord uit de lijst ‘tegenstellingen’ zijn elkaars tegengestelde, maar het tweede en het derde

woord zijn dat niet. En als we een woord en zijn tegengestelde uit de lijst willen halen, moeten we heel

erg voorzichtig zijn dat we wel een setje weggooien en niet per ongeluk het verkeerde woord. Daarom is

het handig om ervoor te zorgen dat woorden die bij elkaar horen, ook in het programma bij elkaar horen.

We gaan nu van elk setje van woorden die bij elkaar horen een lijst maken. Je krijgt dan een heleboel

lijsten van twee woorden.

Schrijf hieronder jouw tegenstellingen op en maak er lijstjes van twee van.

Nu ga je van al die lijstjes van twee één grote lijst maken. Dit doe je zo:

tegenstellingen = [ [‘hard’, ‘zacht’], [‘dik’, ‘dun’] ]

! Om iedere lijst van twee woorden staan rechte haken, zodat Python weet dat het een lijst is. Om de

grote lijst van lijsten staan ook rechte haken, zodat Python weet dat dit een lijst is, een lijst met daarin als

items allemaal lijstjes!

Stap 3: wat zit waar Probeer de volgende stukjes code nu eens uit met jouw programma en beschrijf wat ze doen:

print(tegenstellingen[0])

print(tegenstellingen[1])

Het is belangrijk dat de leerlingen

zien hoe een lijst van lijsten eruit

ziet. Dat items van een lijst van alles

kunnen zijn, dus ook een lijst. Dit is

een lastig concept, het is goed om

hier even (klassikaal / aan het eind

van de les) bij stil te staan.

Page 5: Quiz - PERL...De leerlingen kunnen zelfstandig met deze les aan de slag, een klassikale introductie of afsluiting is facultatief. De leerlingen werken met de lesbrief. De leerkracht

print(tegenstellingen[0][0])

print(tegenstellingen[0][1])

Het eerste getal tussen de rechte haken geeft je het item dat op die plaats staat in de grote lijst. En dat

item is steeds een lijst van twee woorden. Omdat de items uit de grote lijst zelf ook lijsten zijn, kun je daar

ook weer de items uithalen en dat doe je met het tweede getal tussen de rechte haken. Zo kijkt

print(tegenstellingen[0][0]) dus naar het eerste item van de grote lijst (in het voorbeeld

[‘hard’, ‘zacht’]) en geeft van dat item, die lijst, weer het eerste item (in het voorbeeld ‘hard’).

Vraag… We hebben nu alle onderdelen die we nodig hebben en kunnen die oproepen wanneer we willen. Nu

gaan we hiermee een quiz maken om je kennis van de tegenstellingen te testen (of die van je

klasgenoten).

De quiz begint met aan de deelnemer te vragen wat het tegengestelde is van een woord. Hiervoor

moeten we aan die deelnemer vragen om iets in te typen en dat antwoord moeten we onthouden om

later te vergelijken met het goede antwoord.

Misschien weet je nog hoe in Scratch vraagt aan de gebruiker om iets in te voeren. Inderdaad, met

.

Er verschijnt dan een invoervak bij de Sprite en wat je daar in typt, wordt opgeslagen in .

Er staan nu twee getallen tussen

rechte haken, om toegang te

kunnen krijgen tot de items in de

ingebedde lijsten. Dit is een lastig

concept, het is goed om hier even

(klassikaal / aan het eind van de

les) bij stil te staan.

Page 6: Quiz - PERL...De leerlingen kunnen zelfstandig met deze les aan de slag, een klassikale introductie of afsluiting is facultatief. De leerlingen werken met de lesbrief. De leerkracht

In Python kunnen we iets vergelijkbaars doen. Alleen moet je in Python zelf aangeven waar je het

antwoord wil opslaan, er is geen vooraf gemaakte ‘antwoord’-variabele. In Python neem je de volgende

stappen:

• Bedenk wat je aan de lezer wil vragen, bijvoorbeeld ‘Wat is je keuze?’

• Kies een naam voor de variabele waar je het antwoord in wil opslaan, bijvoorbeeld keuze.

Je code in Python ziet er dan als volgt uit:

keuze = input(‘Wat is je keuze?’)

dit is wat je aan de lezer vraagt

dit betekent dat je aan de lezer vraagt om iets in te voeren

samen doet dit hetzelfde als het vraag-blok in Scratch

In deze variabele wordt het antwoord van de lezer opgeslagen.

Je gaat nu oefenen met vraag en antwoord (input), maak hiervoor een apart bestand aan in repl.it, zodat

je niet per ongeluk aan je quiz dingen verandert. Noem dit bestand ‘oefenen’.

Probeer eens hoe het werkt door de volgende code te typen en uit te voeren in repl.it

keuze = input(‘Wat is je keuze?’)

Wat gebeurt er?

Je kunt nu iets typen in het venster rechts en dat wordt opgeslagen in de variabele keuze. Door

print(keuze) aan je code toe te voegen, kun je dit controleren.

Doordat je in Python het antwoord van de lezer in een zelfgekozen variabele opslaat, kun je ook makkelijk

meerdere antwoorden opslaan en onthouden, zonder dat de eerdere antwoorden vergeten worden, zoals

in het voorbeeld hieronder.

keuze_kleur = input('Wat is je lievelingskleur?') keuze_dier = input('Wat is je lievelingsdier?') keuze_getal = input('Wat is je lievelingsgetal?') print('Je lievelingskleur is', keuze_kleur) print('Je lievelingsdier is', keuze_dier) print('Je lievelingsgetal is', keuze_getal) Probeer nu zelf ook eens meerdere dingen aan de gebruiker te vragen en in verschillende variabelen op te slaan.

Nu wordt het extra mooi: je kunt een item uit je lijst gebruiken in je vraag aan de gebruiker. Ga weer naar

je code van de quiz en probeer het volgende stukje code eens uit:

antwoord = input('Wat is het tegengestelde van ' + tegenstellingen[0][0] +'?')

print(antwoord)

Probeer ook eens of je naar de andere tegenstellingen kunt vragen.

Page 7: Quiz - PERL...De leerlingen kunnen zelfstandig met deze les aan de slag, een klassikale introductie of afsluiting is facultatief. De leerlingen werken met de lesbrief. De leerkracht

… en antwoord! Het is heel mooi dat de quizdeelnemer nu zijn antwoord in kan typen en dat we dat antwoord ook kunnen

printen, maar dat is nog geen quiz natuurlijk. We moeten nog wel controleren of dat antwoord ook goed

is!

! Het tegengestelde van tegenstellingen[0][0] zit natuurlijk in tegenstellingen[0][1],

het tegengestelde van tegenstellingen[1][0] zit in tegenstellingen[1][1] enzovoort.

We moeten nu dus het antwoord dat de gebruiker heeft gegeven vergelijken met het goede antwoord.

Als deze antwoorden hetzelfde zijn, dan heeft de deelnemer het goed, anders niet.

Als we in Scratch zouden programmeren, zouden we een speciaal blok gebruiken voor deze keuze, weet jij

welk? ____________________________________________________

Page 8: Quiz - PERL...De leerlingen kunnen zelfstandig met deze les aan de slag, een klassikale introductie of afsluiting is facultatief. De leerlingen werken met de lesbrief. De leerkracht

Inderdaad, je gebruikt dit blok , daarmee kun je programmeren dat als iets het geval is, dan

moet er iets speciaals gebeuren. Dit kunnen we gebruiken om het juiste pad van het algoritme te volgen,

afhankelijk van de keuze van de gebruiker. Het Engelse als-dan-blok in Scratch ziet er zo uit: .

If is Engels voor als en then is Engels voor dan. In Python gebruik je ook deze Engelse woorden.

Een voorbeeld:

Deze code betekent: als (de variabele) antwoord gelijk

is aan 1, dan zegt de sprite ‘Goed!’

In Python ziet dat er dan zo uit:

if antwoord == 1: print('Goed!') Kijk eens goed naar dit stukje code, wat valt je op?

Eigenlijk gebeurt er hetzelfde als in het stukje Scratch-code, er zijn twee regels. Op de eerste regel staat wat waar moet zijn en op de tweede regel wat er dan gebeurt. Ook de volgorde op de eerste regel is hetzelfde. Eerst staat er if (Engels voor als), dan wat waar moet zijn dan een dubbele punt. Die dubbele punt staat in de plaats van het woordje dan (of het Engelse then). Het was je vast al opgevallen dat er == staat in Python en maar één = in Scratch. Dat is zo, om te zorgen dat je niet in de war raakt. In Python gebruik je één = als iets in een variabele of een lijst wil stoppen en == wanneer je wil controleren of twee dingen gelijk zijn aan elkaar. De tweede regel staat een stukje naar rechts, dit noemen we inspringen. In Scratch zit het als-dan-blok om het zeg-blok heen om te laten zien dat het zeg-blok bij het als-dan-blok hoort. Daardoor staat het zeg-blok ook een beetje naar rechts. Het mag alleen uitgevoerd worden als de voorwaarde waar is. In Python laat je zien dat een stukje code op deze manier bij een ander stukje code hoort door het te laten inspringen. Maak nu de volgende Scratch-voorbeelden na in Python. (gebruik hiervoor ook weer even je oefen- bestand in repl.it, zodat je niet per ongeluk iets aan je quiz verandert)

In het

woorden-

boek zie je

meer ma-

nieren om

voorwaar-

den te

contro-

leren.

Het kan de leerlingen helpen om

klassikaal aandacht te besteden

aan de overeenkomsten tussen

de code in Scratch en in Python.

Daardoor wordt duidelijker wat

elk stukje van de code voor

functie heeft.

Page 9: Quiz - PERL...De leerlingen kunnen zelfstandig met deze les aan de slag, een klassikale introductie of afsluiting is facultatief. De leerlingen werken met de lesbrief. De leerkracht

Natuurlijk mag je ook zelf voorbeelden verzinnen. Bedenk nu eens hoe je het antwoord van de quizdeelnemer (dat opgeslagen zit in de variabele

‘antwoord’) kunt vergelijken met het goede antwoord en print ‘Goed zo!’ als het antwoord goed is en

‘Jammer, volgende keer beter’ als het antwoord fout is.

Page 10: Quiz - PERL...De leerlingen kunnen zelfstandig met deze les aan de slag, een klassikale introductie of afsluiting is facultatief. De leerlingen werken met de lesbrief. De leerkracht

Waarschijnlijk

ziet je

programma er

ongeveer zo uit.

Vragen door elkaar Je programma vraagt nu naar het tegengestelde van een bepaald woord. Dat is niet echt een spannende

quiz… Laten we ervoor zorgen dat je programma steeds zelf een nieuw woord kiest waarvan de speler het

tegengestelde moet geven. Je hebt al eerder een stukje code geschreven waarbij je programma een

willekeurig item uit een lijst kiest, weet je nog? Dat was in de les waarin je een zinnengenerator hebt

gebouwd die van een lijst onderwerpen en een lijst persoonsvormen steeds nieuwe zinnen maakt.

Hiervoor gebruikte je de regel from random import randint om de functie randint() in je

programma te gebruiken. randint() doet hetzelfde als het Scratch-blok .

Probeer eens uit hoe je de functie randint() kunt gebruiken om je programma steeds een nieuwe

willekeurige vraag te laten stellen. Overleg met je maatje.

! Let op dat je willekeurig een paar uit de lijst tegenstellingen kiest en dat het programma dit paar moet

gebruiken om de vraag te stellen én om het antwoord te controleren. Per beurt gebruik je dus maar één

keer de functie randint().

Extra: een andere manier van willekeurig kiezen Wanneer je aan het begin van je programma de regel

from random import *

typt in plaats van

from random import randint,

kun je ook andere functies gebruiken die in de module random zitten, zoals choice(). De functie choice

kiest een willekeurig item uit een lijst. Het handige hiervan is dat het niet uitmaakt hoe lang die lijst is, dit

hoef je dus ook niet aan te geven. Wanneer je choice(tegenstellingen) gebruikt, kiest je

programma willekeurig een item uit de lijst tegenstellingen.

Pas je programma zo aan dat je choice() gebruikt om een willekeurig paar uit je lijst tegenstellingen te

kiezen. Probeer je programma uit om te kijken wat er gebeurt.

Page 11: Quiz - PERL...De leerlingen kunnen zelfstandig met deze les aan de slag, een klassikale introductie of afsluiting is facultatief. De leerlingen werken met de lesbrief. De leerkracht

Van één vraag naar een quiz We willen de speler natuurlijk meer dan één vraag laten beantwoorden. We gebruiken hiervoor een

‘while’-lus zoals je dat ook hebt gedaan bij de les over alfabetische volgorde. Als voorbeeld kiezen we

ervoor om de speler tien beurten te geven.

Om bij te houden hoeveel beurten de speler heeft gehad, maken we een variabele ‘beurten’. Die

variabele begint met de waarde 1, want de speler begint met beurt 1. Schrijf hiervoor aan het begin van

je programma, net voor of na je lijst met lijsten van tegenstellingen beurten = 1

Aan het eind van iedere beurt, verhogen we de waarde van deze variabele met 1:

beurten = beurten + 1

Je kunt nu de while-lus zo lang laten lopen als je van tevoren bepaalt. while beurten < 11: zorgt er

bijvoorbeeld voor dat het programma stopt na 10 beurten.

Waarom is dat zo?

Pas je programma nu aan zodat de speler 10 beurten heeft. Overleg met je maatje welke delen van je

programma in de while-lus moeten en welke juist niet. Probeer je programma steeds uit om te kijken wat

er gebeurt.

Ben ik goed? Kun je een variabele score maken die bijhoudt hoe vaak iemand het goede antwoord heeft gegeven? Of

die voor ieder goed antwoord twee punten geeft en voor ieder fout antwoord er weer een punt aftrekt?

Of bedenk een ander systeem van punten geven.

De leerlingen moeten hier zelf bepalen welke code er in de

while-lus moet. Dat kan best lastig zijn. Je kunt hier samen

met de leerlingen over nadenken. Laat de leerlingen

uitproberen wat er gebeurt wanneer bepaalde onderdelen

van het programma juist wel en juist niet in de lus staan.

Page 12: Quiz - PERL...De leerlingen kunnen zelfstandig met deze les aan de slag, een klassikale introductie of afsluiting is facultatief. De leerlingen werken met de lesbrief. De leerkracht

EXTRA-EXTRA-EXTRA-EXTRA- EXTRA- EXTRA- EXTRA- EXTRA- EXTRA- EXTRA- EXTRA- EXTRA- EXTRA- EXTRA- EXT

De keuze is reuze Je kunt nu een quiz maken over ieder onderwerp dat je zou willen. Maak er een voor aardrijkskunde, voor

de tafels, voor Engelse woordjes…

Hoeveel rondes? Kun je je programma zo maken dat de speler zelf kan bepalen hoe lang hij speelt? Door van tevoren aan te

geven hoeveel rondes hij wil spelen bijvoorbeeld. Of door aan het eind van iedere ronde aan te geven of

hij nog verder wil spelen.

Of misschien stopt jouw quiz wel als de speler een fout heeft gemaakt.

Of misschien verwijdert je programma een paar van tegenstellingen uit de lijst als de speler goed heeft

geantwoord en stopt je programma als er geen tegenstellingen meer over zijn om aan de speler te vragen.

Hier kun je zelf een puntensysteem bij bedenken.

Plezier voor twee. Of drie. Of vier… Kun je je quiz zo aanpassen dat er meerdere spelers kunnen spelen, ieder met een eigen score?

Page 13: Quiz - PERL...De leerlingen kunnen zelfstandig met deze les aan de slag, een klassikale introductie of afsluiting is facultatief. De leerlingen werken met de lesbrief. De leerkracht

Woordenboek

Scratch Nederlands Scratch Engels Python Wat doet deze code?

if antwoord == 1: print(‘Goed!’)

Als het antwoord gelijk is aan 1, print het programma ‘Goed!’.

if antwoord == 1: print(‘Goed!’) else: print(‘Helaas, dat is fout.’)

Als het antwoord gelijk is aan 1, print het programma ‘Goed!’ en anders print het programma ‘Helaas, dat is fout.’.