Henrik Lončar
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 vrstebool
, ki je dolga toliko, kolikor je poglavij.i
-ti element jeTrue
, če se oseba pojavi vi
-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
inb
dve tabeli vrstebool
. Potema & b
vrne tabelo, ki imaTrue
na mestih, kjer sta obe,a
inb
enakiTrue
, tabelaa | b
pa na mestih, kjer je vsaj ena enakaTrue
.
Podatki in testi
- 6. december 2024, 14:19