Sprint 4 ยท Datastructuren & foutafhandeling  ยท  US3: Dispatch-dict

Als developer, wil ik een lange if/elif-keten vervangen door รฉรฉn tabel van keuzes, zodat ik een commando kan toevoegen zonder de rest van mijn code aan te raken.

Taak 3: De dispatcher-loop

Tot nu toe: รฉรฉn toets, รฉรฉn actie. Nu: een reeks toetsen achter elkaar verwerken via een for-loop en dispatch-dict.

De lus: meerdere toetsen verwerken

In T2 leerde je dat .get() รฉรฉn toets vertaalt naar een actie. Maar gebruikers drukken meerdere toetsen achter elkaar. Hoe verwerk je die allemaal?

Het probleem: batch-toetsen

Een gebruiker geeft deze toetsen in: w, w, a, s. Je ontvangt ze als een list. Elk ervan moet je via de dictionary vertalen.

toetsen = [ord('w'), ord('w'), ord('a'), ord('s')]

# Dit is omslachtig:
action1 = keymap.get(toetsen[0], "onbekend")
action2 = keymap.get(toetsen[1], "onbekend")
action3 = keymap.get(toetsen[2], "onbekend")
# ... etc

De oplossing: de dispatcher-loop

Een for-loop loopt de toetsen af. Voor elk ervan roep je .get() aan.

keymap = {
    ord('w'): "omhoog",
    ord('a'): "links",
    ord('s'): "omlaag",
    ord('d'): "rechts",
}

toetsen = [ord('w'), ord('a'), ord('s')]

for toets in toetsen:
    action = keymap.get(toets, "onbekend")
    print(f"Toets {toets}: {action}")

Interactieve demo: voeg toetsen toe

Klik toetsen om ze aan je reeks toe te voegen. Zie hoe de loop ze stap voor stap verwerkt.

Vuistregel: Loop meerdere toetsen af met for toets in toetsen: en lookup elk via keymap.get().
>_ Probeer het voorbeeld

Experimenteer: een dispatcher-loop bouwen die toetsen verwerkt.

Klik op de knop om de uitvoer van het voorbeeld te zien.

Opdracht: drone keyboard controller

Bouw de volledige keyboard controller voor de drone. De gebruiker geeft een reeks toetsen in, je dispatcher-loop voert ze uit. Bestand: drone_controller.py

  1. Definieer een keymap dictionary met minstens 8 toetsen: w/a/s/d voor beweging, space voor opstijgen, ctrl voor landen, q voor noodstop.
  2. Bouw een list met toetsaanslagen van minimaal 10 items (mix van geldige en onbekende toetsen).
  3. Bouw de dispatcher-loop: loop over de toetsen, lookup via .get(), print de actie.
  4. Log aan het einde: hoeveel toetsen verwerkt, hoeveel onbekend.
  5. Test met een reeks die zowel geldige als ongeldige toetsen bevat.

Acceptatiecriteria

  • Keymap heeft ord() als sleutel, strings als waarden.
  • Minstens 8 toetsen gemapped (beweging + specials).
  • Loop verwerkt minstens 10 toetsaanslagen.
  • Onbekende toetsen geven fallback-bericht via .get().
  • Statistiek getoond: totaal verwerkt + aantal onbekend.