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. Numpy
  3. Henrik Lončar

Henrik Lončar

Zahteve zaključka
Rok za oddajo: sreda, 11. december 2024, 16.15

Za reševanje te domače naloge uporabljajte numpy. Vsaka funkcija naj bi imela samo eno vrstico z return-om, ki vrne ustrezno filtrirano, indeksirano, prešteto ali karkoli že tabelo. Samo pri naj_dogajanje bo morda praktično, če boste dodali še eno vrstico.

Da ste rešili, kot je mišljeno, boste prepoznali po tem, da ne bo v programu nobenih zank, generatorjev, izpeljanih seznamov. Da ne zapletam testov, ti tega ne bodo preverjali in če bo kdo rešil kako drugače, bo tudi ta rešitev sprejeta kot pravilna. Vseeno pa zelo priporočam, da se potrudite: gre za uvodne naloge iz numpyja in dobro je, da to obvladate, preden pridejo na vrsto zahtevnejše.


Program piši tako, da se datoteki nahajata v istem direktoriju kot program. Odpri ju z open("chapters.txt") in open("mentions.txt"), ne z open("c://Users//benjamin//dokumenti//programiranje1//domace-naloge//08-naloga/datoteko-sem-še-malo-preimenoval.csv").

Nalogi sta priloženi dve datoteki.

  • "chapters.txt" vsebuje imena poglavij neke otroške knjige.
  • "mentions.txt" ima tri stolpce: številka poglavja, ime osebe in število omemb te osebe v tem poglavju. V datoteki je, recimo, vrstica 25,Trelawney,21, ki pomeni, da se v 25. poglavju 21-krat omeni oseba s priimkom Trelawney.

Ker sem podatke nabral avtomatsko vsebujejo napake - kadar, na primer, osebo pokličejo po priimku, je težko avtomatsko razbrati, za koga gre. Če bom te podatke uporabljal tudi v prihodnih nalogah, jih bom morda izboljševal.

Nekatere osebe so zapisane z imeni, druge s priimki, saj je bralcem včasih bolj znano eno, včasih drugo (najbrž nihče ne ve, komu je bilo ime Gerrick...). Osebe, ki so predstavljene z imeni in ne priimki, so:

["Harry", "Hermione", "Ron", "Ginny", "Fred", "George", "Arthur", "Molly", "Bill", "Fleur",
 "Cedric", "Cho", "Dean", "Dudley", "Draco", "Charlie", "Katie", "Kendra", "Kingsley",
 "Luna", "Neville", "Oliver", "Sirius", "Xenophilius", "James", "Lily", "Petunia", "Vernon",
 "Lucius", "Louis", "Isla", "Roxanne", "Burke", "Cygnus", "Beadle", "Sirius", "Phineas",
 "Alecto", "Scorpius", "Gwenog", "Beatrix",  "Lucius", "Ariana", "Narcissa", "Angelina",
 "Ignotus", "Percy"]

Priprava podatkov

Napiši program (ne funkcije!), ki prebere datoteki in pripravi numpyjeve tabele poglavja, osebe in omembe. Tabele vsebujejo podatke iz stolpcev datoteke "occurences.txt", pri čemer sta poglavje in omembe pretvorjeni v int. Od poglavje odštejte 1, da bo imelo prvo poglavje številko 0.

Poleg tega preberi vsebino datoteke "chapters.txt" v tabelo naslovi.

Testi bodo preverjali, ali obstajajo spremenljivke s temi imeni in vsebujejo (del tega), kar morajo.

Ogrevanje

Preden se lotiš pisanja funkcij, se ti splača malo vaditi. Tule je nekaj idej.

  • Katero je največje število omemb katerekoli osebe v kateremkoli poglavju?
  • Za katero osebo gre?
  • Za katero poglavje? Številka poglavja? Naslov tega poglavja?

Obvezna naloga

Napiši naslednje funkcije:

  • naj_oseba(): vrne ime osebe, ki se omeni največkrat v kateremkoli poglavju. (Funkcija vrne Harry, ker se le-ta 150-krat omeni v 26. poglavju, kar je rekord.)
  • naj_dogajanje(): podobno kot prejšnja funkcija, le da vrne ime poglavja in ime osebe.
  • prva_omemba(oseba): vrne ime poglavja, v katerem se podana oseba prvič omeni.
  • koliko_poglavij(oseba): vrne število poglavij, v katerih se omeni podana oseba.
  • v_poglavjih_st(oseba): vrne tabelo s številkami poglavij, v katerih se omeni podana oseba.
  • v_poglavjih(oseba): vrne tabelo naslovov poglavij, v katerih se omeni podana oseba.
  • vseh_omemb(oseba): vrne število omemb podane osebe v celotni knjigi.

Dodatna naloga

  • maska_poglavij(oseba): vrne tabelo vrste bool, ki je dolga toliko, kolikor je poglavij. i-ti element je True, če se oseba pojavi v i-tem poglavju (pri čemer so poglavja oštevilčena od 0).
  • podobnost(oseba1, oseba2): vrne Jaccardovo podobnost med dvema osebama. To izračunamo kot število poglavij, v katerih se pojavita obe osebe, deljena s številom poglavij, v katerih se pojavi vsaj ena od njiju.

    Naj bosta a in b dve tabeli vrste bool. Potem a & b vrne tabelo, ki ima True na mestih, kjer sta obe, a in b enaki True, tabela a | b pa na mestih, kjer je vsaj ena enaka True.

Podatki in testi

  • testi.zip testi.zip
    6. december 2024, 14:19
Trenutno uporabljate gostujoči dostop (Prijavite se)
Pridobi mobilno aplikacijo
Stran poganja Moodle
Obvestilo o avtorskih pravicah