Programmeren voor Kinderen

Leren programmeren op de basisschool

Les 10

Heb je de opgave uit de vorige les gemaakt? Is het helemaal gelukt? Dit had ik.

grootste = 10
print 'Neem een getal onder de', grootste, 'in gedachten.'
for getal in range(1, grootste + 1):
    print 'Is het', getal, '?'
    antwoord = raw_input('(Type j als het waar is, en n als het niet waar is.) ')
    if antwoord == 'j':
        print 'Geraden!'
        break

Jouw programma ziet er vast anders uit. Zal ik uitleggen hoe dat van mij werkt?

In de eerste regel schrijf ik grootste = 10. Vervolgens gebruik ik grootste op twee plaatsen: in de vraag in de eerste regel, en in de lus die het getal probeert te raden. Op die manier kan ik grootste makkelijk veranderen; als ik er bijvoorbeeld 500 van maak duurt het spelletje wat langer. Volgens mij wordt het wel heel saai als je dan 499 in gedachten hebt genomen.

In de lus print ik de vraag, en leg uit hoe je antwoord kan geven. Dat is precies volgens de specificatie. Hoe raw_input() werkt heb ik in de vorige les al uitgelegd.

Als je j typt print het programma ‘Geraden!’, en breek ik uit de lus. En dan zijn we klaar.

Als je iets anders zegt dan j staat er niks meer. Wat gebeurt er dan? Dan gaat de computer door met de lus, en stelt hij dus de volgende vraag. Tenzij hij al klaar is met de lus: als hij heeft gevraagd of het 10 is en je zegt weer n, dan geeft de computer het op. De lus is afgelopen en daarna staat niks meer: het programma is klaar.

Overigens hoef je niet per se n te zeggen. Als je alleen maar Enter doet, of je zegt hallootjes!, of ja, dan denkt de computer ook dat je ‘nee’ bedoelt. Dat is een beetje raar, maar dat houdt het lekker simpel.

Het spelletje omgedraaid

Dit is best wel een saai spelletje. Misschien is het leuker als de computer een getal in gedachten neemt, en dat jij het moet raden.

Maar dan moet de computer wel een getal verzinnen! Tot nog toe heeft de computer nog niks zelf verzonnen. Hij doet alleen maar wat wij hem vertellen dat hij moet doen. We kunnen vast wel een programma schrijven dat het volgende doet:

Ik heb een getal onder de 10 in gedachten. Je mag 10 keer raden.
Raad het maar. 5
Mis!
Raad het maar. 8
Mis!
Raad het maar. 3
Geraden!

Maar dat programma moet natuurlijk niet zo beginnen:

getal = 3

Dan is het maar één keer leuk. Voor een ander, dan; voor jou als programmeur is het zelfs de eerste keer niet leuk. Eigenlijk zou je programma zo moeten beginnen:

getal = verzin_zelf_iets_onder_de(10)

En dan kan je het spelletje echt spelen met de computer!

Weet je wat? Die functie bestaat ook nog. Hij heet randint(). Maar we moeten hem even gaan lenen bij de bibliotheek.

Bibliotheken

Tot nog toe hebben we nog maar een paar functies gebruikt: input() en raw_input(), en range(). Voor ons is een functie een taak die de computer moet doen. Dat weet je nog wel, uit les 6. Voor de computer is een functie een soort programmaatje dat hij moet uitvoeren, een programma-in-een-programma zeg maar.

Net als boeken kun je functies bewaren in een bibliotheek. Om de functies uit de bibliotheek te kunnen gebruiken, moet de computer wel eerst uitvinden welke functies er in de bibliotheek zitten. Dit doet hij door de bibliotheek te importeren.

Maak maar eens een programma met de naam bedenken.py. (Start cmd en type notepad bedenken.py). Type nu de volgende regels:

import random
getal = random.randint(0, 9)
print getal

Start het maar eens (python bedenken.py.) Wat staat er? Een getal tussen de 0 en de 9. Start hem nog eens? en nog eens? Is het steeds een ander getal?

import random betekent eigenlijk: computer, loop eens de bibliotheek binnen die random heet en kijk welke boeken (functies) er allemaal inzitten.

random.randint(1, 10) betekent: voer de functie randint() uit die in de bibliotheek random zit.

‘Random’ is Engels voor ‘willekeurig’, en een integer is een geheel getal (zoals 1, 2, 3 of 2309438923, maar niet 0.789).

Dus randint(1, 10) is een functie die je een willekeurig geheel getal tussen de 1 en de 10 geeft. Inderdaad, het is iedere keer anders!

Kun je het zelf?

Kun jij het omgedraaide spelletje maken? Type maar gewoon verder in bedenken.py, dan maken we daar een echt programma van.

Lees de specificatie nog maar eens die hierboven staat. De computer vraagt eerst:

Ik heb een getal onder de 10 in gedachten. Je mag 10 keer raden.

Dan bedenkt de computer zelf een getal. Daarna begin je een lus die 10 keer aan je vraagt om het te raden:

