Skip to main content
Učilnica FRI 24/25
  • Home
  • More
Close
Toggle search input
English ‎(en)‎
English ‎(en)‎ Slovenščina ‎(sl)‎ Македонски ‎(mk)‎ Русский ‎(ru)‎ 한국어 ‎(ko)‎
You are currently using guest access
Log in
Učilnica FRI 24/25
Home
Expand all Collapse all
  1. progkog
  2. Numpy
  3. Albus Percival Wulfric Brian Dumbledore

Albus Percival Wulfric Brian Dumbledore

Completion requirements
Due: Friday, 24 January 2025, 11:59 PM

Ocena 6

V datoteki osebe.csv se nahajajo polna imena vseh oseb iz Harryja Potterja (žal tudi iz kasnejših "dodatkov") in še neke povezave, ki so sicer zanimive, vendar nepovezane z našo nalogo.

Napiši naslednje funkcije:

  • brez_dodatkov(ime) prejme polno ime osebe in vrne ime te osebe brez "dodatkov". Klic brez_dodatkov("Mrs. Molly Weasley") vrne "Molly Weasley", klic brez_dodatkov("Cygnus Black III") vrne "Cygnus Blake" in klic brez_dodatkov("Madame Rolanda Hooch") vrne "Rolanda Hooch". Dodatki, ki jih morate odstraniti, so 'Mr. ', 'Mrs. ', ' III', ' II', ' I', 'the ', 'The ', ' Jr.', 'Sir ', 'Madam ', 'Madame '. (V seznamu sem prijazno dodal presledke pred ali za "dodatek"; to bi vam lahko pomagalo, če vam ne, pa jih pobrišite.)

    Pazi: "Sirius Black III" mora postati "Sirius Black", ne "ius Black"!

  • po_priimkih() vrne slovar, katerega ključi so priimki oseb, imena pa množice imen oseb s takšnim priimkom. Predtem tem moraš iz imena pobrisati "dodatke" - kot je opisano zgoraj.

    • Če je za osebo znano le eno ime (Kreacher, Nagini), brez priimka, naj se ne pojavi v slovarju.
    • Če ima oseba več imen, je priimek zadnji, ime pa je prvo. V "Albus Percival Wulfric Brian Dumbledore" je priimek Dumbledore, ime pa Albus.

    V slovarju, ki ga vrne po_priimkih, je pri ključu "Dumbledore" vrednost {'Albus', 'Ariana', 'Percival', 'Kendra', 'Aberforth'}.

  • unikatni_priimki() vrne množico priimkov, ki jih ima le ena oseba.

  • imena() vrne množico z vsemi (prvimi) imeni vseh oseb.

