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.