Raad het maar. 5

Als je het fout hebt zegt hij:

Mis!

en gaat hij door met de lus. Heb je het goed, dan zegt hij:

Geraden!

en breekt uit de lus.

Tips:

  • In het begin kun je print getal nog even in je programma laten staan. Dan kun je makkelijk testen of het werkt, want je weet al wat de computer heeft bedacht!
  • Als je het programma aan je vader of moeder of broertje of buurman laat zien haal je die regel met print natuurlijk weg.
  • Denk je eraan om een variabele te gebruiken, zodat je ook kan spelen met een getal onder de 100?
  • Kun je het ook zo maken dat hij zegt of het getal groter of kleiner is dan wat jij zei? dus bijvoorbeeld:
    Raad het maar. 5
    Mis!
    Het is groter!
    

Succes!

Wat heb je geleerd?

  • Computers kunnen ook iets zelf bedenken: een willekeurig getal bijvoorbeeld.
  • Gehele getallen het integers in het Engels.
  • Random betekent willekeurig.
  • Functies kunnen worden bewaard in een bibliotheek.
  • Om een bibliotheek te kunnen gebruiken moet je hem eerst importeren.
  • Om een functie uit een bibliotheek te gebruiken moet je de naam van de bibliotheek ervoor zetten, met een puntje (.).

Tot de volgende keer!

Dion

