Room Exits
Goals
- naučiť sa pracovať so slovníkmi nachádzajúcimi sa vo vnútri iných slovníkov
- naučiť sa pracovať so zoznamami
- naučiť sa pracovať s príkazom
for
na prechádzanie zoznamov
Content
Rozšírte slovník
world
tak, aby jednotlivé miestnosti boli reprezentované samostatným slovníkom.O každej miestnosti uchovávajte zatiaľ informácie
- názov miestnosti - kľúč
name
- opis miestnosti - kľúč
description
Aktualizovaný slovník
world
bude vyzerať nasledovne:world = { "l4": { "name": "l4", "description": "" }, "chodba": { "name": "chodba", "description": "" }, "kuchynka": { "name": "kuchynka", "description": "" } }
Tento zápis je ekvivalentný s týmto:
world = {} world["l4"] = { "name": "l4", "description": "" } world["chodba"] = { "name": "chodba", "description": "" } world["kuchynka"] = { "name": "kuchynka", "description": "" }
- názov miestnosti - kľúč
Aktualizujte kód aj funkciu
show_room()
tak, aby nevypísala celý slovník reprezentujúci miestnosť, ale jej meno a opis osobitne.
def show_room(room):
print(f"Miestnost: {room['name']}")
print(room["description"])
- Rozšírte slovník reprezentujúci miestnosť o kľúč
exits
, ktorý bude definovať možné východy z miestnosti.
world = {
"l4": {
"name": "l4",
"description": "",
"exits": "chodba"
},
"chodba": {
"name": "chodba",
"description": "",
"exits": "l4, kuchynka"
},
"kuchynka": {
"name": "kuchynka",
"description": "",
"exits": "chodba"
}
}
- Aktualizujte funkciu
show_room()
, aby vypísala pre každú miestnosť aj možné východy z miestnosti.
def show_room(room):
print(f"Miestnost: {room['name']}")
print(room["description"])
print(f"Možné východy: {room['exits']}")
- Aktualizujte implementáciu tak, aby sa dalo do zvolenej miestnosti aj dostať/prejsť.
if line in world:
if line in world[location]["exits"]:
location = line
show_room(world[location])
else:
print("Tam sa neda ist")
Tu je však problém, že:
- ak použijeme operátor
==
, porovnáva zhodu dvoch reťazcov (záleží na každom jednom znaku) - ak použijeme operátor
in
, v podstate sa jedná o operáciu hľadania reťazca (alebo podreťazžca) v reťazci, čo môže viesť k rozličným problémovým situáciám
Preto je potrebné možné východy reprezentovať vo forme zoznamov a nie vo forme reťazcov:
world = {
"l4": {
"name": "l4",
"description": "",
"exits": ["chodba"]
},
"chodba": {
"name": "chodba",
"description": "",
"exits": ["l4", "kuchynka"]
},
"kuchynka": {
"name": "kuchynka",
"description": "",
"exits": ["chodba"]
}
}
- Aktualizujte funkciu
show_room()
tak, aby nezobrazoval celý zoznam možných východov z miestnosti ako reťazec, ale každý jeden východ na samostatnom riadku. Pre elegantnejší výstup ešte výsledok odsaďte od okraja štyrmi medzerami.
def show_room(room):
print(f"Miestnost: {room['name']}")
print(room["description"])
print("Možné východy:")
for entry in room['exits']:
print(f" {entry}")
Homework
Ako by sme reprezentovali možné východy z miesnosti pomocou smerov reprezentujúcich svetové strany: sever, juh, východ, západ?