Programmeren voor Kinderen

Leren programmeren op de basisschool

Les 9

Zullen we een spelletje maken?

Specificaties

Een specificatie is een beschrijving van wat een computerprogramma moet doen. Vaak zijn specificaties heel uitgebreid en precies. Een soort programma om de programmeur te programmeren, zeg maar. Daar houd ik niet zo van. Het is veel leuker als je ook nog wat zelf mag bedenken.

Soms zijn specificaties heel kort. Ze leggen alleen maar uit wat de gebruiker wil, maar hoe je dat doet mag je zelf bedenken. Ik zal je eens zo’n specificatie geven.

Ik wil graag een getalraadspelletje doen met de computer. Ik neem een getal onder de tien in mijn gedachten en de computer moet het raden.

Kun jij dit programma schrijven? Als je wilt kun je het proberen. Open maar een cmd-scherm en type notepad raden.py. Ga maar eens aan de slag. Als je niet weet hoe het verder moet lees je een stukje door.

Hele precieze specificaties

Het kan ook heel precies:

De computer moet de volgende opdracht op het scherm zetten:

Neem een getal onder de 10 in gedachten.

Vervolgens moet de computer de volgende vraag stellen:

Is het 1? 
(Type j als het waar is, en n als het niet waar is.)

Als het getal geraden is, zet de computer het volgende op het scherm:

Geraden!

Anders vraagt de computer:

Is het 2? 
(Type j als het waar is, en n als het niet waar is.)

De computer gaat door met vragen of het 3 is, 4, 5, tot en met 10.

Kun je het nu schrijven? Ik denk het wel, want ik heb een heleboel stukjes beschreven. Probeer het maar.

Twee nieuwe dingen

En? Gelukt?
Misschien heb je gemerkt dat de computer een beetje eigenwijs doet als je dit gebruikt:

    print 'Is het', i, '?'
    a = input('(Type j als het waar is, en n als het niet waar is.) ')

Want wat gebeurt er dan soms:

Neem een getal onder de 10 in gedachten.
Is het 1 ?
(Type j als het waar is, en n als het niet waar is.) n
Traceback (most recent call last):
  File "raden.py", line 4, in 
    a = input('(Type j als het waar is, en n als het niet waar is.) ')
  File "", line 1, in 
NameError: name 'n' is not defined

Heb je begrepen wat deze fout betekent? Een NameError, dat betekent dat Python de naam ‘n’ niet kent. Inderdaad, Python denkt dat je de variable n bedoelt, in plaats van gewoon de letter n. De string ‘n’, zeg maar.

Weet je wat je wel zou kunnen typen als je die vraag krijgt? Probeer dit maar eens:

Neem een getal onder de 10 in gedachten.
Is het 1 ?
(Type j als het waar is, en n als het niet waar is.) 'n'
Is het 2 ?
(Type j als het waar is, en n als het niet waar is.)

Zie je wel, nu doet hij het wel. Nu snapt Python dat je de string ‘n’ bedoelt.

Het gekke van input() is dus dat Python alles wat je typt gaat proberen te begrijpen. Daarom moet je dus een string typen als je gewoon de letter n bedoelt. Want als je de losse letter type denkt Python dat je de variabele n bedoelt, net als in je programma. Dat is wel een beetje onhandig van input().
Gelukkig is er een andere functie die alles wat je typt als string opvat. Die functie heet raw_input(). Gebruik die maar, dan kun je gewoon de enkele letter n typen, of j, en weet python gewoon dat je ‘n’ bedoelt, of ‘j’.

Nu doet je programma nog een ding stom, denk ik. Als je hebt toegegeven dat je 1 in gedachten had, gaat-ie toch nog vragen of het misschien 2 was, of 3, of 4. Eigenlijk wil je uit de lus breken als de computer het goede antwoord heeft geraden. Dat kan: daarvoor gebruik je break.

Opdracht

Kun jij dit programma schrijven?

Wat heb je geleerd?

  • Een specificatie is een beschrijving van wat een computerprogramma moet doen.
  • input() probeert te begrijpen wat je intypt.
  • raw_input() gaat ervan uit dat je een string typt.
  • Met break kun je uit een lus breken.
  • Als je de opdracht hebt uitgevoerd heb je vast nog veel meer geleerd. Kun je er een lijstje van maken?

In de volgende les gaan we zelf raden!

Dion

5 Reacties aan “Les 9”

  1. milan schreef:

    ik heb:

    print(“neem een getal in je hooft onder de tien”)
    j = 1
    n = 0
    for i in range(0, 11):
    print “is het {} ???”.format(i)
    waar = input(“is het waar type j, anders type n “)
    if waar == 1:
    print(“oke”)
    break

  2. Ben schreef:

    Ik kom er niet uit! Wil je alstjeblieft de oplossing vertellen. Ik wil graag leren hoe dit moet.

  3. mmdw1976 schreef:

    def main():
    run=1
    print (‘neem een getal onder de 10 in gedachten’)
    getal =int(input(‘een getal onder de: ‘))
    while run == 1:
    import random
    print (random.randint(1, getal))
    a = input(“type ‘j’ als het waar is, en ‘n’ als het niet waar is”)
    if(a == “j”):
    run=0

    main()

Geef een reactie

Deze site gebruikt Akismet om spam te verminderen. Bekijk hoe je reactie-gegevens worden verwerkt.