Skip to main content

Code beter begrijpen

Op deze pagina ga je oefenen met het voorspellen wat code doet. Lees elke vraag goed en probeer eerst zelf te bedenken wat er gebeurt voordat je de tip of het antwoord bekijkt!


Opdracht 1: Eenvoudige while loop

Wat gebeurt er wanneer je deze code uitvoert?

from time import sleep

teller = 0

while teller < 3:
print("Hallo!")
teller = teller + 1
sleep(1)

Vraag: Hoe vaak wordt "Hallo!" geprint?

Tip

Kijk goed naar de waarde van teller. Deze begint bij 0 en wordt elke keer met 1 verhoogd. De loop stopt wanneer teller < 3 niet meer waar is.

Antwoord

"Hallo!" wordt 3 keer geprint.

  • 1e keer: teller = 0 (0 < 3 is waar)
  • 2e keer: teller = 1 (1 < 3 is waar)
  • 3e keer: teller = 2 (2 < 3 is waar)
  • Daarna: teller = 3 (3 < 3 is niet waar, dus de loop stopt)

Er zit 1 seconde tussen elke print vanwege sleep(1).


Opdracht 2: Twee while loops onder elkaar

Wat gebeurt er wanneer je deze code uitvoert?

from time import sleep

teller = 0

while teller < 2:
print("Eerste loop!")
teller = teller + 1
sleep(1)

teller = 0

while teller < 3:
print("Tweede loop!")
teller = teller + 1
sleep(1)

print("Klaar!")

Vraag: Wat wordt er geprint en in welke volgorde?

Tip

De tweede while loop begint pas nadat de eerste helemaal klaar is. Let ook op dat teller weer op 0 wordt gezet tussen de twee loops.

Antwoord

De output is:

Eerste loop!
Eerste loop!
Tweede loop!
Tweede loop!
Tweede loop!
Klaar!

Uitleg:

  1. De eerste while loop draait 2 keer (teller gaat van 0 naar 1)
  2. Dan wordt teller weer op 0 gezet
  3. De tweede while loop draait 3 keer (teller gaat van 0 naar 1 naar 2)
  4. Dan wordt "Klaar!" geprint

Belangrijk: De tweede loop wacht tot de eerste helemaal klaar is. Ze draaien niet tegelijkertijd!


Opdracht 3: While loop met IR-sensor

Wat gebeurt er wanneer je deze code uitvoert?

from leaphymicropython.sensors.linesensor import AnalogIR
from time import sleep

sensor = AnalogIR("A0", 2500)

while True:
kleur = sensor.black_or_white()
print(kleur)
sleep(0.5)

Vraag: Wanneer stopt deze code met printen?

Tip

Let op de conditie van de while loop. Wat betekent while True:?

Antwoord

Deze code stopt nooit met printen (tenzij je het programma handmatig stopt).

while True: betekent dat de loop oneindig doorgaat. Elke halve seconde (vanwege sleep(0.5)) wordt de kleur van de sensor geprint. Dit blijft doorgaan tot je het programma stopt met de stop-knop.


Opdracht 4: While loop met voorwaarde

Wat gebeurt er wanneer je deze code uitvoert?

from leaphymicropython.sensors.linesensor import AnalogIR
from time import sleep

sensor = AnalogIR("A0", 2500)

while sensor.black_or_white() == "white":
print("Ik zie wit!")
sleep(0.1)

print("Ik zie zwart!")

Vraag: Wanneer wordt "Ik zie zwart!" geprint?

Tip

De loop blijft doorgaan zolang de sensor "white" ziet. Wat gebeurt er als de sensor "black" ziet?

Antwoord

"Ik zie zwart!" wordt geprint zodra de sensor zwart ziet.

Zolang de sensor wit ziet, blijft de loop doorgaan en wordt "Ik zie wit!" elke 0.1 seconde geprint. Zodra de sensor zwart detecteert, stopt de while loop en wordt "Ik zie zwart!" één keer geprint.


Opdracht 5: Teller met sensor

Wat gebeurt er wanneer je deze code uitvoert?

from leaphymicropython.sensors.linesensor import AnalogIR
from time import sleep

sensor = AnalogIR("A0", 2500)
zwarte_lijnen = 0

while zwarte_lijnen < 5:
if sensor.black_or_white() == "black":
zwarte_lijnen = zwarte_lijnen + 1
print("Lijn gevonden! Totaal:", zwarte_lijnen)
sleep(0.1)

print("Klaar! 5 lijnen gevonden!")

Vraag: Wat moet je doen om dit programma te laten stoppen?

Tip

