Programmeren voor Kinderen

Leren programmeren op de basisschool

Les 8

Start cmd maar weer eens op, en type python. We gaan de computer weer eens aan het rekenen zetten.

Even of oneven?

We beginnen met een makkelijke som. Type dit maar eens:

print 10/2

Wat daar uit komt weet je vast wel. Maar probeer ook eens deze som:

print 11/2

Wat zou daar uitkomen?

Ja logisch, ook 5. Maar dan blijft er wel een rest over, rest 1, toch?

Laten we eens een programmaatje maken dat bekijkt of een getal even of oneven is. Dus we beginnen zo:

getal = input('Type eens een getal: ')

En wat we dan willen is dat het programma bijvoorbeeld dit zegt:

521 is oneven.

of

527654324562 is even.

Hoe gaan we erachter komen of een getal even is of oneven? Ik ga je een paar hints geven. Kijken of jij de oplossing kan bedenken.

  • Een even getal is deelbaar door twee.

Da’s simpel. We moeten iets met delen gaan doen, nietwaar? Zoiets als:

uitkomst = getal / 2
  • Deelbaar door twee betekent: de rest is 0.

11 gedeeld door twee is 5, rest 1. Elf is dus niet deelbaar door twee, maar tien wel. 10 / 2 heeft rest 0. Maar hoe komen we nu achter die rest?

  • De rest is wat er overblijft als je alle groepjes van twee van het getal hebt afgehaald.

Als je tien door twee deelt, verdeel je eigenlijk tien knikkers over twee potjes. Je stopt om de beurt een knikker in ieder potje: dus haal je er eigenlijk twee af, en nog eens, en nog eens, en nog eens, net zolang tot je nul overhebt. (En dan kijk je hoeveel er in ieder potje zit.) Als je elf door twee deelt doe je hetzelfde, maar hou je 1 knikker over.

  • Als je de uitkomst weer met twee vermenigvuldigd, krijg je het getal terug.

Als je 5 keer twee doet krijg je 10.

  • Behalve de rest.

Niet elf.

Zie je de oplossing van deze puzzel?

Algorithmes

Om een computerprogramma te maken moet je heel vaak een puzzel oplossen. Daarom is programmeren ook zo leuk. De puzzel in dit geval is: hoe komen we erachter of de rest 0 is als we delen door twee. De oplossing is een soort truc, een methode om daarachter te komen.

Methodes of manieren om iets te doen worden door programmeurs algorithmes genoemd. Ik had je toch verteld dat programmeurs van moeilijke woorden houden? Een algorithme verzinnen is eigenlijk wat je doet voor je een computerprogramma schrijft. Daarna hoef je het algorithme alleen nog maar in je programmeertaal te vertalen.

Het algorithme om te bepalen of een getal door twee kan worden gedeeld zonder rest is dit:

Deel het getal door twee.
Vermenigvuldig de uitkomst weer met twee.
Als je dan het oorspronkelijke getal weer terug hebt, was de rest 0. Dan is het getal dus even.
Anders was de rest niet 0. Dan is het getal dus oneven.

Zie je dat dit bijna leest als een programma? Maar dan in het Nederlands.

Om het programma te schrijven moet je alleen nog even weten dat ‘Als’ geschreven wordt als if in Python, en ‘Anders’ is else. Probeer het maar eens op te schrijven.
Type quit() achter de >>>
Type notepad deelbaar.py
Maak maar eens een programmaatje. Ik geef zo de oplossing.

if en else

Klaar? Gelukt? Je kreeg vast allemaal vervelende SyntaxErrors. Dat komt omdat ik je niet precies verteld heb hoe if werkt.

