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.
ord()
Een toets is een getal. ord('w') geeft het ASCII-getal van 'w'. Dat getal gebruik je direct als dictionary-sleutel.
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() 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)
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
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}")
Klik een toets. Zie welk getal ord() geeft, en welke actie de dictionary koppelt.
ord('x') als sleutel in je dispatch-dict โ geen if/elif nodig.
Experimenteer: ord(), chr(), en dispatch-dicts.
De drone wordt bestuurd met toetsen. Vervang de if/elif-keten door een dispatch-dict met ord(). Bestand: drone_keymap.py
keymap dictionary met ord('x') als sleutels en strings als waarden (bijv. "opstijgen", "landen").ord()-waarden..get().Acceptatiecriteria
ord('x') als sleutels, niet strings.