9
(a) Napiši funkcijo Obrni(slovar), ki vrne »obrnjeni« slovar, torej takega, v katerem bodo vloge ključev in vrednosti obrnjene. Primer: Obrni({"ena": 11, "dve": 222}) mora vrniti slovar {11: "ena", 222: "dve"}.
(Vrednosti nekaterih tipov se sicer v pythonu ne da uporabljati kot ključe, vendar predpostavi, da se v naših slovarjih to ne bo zgodilo – npr. da se kot vrednosti pojavljajo le nizi in cela števila.) Opiši, kako se obnaša tvoja rešitev v primerih, ko več ključem v vhodnem slovarju pripada enaka vrednost.
(b) Kaj se zgodi, če slovar dvakrat obrnemo? Z drugimi besedami, kako se razlikujeta slovarja h in Obrni(Obrni(h))? Pod katerimi pogoji sta enaka?
10
Iz matematike se najbrž spomniš pojma preslikave in operacije kompozituma na preslikavah. Slovar pravzaprav ni nič drugega kot predstavitev preslikave v računalniku.
(a) Napiši funkcijo Komp(h1, h2), ki dobi dva slovarja in vrne nov slovar, v katerem so prisotni le tisti ključi k iz h1, za katere je vrednost h1[k] prisotna kot ključ v h2; pripadajoča vrednost k takemu ključu k v izhodnem slovarju pa naj bo h2[h1[k]].
Primer: pri h1 = {"ena": 1, "dve": 2, "tri": 3} in h2 = {1: "ane", 3: "irt"} mora funkcija Komp(h1, h2) vrniti slovar {"ena": "ane", "tri": "irt"}.
(b) Takšno veriženje slovarjev bi se dalo posplošiti tudi na 3 ali več slovarjev. Napiši funkcijo Komp3(h1, h2, h3), ki vrne nov slovar, v katerem ključu k pripada vrednost h3[h2[h1[k]]] (če je k prisoten kot ključ v h1 in če je h1[k] prisoten kot ključ v h2 in tako naprej).
(c) Če imamo tri slovarje h1, h2, h3, ali je Komp(Komp(h1, h2), h3) enak slovarju Komp(h1, Komp(h2, h3))?
(d) Napiši funkcijo VerigaSlovarjev(t), ki dobi kot parameter tabelo t z dvema ali več slovarji in te slovarje na tu opisani način sestavi v nov slovar, ki predstavlja preslikavo, ki jo dobimo, če najprej uporabimo preslikavo t[0], nato preslikavo t[1] in tako naprej.
11
Konkordanca nekega besedila je seznam vseh besed, ki se pojavljajo v njem, za vsako besedo pa so navedene vse njene pojavitve skupaj s sobesedilom, recimo prejšnjih in naslednjih 5 besed. Takšen seznam pride prav pri preučevanju jezika in književnosti, da bolje razumemo rabo in pomen posameznih besed. Napiši program, ki prebere vhodno besedilo in izpiše njegovo konkordanco.