25 Reacties aan “Les 10”

  1. Niels schreef:

    Dit is echt een goede uitleg!
    Ik hoop dat er snel een nieuwe komt!

  2. trisna schreef:

    Hey
    les 10 lukt mij niet, als de computer de vragen stelt met dat spelletje (is het 1 , is het 2 )dan gaat hij steeds beginnen bij nul en vraagt hij de getallen niet willekeurig. kunt u mij misschien helpen waar ik de volgende tekst moet neer zetten bij de notepad ( import random, random.randint )?
    alvast dank
    gr van trisna
    ps : leuke website, het leert me de basis van programmeren, maar het is alleen met getallen?

    • Dion Nicolaas schreef:

      Hoe ziet jouw programma er nu uit?

      • trisna schreef:

        hey Dion

        grootste = 10
        print 'neem een getal onder de', grootste, 'in gedachte'
        import random
        getal = random.randint(0, grootste)
        print 'is het', getal, '?'
            antwoord = raw_input('( type j als het waar is, en typ n als het niet waar is ): ') 
            if antwoord == 'j' : 
               print 'geraden!'
               break
        
        • Dion Nicolaas schreef:

          Hoi Trisna,

          Vergeet die random.randint nog maar even; schrijf eerst eens een programmaatje dat 3 in gedachten neemt en jou laat raden.
          Daarna kun je de computer zelf wat laten verzinnen.

          Dit is tot nu toe de laatste les; misschien kun je zelf een nieuwe opgave bedenken?

          Succes,
          Dion

  3. milan schreef:

    hoi dion kan jij de fout vinden in dit script

    grootste = 10
    print ‘neem een getal onder de’, grootste, ‘in gedachte’
    import random
    getal = random.randint(0, grootste)
    print ‘is het’, getal, ‘?’
    antwoord = raw_input(‘( type j als het waar is, en typ n als het niet waar is ): ‘)
    if antwoord == ‘j’ :
    print ‘geraden!’
    break

    want steeds als ik het uitvoer krijg ik unexpected incident en ik weet niet wat ik er aan moet doen. om precies te zijn krijg ik deze melding:

    file “c:\users\verti\bedenken.py”, line 6
    antwoord = raw_input (‘( type j als het waar is en typ n als het niet waar is ): ‘)
    indentationError: unexpected indent

    en zo’n pijltje van daar zit de fout tussen ): hier ‘) in het script

    • Dion Nicolaas schreef:

      Waarschijnlijk heb je een regels laten inspringen die niet moet inspringen. Ik kan helaas de opmaak niet precies zien in je berichtje.
      Na een if : of while : moet je inspringen, maar anders niet.

      Helpt dat?
      Dion

  4. les 11! waneer komt ie

  5. simchavos schreef:

    Komt er een les 11? En wat kan je hierna doen?

  6. milan schreef:

    bij mij doet de ‘break’ het niet

  7. Xander schreef:

    Hoi Dion,
    Als ik het spelletje maak met dit script:

    print ‘Ik heb een getal onder de 10 in gedachten, je mag 10 keer raden.’
    import random
    getal = random.randint(1, 9)
    print getal
    for getal in range(1,11):
    probeer = raw_input(‘Raad het maar. ‘)
    if getal == probeer:
    print ‘Geraden!’
    break
    else:
    print ‘Mis!’

    Zegt het spel steeds ‘mis!’, ook al type ik het juiste getal. Kan je mij helpen?
    Alvast bedankt, Xander.

  8. Hugo List schreef:

    wat moet ik doen als ik dit krijg IndentationError: expected an intended block?

  9. Jelle schreef:

    Ik heb deze aan mijn ouders gevraagd, en die vullen dan als antwoord: Getal in, en dan hebben ze het meteen goed. Hoe kan ik een variabele ‘beschermen’ zodat hij niet als input gezien wordt

    • Dion Nicolaas schreef:

      Wat een slimme ouders heb jij!
      Misschien moet je de variable niet getal noemen, maar jvjhvhlashhflhuehlseriungvanluilr94805. Dat zal ze leren!
      Er is ook wel een oplossing voor die lijkt op wat jij zegt.
      Kijk eerst eens even bij het einde van les 9: Daar staat het verschil uitgelegd tussen input() en raw_input(). raw_input() probeert niet te bedenken wat het is wat je intypt, maar gaat er gewoon van uit dat het een string is.
      Nu hebben we een nieuw probleem: het getal wat je moet raden is een getal, maar het getal wat je ouders hebben ingevoerd is een string. En als je een string en en getal met elkaar vergelijkt zijn ze niet hetzelfde: ‘3’ is iets anders dan 3! Gelukkig kun je in Python een string ombouwen naar een getal, met de functie int().
      Dus int(geraden) is 3 als je bijvoorbeeld dit had:
      geraden = raw_input("Raad het maar. ")

      Kun je het programma nu zelf afmaken?
      Succes, Dion

  10. Maurits schreef:

    Hey Dion,er is een foutje in mijn script, kan jij die ontdekken?
    print ‘Ik heb een getal onder de 10 in gedachten, jij mag dat in 10 pogingen raden.’
    import random
    getal = random.randint(0, 10)
    print getal
    for i in range (1, 11):
    antwoord = raw_input(‘ (‘dit is poging’, i, raad maar) : ‘)
    if antwoord == getal:
    print ‘geraden’
    brake
    else:
    print ‘mis’
    Ik hoop snel wat van je te horen,
    Maurits

    • Dion Nicolaas schreef:

      Beste Maurits,

      De regel met antwoord = raw_input is niet helemaal goed, de computer raakt in de war van al die ‘-tekens. Probeer eerst maar eens iets makkelijks te printen.
      Verder heb je ‘break’ verkeerd geschreven. Wat gaf Python voor foutmeldingen? Hielpen die nog een beetje? In ieder geval zou je moeten kunnen zien op welke regel het misging, dat maakt het altijd makkelijker om de fout te vinden.

      Succes,
      Dion

  11. stan schreef:

    komt er nog een nieuwe les?

  12. Effie schreef:

    beste dion,
    ik vind je lessen echt geweldig, super handig, duidelijk en goed uitgelegd, maar nu weet ik niet hoe je een zelf geprogrammeerd spel online kunt zetten. is dat eigenlijk wel mogelijk? want dat wil ik bereiken met het programmeren.

    alvast bedankt!!!

    mvg,
    Effie

  13. b schreef:

    Zou je de oplossing willen geven 🙂

  14. mi schreef:

    Zou je de oplossing willen geven?

  15. pollwebblog schreef:

    het lukt me echt niet! kan je aub eens in een berichtje antwoorden wat jij hebt?

  16. Christophe schreef:

    Hey Dion,

    Wat een leuke cursus! Als 20-jarige ben ik mijn eerste stappen aan het zetten in het programmeren. Dit is een goed begin geweest van wat ik verder nog zou willen leren in dit vakgebied. Op termijn zou ik graag mijn eigen app ontwikkelen. Ik weet dat dat nog veraf is, maar dat is de doelstelling. Momenteel vroeg ik mij af of jij toevallig een andere website kent waarop ik verder kan oefenen in het programmeren? Opdrachten krijgen vind ik het meest motiverende. Gewoon de theorie vind ik minder leuk.

    Alvast bedankt voor je antwoord.

    Groet,

    Christophe

    • Christophe schreef:

      Hi Dion,

      Ook nog een vraagje over de laatste opdracht.
      Dit is mijn script:

      grootste=10
      import random
      getal=random.randint(0, grootste)
      print getal
      print ‘Ik heb een getal onder de’, grootste, ‘in gedachten. Je mag tien keer raden.’
      for getal in range(1,grootste+1):
      antwoord=raw_input(‘raad het maar ‘)
      if antwoord==getal:
      print ‘Geraden!’
      break
      else:
      print ‘Mis!’

      Het werkt echter niet. Ik vermoed dat er in lijn 6 of 7 ergens een fout zit. Ik vind het maar niet. Wie weet kan jij mij verder helpen?

      Bedankt!

      Christophe

  17. Finn schreef:

    Beste Nicolaas, volgens mij is Python een beetje veranderd. Wij hebben nu 3.6 gebruikt en print moet vergezeld worden met ()-jes
    Voor de rest vind ik het een suerleuke cursus!

  18. Yuri schreef:

    Leuke site. Heb alle lessen gevolgd en het is allemaal gelukt, ondanks het gebruik van python 3. Moest hier en daar googlen om wat dingen werkend te krijgen, maar er zit niet heel veel verschil tussen 2 en 3.

    Gaan er meer lessen komen?

Geef een reactie

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