Pisma Miklavžu

Rok za oddajo: torek, 30. november 2021, 08.00

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:/programiranje1/naloga7/resitev.py. Pisma so v poddirektoriju c:/programiranje1/naloga7/pisma, tako da je v njem, recimo c:/programiranje1/naloga7/pisma/ana.txt.) Ime datoteke je vedno sestavljeno iz imena otroka, ki mu sledi .txt. Moja datoteka, recimo, bi bila janez.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

Napišite naslednje funkcije:

  • 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'}
    
  • pisci() ne dobi nobenih argumentov, vrne pa množico z imeni vseh otrok, ki so napisali pisma Miklavžu. Ta dobi iz imen datotek.

    >>> pisci()
    {'cilka', 'ema', 'ana', 'dani', 'berta'}
    
  • zelje(imena) prejme množico imen otrok in vrne slovar, katerega ključi so ta imena, pripadajoče vrednosti pa množice stvari, ki si jih je zaželel otrok s tem imenom. Funkcija pridobi podatke iz datotek.

    >>> zelje(imena)
    {'ana': {'sanke', 'pero', 'zvezek'}, 'cilka': {'notni zvezek', 'lok za violino'},
    'ema': {'copati', 'glavnik'}, 'berta': {'copati', 'zvezek'},
    'dani': {'zvezek', 'orglice', 'glavnik'}}
    
  • prestej_stvari(spiski) prejme spiske v obliki slovarja, kakršnega 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 ključu "zvezek" pripadala 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. :)

  • prosilci(spiski) prejme spiske v obliki slovarja, kot ga vrača funkcija zelje, in vrne slovar, katerega ključi so darila, vrednosti pa množice otrok, ki so prosili za to darilo.

Testi in pisma