De variabele zwarte_lijnen houdt bij hoeveel zwarte lijnen er zijn gevonden. Wanneer wordt deze verhoogd?

Antwoord

Je moet de sensor 5 keer over een zwarte lijn bewegen.

Elke keer dat de sensor zwart detecteert, wordt zwarte_lijnen met 1 verhoogd. De loop stopt pas wanneer zwarte_lijnen gelijk is aan 5. Dan wordt "Klaar! 5 lijnen gevonden!" geprint.

Let op: Als je de sensor te lang op één zwarte lijn houdt, kan deze meerdere keren geteld worden omdat de loop elke 0.1 seconde checkt!


Opdracht 6: Sleep tijd vergelijken

Je hebt twee code voorbeelden:

Code A:

from leaphymicropython.sensors.linesensor import AnalogIR

sensor = AnalogIR("A0", 2500)

while True:
kleur = sensor.black_or_white()
print(kleur)

Code B:

from leaphymicropython.sensors.linesensor import AnalogIR
from time import sleep

sensor = AnalogIR("A0", 2500)

while True:
kleur = sensor.black_or_white()
print(kleur)
sleep(1)

Vraag: Wat is het verschil tussen deze twee codes?

Tip

Let op de aanwezigheid (of afwezigheid) van sleep(). Wat doet deze functie?

Antwoord

Code A print de kleur heel snel achter elkaar zonder pauze. Dit kan duizenden keren per seconde zijn, waardoor je scherm vol stroomt met tekst.

Code B print de kleur elke seconde omdat er sleep(1) staat. Dit geeft een rustige output die makkelijk te lezen is.

Conclusie: Gebruik altijd een kleine sleep() in je while loop om te voorkomen dat je programma te snel gaat en onleesbaar wordt!


Opdracht 7: Twee sensoren combineren

Wat gebeurt er wanneer je deze code uitvoert?

from leaphymicropython.sensors.linesensor import AnalogIR
from time import sleep

sensor_links = AnalogIR("A0", 2500)
sensor_rechts = AnalogIR("A1", 2500)

while True:
links = sensor_links.black_or_white()
rechts = sensor_rechts.black_or_white()

if links == "black" and rechts == "black":
print("Beide sensoren zien zwart!")
break

sleep(0.1)

print("Programma gestopt!")

Vraag: Wanneer stopt dit programma?

Tip

Let op het woord and in de if-statement en het woord break. Wat doen deze?

Antwoord

Het programma stopt wanneer beide sensoren tegelijk zwart zien.

  • and betekent dat beide voorwaarden waar moeten zijn
  • break stopt de while loop onmiddellijk
  • Zolang minimaal één sensor wit ziet, blijft de loop doorgaan
  • Zodra beide sensoren zwart zien, wordt "Beide sensoren zien zwart!" geprint en stopt de loop
  • Daarna wordt "Programma gestopt!" geprint

Dit kan bijvoorbeeld gebruikt worden om te detecteren wanneer een robot een kruising bereikt!


Opdracht 8: Uitdaging!

Wat gebeurt er wanneer je deze code uitvoert?

from leaphymicropython.sensors.linesensor import AnalogIR
from time import sleep

sensor = AnalogIR("A0", 2500)
vorige_kleur = "white"

while True:
huidige_kleur = sensor.black_or_white()

if huidige_kleur != vorige_kleur:
print("Verandering!", vorige_kleur, "->", huidige_kleur)
vorige_kleur = huidige_kleur

sleep(0.1)

Vraag: Wanneer wordt er iets geprint?

Tip

De code vergelijkt huidige_kleur met vorige_kleur. Wat betekent !=?

Antwoord

Er wordt alleen iets geprint wanneer de kleur verandert.

  • != betekent "niet gelijk aan"
  • vorige_kleur onthoudt wat de sensor de vorige keer zag
  • Als de kleur hetzelfde blijft, gebeurt er niets
  • Als de kleur verandert (van wit naar zwart, of van zwart naar wit), wordt de verandering geprint en wordt vorige_kleur bijgewerkt

Voorbeeld output:

Verandering! white -> black
Verandering! black -> white
Verandering! white -> black

Dit is handig om te detecteren wanneer een robot een lijn kruist, zonder duizenden keren "black" te printen!


Goed gedaan!

Je hebt nu geoefend met:

  • While loops met tellers
  • Oneindige loops met while True:
  • While loops met voorwaarden
  • Het gebruik van sleep() om de snelheid te controleren
  • IR-sensoren uitlezen in een loop
  • Meerdere sensoren combineren
  • Veranderingen detecteren

Deze concepten zijn de basis voor het programmeren van een lijnvolgende robot!