Známe základní struktury:
Stejně jako False se vyhodnotí: [] 0 "" None
Stejně jako True se vyhodnotí: libovolný neprázdný seznam, nenulové číslo, neprázdný řetězec, libovolný objekt atd.
Slovník je jako seznam, ALE: Jeho prvky nejsou indexovány pořadím v seznamu, nýbrž svým klíčem.
a={"cat":"kočka", "dog":"pes", "badger":"jezevec"} a["cat"] # indexování klíčem "cat" a["hedgehog"] # CHYBA -- neexistující klíč a["hedgehog"]="ježek" # přidání nové dvojice klíč:hodnota a["hedgehog"] # klíč už existuje del(a["hedgehog"]) # vymazání dané hodnoty a["hedgehog"] # klíč byl smazán a.get("dog", "neznámé zvíře") # bezpečné indexování se zadáním výchozí hodnoty a.get("wolpertinger", "neznámé zvíře") a.items() # výčet dvojic (tuplů) ve formě (klíč, hodnota) len(a) # počet dvojic a.keys() # výčet klíčů a.values() # výčet hodnot
Pozn.: a.items(), a.keys(), a.values() nenavrací seznam, ale iterátor. (Šetří se tím paměť, pokud původně slovník obsahuje třeba milión položek.)
list(a.items()) # teď získáme skutečný seznam, pokud potřebujeme
Úkol: Máte dán řetězec: "Vilém z Rožmberka (německy Wilhelm von Rosenberg; 10. března 1535 zámek Schützendorf v Horních Rakousích – 31. srpna 1592 Praha) byl významný český politik a představitel českých stavů ze šlechtického rodu Rožmberků. V nábožensky citlivém českém předbělohorském prostředí patřil k předním vůdcům umírněných katolíků. O významu tohoto muže nejen v rámci českého království, ale i v širším středoevropském prostoru, svědčí kandidatura na polský trůn, která mu byla nabídnuta polskými stavy v roce 1573, a nejvyšší říšské vyznamenání Řád zlatého rouna, které získal v roce 1585 jako jediný Rožmberk a čtvrtý nositel řádu z českého království (po Jindřichovi IV. z Plavna, Vratislavovi z Pernštejna a Jáchymovi z Hradce)." S pomocí cyklu for, jednoho slovníku a jeho funkce get() napište program, který spočítá, kolikrát se v textu vyskytují která písmena.
Doplněno: Na konci stránky je úkol vzorově vyřešen.
def funkce(parametr1, parametr2): #kus kódu return(parametr1*parametr2) funkce(32, 123.4)
Lokální proměnné ve funkcích se nezachovávají
def funkce(): a=32 return(parametr1*parametr2) funkce() print(a)
Parametry můžou mít jiné jméno, než proměnné, kterým se přiřadí
V Pythonu funkce nekontroluje typ parametrů, viz
def funkce(parametr1, parametr2): #kus kódu return(parametr1*parametr2) funkce(32, ["a", "b"]) # Příklad 1 funkce(32, "A") # Příklad 2 funkce(32, False) # Příklad 3 funkce("Z", "A") # Příklad 4, ale toto selže
Jak navrátit více proměnných z funkce?
def funkce(x): return([x*2, x+2]) [a,b]=funkce(10) # rozbalení hodnot (unpacking)
Jak udělat funkci (blok kódu) s 0 řádky?
def funkce(x): pass # TODO
Pojmenované parametry
def zlomek(jmenovatel, citatel=1): return citatel/jmenovatel >>> zlomek(3) 0.3333333333333333 >>> zlomek(3, 5) 1.6666666666666667
Zde jsem doplnil řešení poměrně těžkého úkolu na použití nezměrné moci pythonovských slovníků, který jsem vám dal 26. 9.
Pokud byste něčemu v kódu nerozuměli, nejdříve se koukněte na text kapitolky "Základy se slovníky"; pokud by pořád byly nejasnosti, rychle pište na mail (přes víkend jej asi nebudu moci číst). Pro přehlednost jsem nahradil text o českém šlechtici za jednoduché slovo, Antananarivo.
Ještě se na tento příklad podíváme v pondělí 3. 10. a vylepšíme ho.
Při procházení písmenek se vždy zeptáme slovníku, zda písmenko existuje a navýšíme počet jeho příslušných výskytů o jednotku. Takže po prvním průchodu bude ve slovníku {'A':1}, po druhém průchodu bude {'A':1, 'n':1} atd.