Kódím.cz
1

Cykly 2

Ukážeme si, že cykly můžeme používat nejen pro sekvence, ale i pro číselné posloupnosti.

Zanořené cykly a range

Uvažujme, že si vytváříme tabulku, která bude sloužit k rezervaci míst v dopravních prostředcích. Na začátku uvažujeme tabulku pro místa v jednom autobusu. Náš autobus má místa od 1 do 40, proto funkci range() zadáme hodnoty 1 a 41 (podobně jako slice je druhé číslo vynechané).

places = {}
for i in range(1, 41):
    # Vložíme prázdnou hodnotu - na začátku je místo volné
    places[i] = None
# Rezervace místa 5
places[5] = "Jirka Pešík"
# Rezervace místa 6
places[6] = "Jakub Červinka"
print(places)

Nyní uvažujme místa v jednom vlaku. Vlak má několik vozů a v každém voze jsou sedačky. Uvažujme třeba místa od 1 do 30 v každém voze a vozy s čísly 1 a 2. Nejprve si výstup vypíšeme na obrazovku.

places = {}
for i in range(1, 3):
    for j in range(1, 31):
        print(f"Vůz {i}, sedadlo {j}")

Nyní vložíme místa do slovníku. Máme několik možností. První z nich je vícerozměrný klíč ve slovníku, další by byl vícerozměrný slovník. Pro vícerozměrný klíč musíme použít n-tici (tuple).

places = {}
for i in range(1, 3):
    for j in range(1, 31):
        places[(i, j)] = None
# Rezervace místa 35 ve voze 1
places[(1, 15)] = "Jirka Pešík"
# Rezervace místa 36 ve voze 1
places[(1, 16)] = "Jakub Červinka"

Třetí rozměr přidáme, pokud uvažujeme několik vlaků. Uvažujme 2 různé vlaky, každý má 2 vozy a každý vůz 30 míst.

places = {}

for i in range(1, 3):
    for j in range(1, 3):
        for k in range(1, 31):
            print(f"Vlak R{i}, vůz {j}, sedadlo {k}")
            places[(i, j, k)] = None
# Rezervace místa 35 ve voze 1 ve vlaku 3
places[(2, 1, 15)] = "Jirka Pešík"
# Rezervace místa 36 ve voze 1 ve vlaku 3
places[(2, 1, 16)] = "Jakub Červinka"
print(places)

Můžeme si zkusit vytvořit i vícerozměrné slovníky. Zde je potřeba v rámci cyklů vytvořit zanořené slovníky, abychom měli kam vkládat hodnoty.

places = {}

for i in range(1, 3):
    # Vytvoření zanořeného slovníku pro vlak
    places[i] = {}
    for j in range(1, 3):
        # Vytvoření zanořeného slovníku pro vůz
        places[i][j] = {}
        for k in range(1, 31):
            print(f"Vlak R{i}, vůz {j}, sedadlo {k}")
            places[i][j][k] = None
# Rezervace místa 35 ve voze 1 ve vlaku 3
places[2][1][15] = "Jirka Pešík"
# Rezervace místa 36 ve voze 1 ve vlaku 3
places[2][1][16] = "Jakub Červinka"
print(places)