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 vs
alit
(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.txt
s takšno vsebino:Cube-5031-159-Janez-2017 Stevens-3819-1284-Ana-2012 Focus-3823-1921-Benjamin-2019
Klic
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
\n
v 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
s
seznam 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, 13:27