Preskoči na glavno vsebino
Učilnica FRI 24/25
  • Domov
  • Več
Zapri
Preklopi iskalni vnos
Slovenščina ‎(sl)‎
English ‎(en)‎ Slovenščina ‎(sl)‎ Македонски ‎(mk)‎ Русский ‎(ru)‎ 한국어 ‎(ko)‎
Trenutno uporabljate gostujoči dostop
Prijavite se
Učilnica FRI 24/25
Domov
Razširi vse Skrči vse
  1. pn
  2. Funkcije
  3. Družabno omrežje dražbe

Družabno omrežje dražbe

Zahteve zaključka
Rok za oddajo: sreda, 13. november 2024, 16.15

Naloga vsebuje teste. Naloga je rešena samo, če prestane vse teste. Poglej navodila za poganjanje testov.

Seznami

  1. Napiši funkcijo unikati(s), ki prejme seznam in vrne seznam, ki vsebuje iste elemente kot s, 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"].

  2. 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.

  3. Napiši funkcijo vseh(s, t), ki vrne število vseh elementov, ki se pojavijo v s ali t (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

  1. 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.

  2. 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 podano vrednost.

    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 seznama s, 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 ravno 5.

  3. 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 klic izlusci(s, 0) vrne ["Ana", "Cilka", "Ana", "Berta"]. Klic izlusci(s, 1) vrne [5, 5, 5, 5]. Klic izlusci(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.

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  1. 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.)

  2. 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. :)

  • testi.zip testi.zip
    9. november 2023, 19:28
Trenutno uporabljate gostujoči dostop (Prijavite se)
Pridobi mobilno aplikacijo
Stran poganja Moodle
Obvestilo o avtorskih pravicah