4. Pisma sv. Miklavžu#

4.1. Testi#

Testi: testi-pisma-sv-miklavzu.zip

V poddirektoriju trenutnega direktorija se nahaja direktorij pisma, v katerem so otroška pisma Miklavžu.

(Torej: svoj program boste pisali v nekem direktoriju, na primer, da bo v datoteki c:\programiranje\resitev.py. Pisma so v poddirektoriju c:\programiranje\pisma, tako da je v njem, recimo c:\programiranje\pisma\ana.txt.) Ime datoteke je vedno sestavljeno iz imena otroka, ki mu sledi .txt.

V datotekah ni drugega kot seznam stvari (po ena v vsaki vrstici), ki si jih je otrok zaželel. (Otroci so se odločili, da letos ne bodo obremenjevali sv. Miklavža s spiskom obljub, za katere je jasno, da se jih ne bodo držali.) Vsebina datoteke dani.txt je, recimo,

glavnik
orglice
zvezek

4.2. Naloge#

Napišite naslednje funkcije:

4.2.1. Preberi datoteko#

preberi_datoteko(ime) prejme ime otroka (npr. “dani”) in vrne množico stvari, ki si jih otrok želi. Za to mora prebrati ustrezno datoteko v poddirektoriju “pisma”.

>>> preberi_datoteko("dani")
{'orglice', 'zvezek', 'glavnik'}

4.2.2. Pisci#

pisci() ne dobi nobenih argumentov, vrne pa množico z imeni vseh otrok, ki so napisali pisma Miklavžu.

>>> imena = pisci()
>>> imena
{'cilka', 'ema', 'ana', 'dani', 'berta'}

4.2.3. Želje#

zelje(imena) prejme množico imen otrok in vrne slovar, katerega ključi so imena, vrednosti pa množice stvari, ki si jih je zaželel dotični otrok.

>>> spiski = zelje(imena)
>>> spiski
{'ana': {'sanke', 'pero', 'zvezek'}, 'cilka': {'notni zvezek', 'lok za violino'},
 'ema': {'copati', 'glavnik'}, 'berta': {'copati', 'zvezek'},
 'dani': {'zvezek', 'orglice', 'glavnik'}}

4.2.4. Preštej stvari#

prestej_stvari(spiski) prejme spiske v obliki, v kateri jih vrača prejšnja funkcija, in vrne slovar, katerega ključi so imena stvari, ki so si jih zaželeli ti otroci, vrednosti pa so število teh stvari. Če so si trije otroci zaželeli zvezek, bo pod ključem zvezek shranjena vrednost 3.

>>> stvari = prestej_stvari(spiski)
{'zvezek': 3, 'glavnik': 2, 'copati': 2, 'pero': 1, 'notni zvezek': 1,
 'sanke': 1, 'lok za violino': 1, 'orglice': 1}

Namesto slovarja je dovoljeno uporabiti tudi kaj, kar je v sorodu z njim in se obnaša enako kot slovar.

4.2.5. Izpiši stvari#

izpisi_stvari(stvari) dobi slovar, ki ga vrača funkcija prestej_stvari in ga izpiše tako, da so stvari poravnana na levo, sledi jim toliko pik, da je skupna dolžina stvari in pik 20, sledi pa število otrok, ki si želi posamezno stvar.

Za ilustracijo, kratek program, ki uporablja te funkcije, bi bil lahko videti takole:

imena = pisci()
spiski = zelje(imena)
stvari = prestej_stvari(spiski)
izpisi_stvari(stvari)

in bi izpisal

notni zvezek........1
sanke...............1
orglice.............1
glavnik.............2
lok za violino......1
copati..............2
zvezek..............3
pero................1