Punce so spet naročale malico. Naročila spet shranjujemo v seznamu terk, kot na primer

narocila = [("Ana", "sendvič"), ("Berta", "sendvič"), ("Cilka", "burek"),
            ("Dani", "jogurt"), ("Ema", "sendvič"), ("Fanči", "burek")]

Funkcije, ki jih morate napisati, so enake kot v domači nalogi Malice in če želite, lahko pri reševanju gledate tudi objavljeno rešitev one domače naloge.

Naloge so nekoliko spremenjene (ponekod so seznami zamenjani z množicami), predvsem pa je nekoliko premešan njihov vrstni red. Pa oddaj bomo preskočili, saj ta ne gre v eno vrsto (brez resnega nasilja).

Obvezna naloga

  • Napiši funkcijo narocniki(narocila, hrana), ki vrne množico imen vseh, ki so naročili podano hrano. Če so narocila seznam z začetka besedila, klic narocniki(narocila, "sendvič") vrne {"Ana", "Berta", "Ema"}.

  • Napiši funkcijo stevilo_narocil(narocila, hrana), ki prejme seznam, kakršen je zgornji, in ime neke hrane, vrne pa število ljudi, ki so naročili to hrano. Če je narocila gornji seznam, klic stevilo_narocil(narocila, "sendvič") vrne 3.

  • Napiši funkcijo slovar_narocil(narocila), ki prejme seznam, kakršen je gornji, vrne pa slovar, katerega ključi so imena oseb, pripadajoče vrednosti pa hrana, ki so jo naročile. Za gornja naročila funkcija vrne {"Ana": "sendvič", "Berta": "sendvič", "Cilka": "burek", "Dani": "jogurt", "Ema": "sendvič", "Fanči": "burek"}.

  • Napiši funkcijo kosovnica(narocila), ki prejme seznam naročil in vrne slovar, katerega ključi so različne malice, vrednosti pa število oseb, ki so naročile to malico. Za gornja naročila funkcija vrne {"sendvič": 3, "burek": 2, "jogurt": 1}.

  • Napiši funkcijo najpopularnejse(narocila), ki vrne ime največkrat naročene jedi. Predpostavljajmo, da je le ena. Za gornja naročila funkcija vrne "sendvič". Pri tej funkciji si pomagajte s trikom za max, ki ste ga nekateri že odkrili, potem pa sem ga tudi razložil na predavanjih. Če se želiš izogniti temu, da bi nekaj računal dvakrat, ima ta funkcija lahko tudi dve vrstici. Najprej nekaj izračunaš in potem to uporabiš. (Nekateri ste jo že rešili tako.)

  • Napiši funkcijo vsa_narocila(narocila), ki vrne slovar, katerega ključi so imena jedi, vrednosti pa množice imen oseb, ki so naročili to jed. Za gornja naročila funkcija vrne {"sendvič": {"Ana", "Berta", "Ema"}, "burek": {"Cilka", "Fanči"}, "jogurt": {"Dani"}. Namig: ne vznemirjaj se, če bo funkcija nekoliko neučinkovita in bo nekatere stvari računala večkrat.

  • Napiši funkcijo primanjkljaj(kosovnica, zaloga), ki prejme slovar, kakršnega vrača funkcija kosovnica in podoben slovar, katerega ključi so imena jedi, vrednosti pa število kosov te jedi, ki jih imamo na zalogi. Funkcija vrne slovar, ki pove, koliko kosov jedi nam manjka. Klic primanjkljaj({"sendvič": 3, "burek": 2, "jogurt": 1}, {"sendvič": 2, "jogurt": 2, "korenček": 4}) vrne, {"sendvič": 1, "burek": 2}. Z drugimi besedami: jed se pojavi v tem slovarju, če je je premalo.

  • Napiši funkcijo goljufi(narocila), ki vrne množico imen vseh, ki so naročili več kot eno malico. V gornjem primeru takšnih ni. Če pokličemo goljufi([("Ana", "burek"), ("Berta", "sendvič"), ("Berta", "sendvič"), ("Cilka", "sendvič"), ("Berta", "korenček"), ("Ana", "burek")]), pa vrne seznam {"Ana", "Berta"}. Ana je v množici, ker je naročila dvakrat - pa čeprav isto jed. Pomoč: morda najprej reši v dveh vrsticah. Najprej izračunaj, kolikokrat je kdo naročil; Counter je tvoj prijatelj. Nato sestavi množico tistih, ki so naročili več kot enkrat. Ko bo to napisano v dveh vrsticah, ju bo trivialno zliti v eno.

Dodatna naloga

  • Napiši funkcijo kosovnica_brez_goljufov(narocila), ki dela podobno kot funkcija kosovnica, le da pri vsaki osebi upošteva le njeno prvo naročilo. Namig: kaj se zgodi, če iz naročil sestaviš slovar? Ni čisto tak, kot bi ga želel? Prav, v tem primeru pa sestavi slovar iz tako preobrnjenih naročil, da bo tak, kot bi ga želel.
Последна промена: вторник, 17 март 2026, 08:46