Room Exits

Goals

  1. naučiť sa pracovať so slovníkmi nachádzajúcimi sa vo vnútri iných slovníkov
  2. naučiť sa pracovať so zoznamami
  3. naučiť sa pracovať s príkazom for na prechádzanie zoznamov

Content

  1. 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": ""
    }
    
  2. 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"])
  1. 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"
    }
}
  1. 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']}")
  1. 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"]
    }
}
  1. 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?

results matching ""

    No results matching ""