Družabno omrežje dražbe
Naloga vsebuje teste. Naloga je rešena samo, če prestane vse teste. Poglej navodila za poganjanje testov.
Seznami
Napiši funkcijo
unikati(s), ki prejme seznam in vrne seznam, ki vsebuje iste elemente kots, v enakem vrstnem redu, vendar brez ponovitev. Funkcija ne sme spreminjati podanega seznama, temveč mora vrniti novega.Klic
unikati(["Ana", "Ana", "Berta", "Cilka", "Ana", "Berta", "Berta", "Berta", "Ema", "Dani", "Cilka"])vrne["Ana", "Berta", "Cilka", "Ema", "Dani"].Napiši funkcijo
skupnih(s, t), ki prejme dva seznama in vrne število skupnih elementov. Morebitne ponovljene elemente mora ignorirati.Klic
skupnih(["Ana", "Berta", "Ana", "Ana", "Cilka"], ["Cilka", "Dani", "Ana", "Ana"])vrne 2, ker imate seznama dva skupna elementa (Ano in Cilko). To, da se Ana ponovi večkrat, ga ne zmede.Napiši funkcijo
vseh(s, t), ki vrne število vseh elementov, ki se pojavijo vsalit(ali v obeh).Klic
skupnih(["Ana", "Berta", "Ana", "Ana", "Cilka"], ["Cilka", "Dani", "Ana", "Ana"])vrne 4, ker se v podanih seznamih pojavljajo 4 različna imena.
Procesiranje seznamov
Napiši funkcijo
preberi_datoteko(ime_dat, locilo), ki prejme ime datoteke, podobne tem, s kakršnimi smo delali doslej. Razlika je le v tem, da ločilo med stolpci ni nujno vejica, zato je ločilo podano z drugim argumentom. Funkcija mora vrniti seznam seznamov. Vsak element vrnjenega seznama je vrstica, ki vsebuje podatke iz vrstice.Recimo, da imamo datoteko
kolesa.txts takšno vsebino:Cube-5031-159-Janez-2017 Stevens-3819-1284-Ana-2012 Focus-3823-1921-Benjamin-2019Klic
preberi_datoteko("kolesa.txt", "-")mora vrniti seznam[['Cube', '5031', '159', 'Janez', '2017\n'], ['Stevens', '3819', '1284', 'Ana', '2012\n'], ['Focus', '3823', '1921', 'Benjamin', '2019\n']](Ne vznemirjaj se zaradi
\nv zadnjih elementih.)Nasvet: funkcija je zelo preprosta. V seznam trpaj, kar ti vrača
split.Napiši funkcijo
filtriran(s, stolpec, vrednost), ki prejme seznam, kakršnega vrača prejšnja funkcija in vrne nov seznam, ki vsebuje samo tiste elemente, ki imajo v podanem "stolpcu"stolpec(se pravi: na podanem indeksu) vrstici podanovrednost.Recimo, da imamo seznam
s = [["Ana", 5, 9, "Berta"], ["Cilka", 5, 12, "Berta"], ["Ana", 5, 9, "Cilka"], ["Berta", 5, 1, "Ana"]]Klic
filtriran(s, 0, "Ana")vrne seznam, ki vsebuje le tiste elemente seznamas, ki imajo v ničtem elementu niz"Ana". Rezultat klica je torej[["Ana", 5, 9, "Berta"], ["Ana", 5, 9, "Cilka"]]Klic
filtriran(s, 3, "Berta")vrne[["Ana", 5, 9, "Berta"], ["Cilka", 5, 12, "Berta"]]Klic
filtriran(s, 1, 5)vrne kar celoten seznam, saj imajo na prvem mestu slučajno vsi ravno5.Napiši funkcijo
izlusci(s, stolpec), ki vrne vse vrednosti, ki se pojavijo v podanem "stolpcu". Vrednosti morajo nastopati v originalnem vrstnem redu.Če je
sseznam iz prejšnjega primera, potem klicizlusci(s, 0)vrne["Ana", "Cilka", "Ana", "Berta"]. Klicizlusci(s, 1)vrne[5, 5, 5, 5]. Klicizlusci(s, 3)vrne["Berta", "Berta", "Cilka", "Ana"].
Dražba
Čestitam, prišli ste do sem, programiranja je zdaj skoraj konec. Če boste pametni, boste poslej samo klicali funkcije, ki ste jih napisali doslej.
Napiši funkcijo
predmeti(ime_dat, oseba), ki prejme ime datoteke z zapisnikom dražbe in ime neke osebe. Vrniti mora seznam vseh predmetov, za katere se je zanimala ta oseba.Napiši funkcijo
osebe(ime_dat, predmet), ki prejme ime datoteke z zapisnikom in ime predmeta. Vrniti mora osebe, ki so se zanimale za ta predmet.Napiši funkcijo
podobnost_oseb(ime_dat, oseba1, oseba2). Ta prejme ime datoteke z zapisnikom in imeni dveh oseb. Vrniti mora podobnost oseb. Podobnost oseb je definirana kot število predmetov, za katere sta se zanimali obe osebi, deljenemu s številom predmetov, za katere se je zanimala ena ali druga ali obe. (Glej Jaccardov index).Klic
podobnost_oseb("zapisnik.txt", "Cilka", "Ema")vrne 0.5. Cilka je hotela['pozlačen dežnik', 'kip', 'srebrn jedilni servis'], Ema pa['Meldrumove vaze', 'kip', 'srebrn jedilni servis']. Skupna predmeta sta 2 (kip in servis), vseh predmetov, za katere sta se zanimali (ena ali druga ali obe), pa 4. Funkcija vrne 2 / 4, torej 0.5.Napiši funkcijo
podobnost_predmetov(ime_dat, predmet1, predmet2), ki prejme ime datoteke in imeni dveh predmetov. Vrniti mora podobnost predmetov. Ta je enaka številu oseb, ki so se zanimale za oba predmeta, deljenemu s številom oseb, ki so se zanimale za vsaj enega.
Priporočilni sistem (Dodatna, neobvezna naloga)
Neobvezno, vendar preprosto, sploh, če uporabite funkcijo argmax, ki smo jo napisali na predavanju. Kar skopirajte jo v datoteko s svojim programom.
Napiši funkcijo
priporoci_predmet(ime_dat, predmet), ki prejme ime datoteke in ime nekega predmeta. Vrne naj predmet, ki je najbolj podoben temu predmetu. (Seveda je vsak predmet najbolj podoben samemu sebi; vrniti mora naslednji najpodobnejši predmet.)Napiši funkcio
priporoci_prijatelja(ime_dat, oseba), ki prejme ime datoteke in ime osebe ter vrne najbolj podobno osebo.
Testi
Testi vsebujejo datoteko s testnimi funkcijami (svoje rešitve lahko pišete kar v to datoteko in potem oddate vse skupaj) in datoteke s podatki. Odzipajte v isti direktorij.
Na koncu oddajte samo svojo rešitev (kot datoteko .py), brez podatkov. Te imamo. :)
- 9. november 2023, 19:28