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 2: Dispatch-dict met ord()

Een toets is een getal. ord('w') geeft het ASCII-getal van 'w'. Dat getal gebruik je direct als dictionary-sleutel.

ord(): van karakter naar getal

In T1 leerde je dat een dictionary een lange if/elif-keten vervangt. Nu een stap verder: wat als je invoer gรฉรฉn string is, maar een toetscode โ€” een getal?

ord() omzetten

ord() geeft het ASCII-getal van een karakter. Dat getal kan je direct als dictionary-sleutel gebruiken.

ord('a')   # โ†’ 97
ord('w')   # โ†’ 119
ord('1')   # โ†’ 49
chr(97)    # โ†’ 'a'  (omgekeerd)

Het probleem: toetscode if/elif

key = get_keypress()       # geeft bijv. 119
if key == ord('w'):
    print("omhoog scrollen")
elif key == ord('s'):
    print("omlaag scrollen")
elif key == ord('a'):
    print("links")
# ... 8 meer elif's

De oplossing: ord() als sleutel

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

action = keymap.get(key, "onbekende toets")
print(f"Actie: {action}")

Interactieve demo: druk een toets

Klik een toets. Zie welk getal ord() geeft, en welke actie de dictionary koppelt.

q
w
e
r
a
s
d
f
Vuistregel: Toetsaanslagen zijn integers. Gebruik ord('x') als sleutel in je dispatch-dict โ€” geen if/elif nodig.
>_ Probeer het voorbeeld

Experimenteer: ord(), chr(), en dispatch-dicts.

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

Opdracht: drone besturing met keymap

De drone wordt bestuurd met toetsen. Vervang de if/elif-keten door een dispatch-dict met ord(). Bestand: drone_keymap.py

  1. Bouw een keymap dictionary met ord('x') als sleutels en strings als waarden (bijv. "opstijgen", "landen").
  2. Zorg voor minstens 6 toetsen: omhoog, omlaag, links, rechts, opstijgen, landen.
  3. Simuleer 5 toetsaanslagen via een list met ord()-waarden.
  4. Loop over de list en zoek de bijbehorende actie op met .get().
  5. Geef een duidelijk bericht als een toets onbekend is.

Acceptatiecriteria

  • Dictionary gebruikt ord('x') als sleutels, niet strings.
  • Minstens 6 toetsen gemapped.
  • Waarden in de dictionary zijn strings, geen functie-aanroepen.
  • Onbekende toetsen geven een duidelijk bericht.
  • Alle 5 test-toetsaanslagen geven correct resultaat.