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.
Tot nu toe: รฉรฉn toets, รฉรฉn actie. Nu: een reeks toetsen achter elkaar verwerken via een for-loop en dispatch-dict.
In T2 leerde je dat .get() รฉรฉn toets vertaalt naar een actie. Maar gebruikers drukken meerdere toetsen achter elkaar. Hoe verwerk je die allemaal?
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
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}")
Klik toetsen om ze aan je reeks toe te voegen. Zie hoe de loop ze stap voor stap verwerkt.
for toets in toetsen: en lookup elk via keymap.get().
Experimenteer: een dispatcher-loop bouwen die toetsen verwerkt.
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
keymap dictionary met minstens 8 toetsen: w/a/s/d voor beweging, space voor opstijgen, ctrl voor landen, q voor noodstop..get(), print de actie.Acceptatiecriteria
ord() als sleutel, strings als waarden..get().