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, ina = 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
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
Wat wordt
waar
in regel 6? En waar vergelijk je hem mee in regel 7?Ik kom er niet uit! Wil je alstjeblieft de oplossing vertellen. Ik wil graag leren hoe dit moet.
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()
print(‘neem een getal in gedachten’)
had het moeten zijn 😀