Ik zal je helpen.

  • Na if komt een soort vraag, of iets waar is of niet. Dat wordt een conditie genoemd.
  • Om te kijken of een variabele dezelfde waarde heeft als een andere variable, gebruik je ==, bijvoorbeeld: getal == andergetal of getal == uitkomst * 2.
  • Na de conditie komt een dubbele punt: :. Net als na de range() in de for-lus.
  • Wat er moet gebeuren als de conditie waar is moet vier spaties naar binnen worden geschreven, ook net als bij de for-lus.
  • else is dan weer niet naar binnen, want dat is juist als het niet waar is.
  • Na else komt ook een dubbele punt.
  • Wat er ‘anders’ moet gebeuren staat ook weer vier spaties naar binnen.

Kun je het nu goedkrijgen?

De oplossing, en nog een opdracht

Dit is wat ik heb gemaakt:

getal = input('Geef een getal: ')
uitkomst = getal / 2
if uitkomst * 2 == getal:
    print getal, 'is even.'
else:
    print getal, 'is oneven.'

Had jij ook zoiets? Heb je je programma ook uitgevoerd?

Kun jij je programma zo aanpassen dat het kijkt of een getal deelbaar is door drie, in plaats van even of oneven? Dus dat het zo werkt:

Geef een getal: 7
7 is niet deelbaar door 3

en

Geef een getal: 37035
37035 is deelbaar door 3

Kun je het zelfs zo maken dat het vraagt waardoor het getal deelbaar moet zijn, dus zo:

Geef een getal: 670592745
Waardoor moet het deelbaar zijn? 12345
670592745 is deelbaar door 12345

Probeer het maar!

Nog een oplossing

Ik ga je nog een ding verklappen. In Python is er een manier om uit te vinden wat de rest is van een deling. Type maar eens python en probeer de volgende sommen:

print 10 % 2
print 10 % 3
print 12345 % 37

% wordt modulo genoemd. Modulo betekent ‘de rest die je krijgt als je deze getallen deelt’. Dat heb je vast niet geleerd op school. Dat is weer echt iets voor programmeurs. Maar het is wel handig. Want nu kan je je programma dus ook zo opschrijven:

getal = input('Geef een getal: ')
if getal % 2 == 0:
    print getal, 'is even.'
else:
    print getal, 'is oneven.'

Dat scheelt weer een regel. En we hebben de 2 maar op een plek opgeschreven, in plaats van op twee plekken. Dat is dus een beetje meer A.L.L.E.S., en nog korter ook.

Kun jij je programma aanpassen zodat het het modulo-teken gebruikt?

Wat hebben we geleerd?

Ik dacht dat dit een hele korte les ging worden, maar hij was best wel lang. Maar we hebben ook een heleboel geleerd:

  • Een algorithme is een oplossing voor een puzzel.
  • Een algorithme is een programma, maar dan in het Nederlands.
  • Om iets alleen maar soms te doen gebruik je if.
  • En anders gebruik je else.
  • We hebben een algorithme bedacht om te kijken of de rest van een deling 0 is.
  • Maar dat kan je ook met % doen.
  • % is niet ‘procent’ maar ‘modulo’.

Tot de volgende keer.

Dion

4 Reacties aan “Les 8”

  1. Ben schreef:

    Dion, zou je a.u.b. de oplossing voor de opdracht met
    “kun je het zelfs zo maken dat het vraagt waardoor het getal deelbaar moet zijn, dus zo:

    Geef een getal: 670592745
    Waardoor moet het deelbaar zijn? 12345
    670592745 is deelbaar door 12345
    Probeer het maar!

    Ik kom er echt niet uit, maar zou het graag willen leren

  2. Robert Blaak schreef:

    spoiler alert:
    getal1 = input(‘voer een getal in ‘)
    getal2 = input(‘waardoor moet het deelbaar zijn? ‘)

    uitkomst = getal1 / getal2
    if uitkomst *getal2 == getal1:
    print getal1, ‘,dit getal is te delen door’, getal2
    else:
    print getal1, ‘,dit getal is niet te delen door’, getal2

  3. Wim schreef:

    Dag Dion, deze is prima gelukt, maar de derde van les 7 kult me niet, omdat in niet precies weet wat te doen.
    wim

  4. datboi schreef:

    ik krijg gewoon 5.5 bij print 11/2

Geef een reactie

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