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:
- De eerste while loop draait 2 keer (teller gaat van 0 naar 1)
- Dan wordt
tellerweer op 0 gezet - De tweede while loop draait 3 keer (teller gaat van 0 naar 1 naar 2)
- 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.
andbetekent dat beide voorwaarden waar moeten zijnbreakstopt 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_kleuronthoudt 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_kleurbijgewerkt
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!