• No results found

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

N/A
N/A
Protected

Academic year: 2022

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

Copied!
12
0
0

Bezig met laden.... (Bekijk nu de volledige tekst)

Hele tekst

(1)

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?

(2)

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/

(3)

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])

(4)

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 .

(5)

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.

(6)

… 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? ____________________________________________________

(7)

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.

(8)

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.

(9)

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.

(10)

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.

(11)

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?

(12)

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.’.

Referenties

GERELATEERDE DOCUMENTEN

Voor het antwoord dat de Q-koortsbacterie muteert waardoor het vaccin steeds aangepast moet worden, wordt 1

− Tijdens het sporten wordt door de lever meer glycogeen in glucose omgezet. − Als je ineens schrikt kan door de afgifte van adrenaline er snel meer glucose in het

Uit het antwoord moet blijken dat het afwijkende (X-chromosomale) allel bij haar overgrootvader tot onvruchtbaarheid zou hebben geleid / tot een vrouwelijk fenotype zou hebben

• Uit bron 10 (de brief van Robert Otto Marcus) blijkt de invloed van het thuisfront, omdat hij, als hij door zijn vader gevraagd wordt naar huis te gaan (om zijn studie af

Uit het antwoord moet blijken dat de gekweekte, onvruchtbare mannetjes (wel paren, maar) geen eicellen kunnen bevruchten / geen nakomelingen produceren / de kans verkleinen dat

Uit het antwoord moet blijken dat als bloedvaten minder elastisch/rekbaar zijn er (bij inspanning) minder bloed door kan, waardoor de bloeddruk

Uit het antwoord moet blijken dat er daar nog andere (soorten) reducenten zijn (die daar heel goed groeien door de heersende temperatuur en hoge

Maar ik versta het zo, dat wij door het geloof Christus aannemen, Die onze gerechtigheid is en ons tot kinderen van God maakt, zoals Johannes zegt: &#34;Zovelen Hem