Ocena 7

  • podvojena_imena() vrne množico imen, ki jih ima več oseb. Upoštevaj le prvo ime vsake oseba (npr. Albus in ne tudi Percial, Wulfric, Brian).

  • omembe(besede, beseda) prejme seznam besed in vrne indekse, na katerih se pojavi podana beseda.

    Klic omembe(potter6, "Harry), kjer je potter6 seznam vseh besed 6. dela Harryja Potterja, vrne vse indekse vseh pojavitev besede "Harry". (Testi bodo v resnici prejeli tak seznam, pri čemer bodo vsa imena spremenjena v osebna imena, npr. Albus in ne Dumbledore.)

Ocena 8

  • po_blokih(besede, beseda, sirina) prejme seznam besed, besedo in širino bloka. Vrniti mora število pojavitev podane besede v blokih besed s podano širino. Klic po_blokih(potter6, "Harry", 2000) vrne seznam, ki pove, kolikokrat se Harry pojavi v prvih 2000, v naslednjih 2000, naslednjih 2000 in tako besedah. Če zadnji blok ni poln (ker število besed ni deljivo s širino bloka), ga ignoriraj.

  • imena_po_blokih(besede, imena, sirina) vrne podobno reč, a v obliki numpyjeve matrike: vrstice predstavljajo bloke, stolpci imena iz podanega seznama imen. Element [i, j] pove, kolikokrat se j-to ime pojavi v i-tem bloku besed.

Ocena 9

  • sosed(besede, ime, sirina) vrne slovar, katerega ključi so imena, ki se vsaj enkrat pojavijo za največ sirina mest stran od podanega imena (če je sirina enaka, na primer, 2, sme biti med imenoma največ ena beseda). Pripadajoče vrednosti so število takšnih pojavitev. Večkratne pojavitve se štejejo večkrat.

    Klic sosed("Harry and Ron met Romilda and Romilda asked Harry about Ron".split(), "Harry", 2) vrne {"Ron": 2, "Romilda": 1}. Ron se dvakrat pojavi na razdalji (največ) 2, Romilda pa enkrat.

    Klic sosed("Harry and Ron met Romilda and Romilda asked Harry about Ron".split(), "Harry", 4) vrne {"Ron": 2, "Romilda": 3}. Ron se dvakrat pojavi na razdalji (največ) 2, Romilda pa trikrat (ena Romilda je dovolj blizu obeh Harryjev).

Ocena 10

  • sovpadanje(besede, ime1, ime2, sirina). Tudi ta prejme besedilo knjige in ga spusti čez funkcijo po_imenih. Nato izračuna "prekrivanje" med osebama po naslednjem postopku. Recimo, da pokličemo sovpadanje(besede, "Ginny", "Romilda", 20).

    • Recimo, da se "Ginny" pojavi na indeksih 100, 110, 180, in 250. Tedaj bomo rekli, da Ginny, "pokriva" mesta od 80 do 120 (vključno!), od 90 do 130, od 160 do 200 in od 230 do 270 -- torej besedo, na kateri se pojavi in še 20 besed levo in desno, ker smo 20 podali kot argument sirina. Ker istega mesta na pokriva dvakrat, bi bilo prav reči, da pokriva 80 do 130, 160 do 200 in 230 do 270.
    • Recimo, da se "Romilda" pojave na indeksih 5, 70 in 255. Potem pokriva -15 do 25, 50 do 90 in 235 do 275.

    Prekrivanje med njima je potem od 80 do 90 in od 235 do 270. Velikost prekrivanje je 11 + 36 = 47. To je rezultat, ki ga mora vrniti funkcija.

    Za preprostejši primer vzemimo klic

    sovpadanje("Harry and Ron met Romilda and Romilda asked Harry about Ron".split(), ime1, ime2, 2)
    

    Spodnja slika kaže, katera mesta pokriva katera beseda (mesta so lahko tudi po koncu besedila ali pred začetkom!).

                       Harry and Ron met Romilda and Romilda asked Harry about Ron
    Harry:    X    X     X    X   X                     X       X     X     X   X
    Ron:                 X    X   X   X     X                         X     X   X     X     X
    Romilda:                      X   X     X     X     X       X     X
    

    Prekrivanje med Harry in Ron je 6 (kolikor je istoležnih indeksov v prvi in drugi vrstici), prekrivanje med Harry in Romilda (prva in zadnja vrstica) je 4, prekrivanje med Ron in Romilda pa prav tako 4.

    Če zmanjšamo širino na 1,

                   Harry and Ron met Romilda and Romilda asked Harry about Ron
    Harry:     X     X    X                                 X     X     X   
    Ron:                  X   X   X                                     X   X     X
    Romilda:                      X     X     X     X       X    
    

    je prekrivanje med Harry in Ron je 2, med ostalima paroma pa 1.

  • podobnost(besede, ime1, ime2, sirina) vrne podobno reč, le da število mest, ki jih pokrijeta obe imeni, deli s številom mest, ki ga pokrije vsaj eno od imen.

Testi

  • testi.zip testi.zip
    9 January 2025, 8:30 PM
You are currently using guest access (Log in)
Get the mobile app
Powered by Moodle
Obvestilo o avtorskih pravicah