Zadatak 1. Ispišite jednu rečenicu po izboru.
In [3]:
print 'Ispisujem jednu rečenicu po izboru.'
Zadatak 2. U varijablu broj1 pohranite cjelobrojni tip podatka vrijednosti 15 i ispišite ju.
In [2]:
broj1=15
print broj1
Zadatak 3. U varijablu broj2 pohranite realni tip podatka vrijednosti 5.05 i ispišite ju.
In [3]:
broj2=5.05
print broj2
Zadatak 4. U varijablu broj3 pohranite realni tip podatka vrijednost -7.89 i ispišite ju.
In [4]:
broj3=-7.89
print broj3
Zadatak 5. U varijablu niz1 pohranite niz znakova 'Nitko ne očekuje španjolsku inkviziciju.' i ispišite ju.
In [5]:
niz1='Nitko ne očekuje španjolsku inkviziciju.'
print niz1
Zadatak 6. U varijablu niz2 pohranite niz znakova '5.05' i ispišite ju.
In [6]:
niz2='5.05'
print niz2
Zadatak 7. U varijablu niz3 pohranite prazan niz znakova i ispišite ju.
In [7]:
niz3=''
print niz3
Zadatak 8. Indeksirajte prvi znak varijable niz1.
In [10]:
niz1[0]
Out[10]:
Zadatak 9. Indeksirajte posljednji znak varijable niz1.
In [11]:
niz1[-1]
Out[11]:
Zadatak 10. Indeksirajte podniz '.05' varijable niz2.
In [12]:
niz2[-4:]
Out[12]:
Zadatak 11. U varijablu niz4 pohranite niz znakova 'ime\tprezime\tadresa' i ispišite ju.
In [8]:
niz4='ime\tprezime\tadresa'
print niz4
Zadatak 12. U varijablu niz5 pohranite niz znakova 'prvi red\ndrugi red\n3. red\n'.
In [9]:
niz5='prvi red\ndrugi red\n3. red\n'
print niz5
Zadatak 13. Provjerite je li varijabla broj2 veća od varijable broj1.
In [10]:
broj2>broj1
Out[10]:
Zadatak 14. Podijelite vrijednost varijable broj1 sa 2 te ispišite novonastalu realnu vrijednost.
In [16]:
print broj1/2.
Zadatak 15. Izračunajte ostatak dijeljenja vrijednosti varijable broj1 sa 2.
In [17]:
print broj1%2
Zadatak 16. Provjerite je li izraz (6+5)%3 jednak izrazu 1+5/3.
In [14]:
(6+5)%3==1+5/3
Out[14]:
Zadatak 17. Provjerite je li izraz 2**3 različit od izraza 116/14.5.
In [15]:
2**3!=116/14.5
Out[15]:
Zadatak 18. Ispišite poruku na ekran 'Rezultat dijenjenja iz 14. zadatka je 7.5, a cijeli dio tog izraza je 7.'. Brojčane vrijednosti ispišite iz objekta odnosno varijable broj1. Za ispis druge vrijednosti trebate funkcijom promijeniti tip podatka.
In [11]:
print 'Rezultat dijenjenja iz 14. zadatka je '+str(broj1/2.)+', a cijeli dio tog izraza je '+str(int(broj1/2))+'.'
Zadatak 19. U jednu varijablu pohranite svoju godinu rođenja, a u drugu varijablu prošlu godinu. Ispišite poruku 'Prošle ste godine navršili godina: x'. Na mjestu znaka 'x' trebate izračunati broj godina pomoću varijabli. Na kraju promijenite vrijednost varijable rođenja te ponovite ispis.
In [12]:
g_rodjenja=1995
g_prosla=2016
print 'Prošle ste godine navršili godina: '+str(g_prosla-g_rodjenja)
Zadatak 20. Izračunajte duljinu varijable niz4 te vrijednost ispišite u obliku poruke.
In [13]:
print 'Dužina niza jest '+str(len(niz4))+'.'
Zadatak 21. Provjerite sadrži li varijabla niz5 paran broj znakova.
In [23]:
len(niz5)%2==0
Out[23]:
Zadatak 22. Provjerite nalazi li se znak 'g' u varijabli niz1.
In [24]:
'g' in niz1
Out[24]:
Zadatak 23. Provjerite nalazi li se podniz 'jo' u varijabli niz1.
In [25]:
'jo' in niz1
Out[25]:
Zadatak 24. Ispišite varijablu niz4 velikim slovima.
In [26]:
print niz4.upper()
Zadatak 25. U varijabli niz1 zamijenite znak 'k'sa znakom 'K'.
In [27]:
print niz1.replace('k','K')
Zadatak 26. Iz varijable niz5 uklonite bjeline s početka i kraja niza.
In [28]:
print niz5.strip()
Zadatak 27. Iz varijable niz1 stvorite listu odvajanjem elemenata razmakom ' '.
In [29]:
print niz1.split(' ')
Zadatak 28. Pohranite vrijednost iz prethodnog zadatka u varijablu lista. Stvorite novi niz iz varijable lista spajanjem elemenata prelaskom u novi red \n.
In [25]:
lista=niz1.split(' ')
novi_niz='\n'.join(lista)
print novi_niz
Zadatak 29. Iz varijable niz4 stvorite listu odvajanjem elemenata tabulatorom '\t'.
In [26]:
print niz4.split('\t')
Zadatak 30. U varijablu lista1 pohranite listu ['jedan','dva','tri'].
In [27]:
lista1=['jedan','dva','tri']
print lista1
Zadatak 31. U varijablu lista2 pohranite listu s četiri elementa različitih tipova podataka.
In [28]:
lista2=[1,'dva',6.9,['lista','u','listi']]
print lista2
Zadatak 32. U varijablu lista3 pohranite praznu listu.
In [29]:
lista3=[]
print lista3
Zadatak 33. Iz varijable lista1 indeksirajte prvo slovo posljednjeg elementa.
In [30]:
print lista1[-1][0]
Zadatak 34. U varijablu lista4 spojite varijable lista1 i lista2 te izračunajte duljinu novonastale liste.
In [31]:
lista4=lista1+lista2
print lista4
Zadatak 35. Iz varijable lista2 promijenite predzadnji element liste.
In [32]:
lista2[-2]='novi element'
print lista2
Zadatak 36. U varijablu lista1 dodajte elemente 4 te 'pet'.
In [33]:
lista1.append(4)
lista1.append('pet')
print lista1
Zadatak 37. U varijablu lista1 dodajte na predzadnje mjesto element 'uljez'.
In [34]:
lista1.insert(-2,'uljez')
print lista1
Zadatak 38. U varijablu ime pohranite svoje ime. Ispišite poruku na ekran ovisno o tome sadrži li ime paran ili neparan broj znakova (npr. “Ime Maja sadrži paran broj znakova”).
In [35]:
ime='Nikola'
if len(ime)%2==0:
print 'Ime '+ime+' sadrži paran broj znakova.'
else:
print 'Ime '+ime+' sadrži neparan broj znakova.'
Zadatak 39. Ispišite poruku počinje li ime samoglasnikom ili suglasnikom. Isto učinite s posljednjim slovom imena.
In [36]:
ime='Emanuela'
if ime[0].lower() in 'aeiou':
print 'Ime '+ime+' počinje samoglasnikom.'
else:
print 'Ime '+ime+' počinje suglasnikom.'
if ime[-1].lower() in 'aeiou':
print 'Ime '+ime+' završava samoglasnikom.'
else:
print 'Ime '+ime+' završava suglasnikom.'
Zadatak 40. Prođite kroz sva slova imena i izračunajte broj samoglasnika.
In [37]:
ime='Emanuela'
broj_samoglasnika=0
for znak in ime.lower():
if znak in 'aeiou':
broj_samoglasnika+=1
print 'Ime '+ime+' sadrži broj samoglasnika: '+str(broj_samoglasnika)+'.'
Zadatak 41. Izračunajte omjer suglasnika i samoglasnika (broj_suglasnika/broj_samoglasnika).
In [39]:
ime='Emanuela'
broj_samoglasnika=0
broj_suglasnika=0
for znak in ime.lower():
if znak in 'aeiou':
broj_samoglasnika+=1
else:
broj_suglasnika+=1
print 'Omjer suglasnika i samoglasnika u imenu '+ime+' je : '+str(float(broj_suglasnika)/broj_samoglasnika)
Zadatak 42. Definirajte listu brojčanih vrijednosti od 3 do 6 i izračunajte sumu tih vrijednosti (iteriranjem kroz listu).
In [40]:
lista=[3,4,5,6]
suma=0
for element in lista:
suma+=element
print suma
Zadatak 43. Izračunajte sumu parnih brojčanih vrijednosti.
In [41]:
lista=[3,4,5,6]
suma_parnih=0
for element in lista:
if element%2==0:
suma_parnih+=element
print suma_parnih
Zadatak 44. Izračunajte sumu vrijednosti djeljivih s 3.
In [42]:
lista=[3,4,5,6]
suma_3=0
for element in lista:
if element%3==0:
suma_3+=element
print suma_3
Zadatak 45. Definirajte listu nizova znakova. Stvorite novi niz znakova koji sadrži prvi znak svakog elementa liste. Na primjer, iz liste ['dan','mjesec','godina'], niz znakova je 'dmg'.
In [43]:
lista=['dan','mjesec','godina']
novi_niz=''
for element in lista:
novi_niz+=element[0]
print novi_niz
Zadatak 46. Stvorite novi niz znakova koji sadrži:
1. prvi znak elementa liste ako je duljina elementa parna, odnosno
2. posljednji znak elementa liste ako je duljina elementa neparna. Na primjer, iz liste `['dan','mjesec','godina']`, niz znakova je `'nmg'`.
In [44]:
lista=['dan','mjesec','godina']
novi_niz=''
for element in lista:
if len(element)%2==0:
novi_niz+=element[0]
else:
novi_niz+=element[-1]
print novi_niz
Zadatak 47. Stvorite novu listu koja sadrži samo elemente originalne liste čija je duljina veća od 3.
In [45]:
lista=['dan','mjesec','godina']
nova_lista=[]
for element in lista:
if len(element)>3:
nova_lista.append(element)
print nova_lista
Zadatak 48. Pročitajte sadržaj datoteke datoteka.txt. Izračunajte duljinu teksta.
In [46]:
dat=open('datoteka.txt','r').read()
print dat
print len(dat)
Zadatak 49. Izračunajte koliko redova ima datoteka.txt.
In [47]:
broj_redova=0
for red in open('datoteka.txt'):
broj_redova+=1
print broj_redova
Zadatak 50. Izračunajte koliko ima samoglasnika, a koliko suglasnika u datoteci datoteka.txt.
In [48]:
broj_samoglasnika=0
broj_suglasnika=0
for znak in open('datoteka.txt').read().lower():
if znak in 'aeiou':
broj_samoglasnika+=1
else:
broj_suglasnika+=1
print broj_samoglasnika
print broj_suglasnika
Zadatak 51. Ispišite posljednji znak svakog reda u datoteci datoteka.txt.
In [49]:
for red in open('datoteka.txt'):
print red.strip()[-1]
Zadatak 52. Zapišite proizvoljan tekst od više redaka bez dijakritičkih znakova u neku datoteku (Python kodom, dakle funkcijom open() itd.) te potom pročitajte taj tekst iz datoteke i izračunajte njegovu duljinu.
In [50]:
d=open('moj_tekst.txt','w')
d.write('neki proizvoljan tekst\nbez dijakritickih znakova\n')
d.write('treba izracunati\nduljinu')
d.close()
print len(open('moj_tekst.txt').read())
Proučite sadržaj datoteke primjer.txt (najbolje pomoću programa Notepad++). predstavlja uzorak rezultata označavanja podataka studenata na kolegiju "Odabrana poglavlja obrade prirodnog jezika". Drugi stupac datoteke predstavlja identifikator korisnika, treći stupac o tome je li točan odgovor unaprijed znan (1 je istina, 0 laž) te četvrti podatak je li taj odgovor točan (1 je ponovno istina, 0 laž). Sljedeće zadatke rješavajte na ovoj datoteci.
Zadatak 53. Izračunajte broj odgovora u uzorku. Broj odgovora jednak je broju redova u datoteci.
In [52]:
broj_odgovora=0
for red in open('primjer.txt'):
broj_odgovora+=1
print broj_odgovora
Zadatak 54. Izračunajte broj odgovora u uzorku za koje je odgovor unaprijed znan. Iteriranjem kroz datoteku, brojač povećajte za 1 ako treći stupac ima vrijednost 1.
In [53]:
unaprijed_znan=0
for red in open('primjer.txt'):
if red.strip().split('\t')[2]=='1':
unaprijed_znan+=1
print unaprijed_znan
Zadatak 55. Izračunajte broj točnih odgovora za koje je odgovor unaprijed znan. Iteriranjem kroz datoteku, brojač povećajte za 1 ako treći stupac ima vrijednost 1 i ako četvrti stupac ima vrijednost 1.
In [54]:
tocni_odgovori=0
for red in open('primjer.txt'):
if red.strip().split('\t')[2]=='1' and red.strip().split('\t')[3]=='1':
tocni_odgovori+=1
print tocni_odgovori
Zadatak 56. Izračunajte postotak točnih odgovora. Iteriranjem kroz datoteku, izračunajte broj svih odgovora (redovi u datoteci) i broj točnih odgovora (četvrti stupac ima vrijednost 1). Ispišite postotak točnih odgovora.
In [55]:
broj_odgovora=0
tocni_odgovori=0
for red in open('primjer.txt'):
broj_odgovora+=1
if red.strip().split('\t')[3]=='1':
tocni_odgovori+=1
print float(tocni_odgovori)/broj_odgovora*100
Zadatak 57. Izračunajte postotak točnih odgovora korisnika s identifikatorom 9 s obzirom na njegove sve odgovore.
In [56]:
broj_odgovora_9=0
tocni_odgovori_9=0
for red in open('primjer.txt'):
if red.strip().split('\t')[1]=='9':
broj_odgovora_9+=1
if red.strip().split('\t')[3]=='1':
tocni_odgovori_9+=1
print float(tocni_odgovori_9)/broj_odgovora_9*100
Proučite sadržaj datoteka hr.txt i en.txt. Datoteke su kodirane UTF-8 oblikom kodiranja, jedna predstavlja uzorak teksta pisanog hrvatskim, druga uzorak teksta pisanog engleskim jezikom. Sljedeće zadatke radite nad tim podacima.
Zadatak 58. Tekst iz datoteke hr.txt pročitajte i dekodirajte te prvih 1000 znakova zapišite u datoteku hr_iso_1000.txt koristeći ISO-8859-2 kodiranje te u datoteku hr_utf_1000.txt koristeći UTF-8 kodiranje. Izračunajte broj znakova bez dekodiranja u obje nove datoteke te provjerite je li on identičan. Ponovite isto, no ovaj put dekodirajući tekst.
In [57]:
hr_tekst=open('hr.txt').read().decode('utf8')
odsjecak=hr_tekst[:1000]
dat_utf=open('hr_utf_1000.txt','w')
dat_utf.write(odsjecak.encode('utf8'))
dat_utf.close()
dat_iso=open('hr_iso_1000.txt','w')
dat_iso.write(odsjecak.encode('iso-8859-2'))
dat_iso.close()
print len(open('hr_utf_1000.txt').read())
print len(open('hr_iso_1000.txt').read())
print len(open('hr_utf_1000.txt').read().decode('utf8'))
print len(open('hr_iso_1000.txt').read().decode('iso-8859-2'))
print open('hr_utf_1000.txt').read()==open('hr_iso_1000.txt').read()
print open('hr_utf_1000.txt').read().decode('utf8')==open('hr_iso_1000.txt').read().decode('iso-8859-2')
Zadatak 59. Dalje radite nad datotekama hr.txt i en.txt. Izračunajte broj redaka u svakoj od datoteka iteriranjem kroz svaki red.
In [60]:
hr_br_redova=0
en_br_redova=0
for red in open('hr.txt'):
hr_br_redova+=1
for red in open('en.txt'):
en_br_redova+=1
print 'broj redova u hr je '+str(hr_br_redova)+', a u en je '+str(en_br_redova)
Zadatak 60. Izračunajte broj znakova u svakoj od datoteka. Pazite da ispravno dekodirate tekst prije izračuna njegove duljine.
In [63]:
hr_tekst=open('hr.txt').read().decode('utf8')
en_tekst=open('en.txt').read().decode('utf8')
hr_br_znakova=len(hr_tekst)
en_br_znakova=len(en_tekst)
print 'broj znakova u hr je '+str(hr_br_znakova)+', a u en je '+str(en_br_znakova)
Zadatak 61. Izračunajte broj znakova razmaka i prelazaka u novi red te pretpostavite broj riječi u svakom dokumentu. Izračun broja traženih znakova provedite iteriranjem kroz svaki znak.
In [64]:
hr_br_rijeci=0
en_br_rijeci=0
for znak in hr_tekst:
if znak in ' \n':
hr_br_rijeci+=1
for znak in en_tekst:
if znak in ' \n':
en_br_rijeci+=1
print 'procjena broja riječi u hr je '+str(hr_br_rijeci)+', a u en je '+str(en_br_rijeci)
Zadatak 62. Izračunajte procjenu prosječne duljine riječi u svakom uzorku ((broj_znakova-broj_rijeci)/broj_rijeci).
In [65]:
print 'procjena prosječne duljine riječi u hr je '+str(float(hr_br_znakova-hr_br_rijeci)/hr_br_rijeci)
print 'procjena prosječne duljine riječi u en je '+str(float(en_br_znakova-en_br_rijeci)/en_br_rijeci)
Zadatak 63. Izračunajte broj pojava svakog samoglasnika u svakom od tekstnih uzoraka. Izvršite cijeli izračun jednom iteracijom po datoteci kroz svaki znak pojedinog niza znakova.
In [66]:
hr_br_a=0
hr_br_e=0
hr_br_i=0
hr_br_o=0
hr_br_u=0
en_br_a=0
en_br_e=0
en_br_i=0
en_br_o=0
en_br_u=0
for znak in hr_tekst.lower():
if znak=='a':
hr_br_a+=1
elif znak=='e':
hr_br_e+=1
elif znak=='i':
hr_br_i+=1
elif znak=='o':
hr_br_o+=1
elif znak=='u':
hr_br_u+=1
print 'hr a '+str(hr_br_a)
print 'hr e '+str(hr_br_e)
print 'hr i '+str(hr_br_i)
print 'hr o '+str(hr_br_o)
print 'hr u '+str(hr_br_u)
hr_br_sam=float(hr_br_a+hr_br_e+hr_br_i+hr_br_o+hr_br_u)
print 'hr a '+str(hr_br_a/hr_br_sam)
print 'hr e '+str(hr_br_e/hr_br_sam)
print 'hr i '+str(hr_br_i/hr_br_sam)
print 'hr o '+str(hr_br_o/hr_br_sam)
print 'hr u '+str(hr_br_u/hr_br_sam)
for znak in en_tekst.lower():
if znak=='a':
en_br_a+=1
elif znak=='e':
en_br_e+=1
elif znak=='i':
en_br_i+=1
elif znak=='o':
en_br_o+=1
elif znak=='u':
en_br_u+=1
print 'en a '+str(en_br_a)
print 'en e '+str(en_br_e)
print 'en i '+str(en_br_i)
print 'en o '+str(en_br_o)
print 'en u '+str(en_br_u)
en_br_sam=float(en_br_a+en_br_e+en_br_i+en_br_o+en_br_u)
print 'en a '+str(en_br_a/en_br_sam)
print 'en e '+str(en_br_e/en_br_sam)
print 'en i '+str(en_br_i/en_br_sam)
print 'en o '+str(en_br_o/en_br_sam)
print 'en u '+str(en_br_u/en_br_sam)
Zadatke rješavajte na datotekama hr.txt i en.txt.
Zadatak 64. Regularnim izrazom izračunajte broj pojava samoglasnika u svakoj datoteci.
In [67]:
import re
hr=open('hr.txt').read().decode('utf8').lower()
en=open('en.txt').read().decode('utf8').lower()
print len(re.findall(r'[aeiou]',hr))
print len(re.findall(r'[aeiou]',en))
Zadatak 65. Regularnim izrazom izračunajte broj pojava jednog ili više samoglasnika u svakoj datoteci.
In [68]:
import re
hr=open('hr.txt').read().decode('utf8').lower()
en=open('en.txt').read().decode('utf8').lower()
print len(re.findall(r'[aeiou]+',hr))
print len(re.findall(r'[aeiou]+',en))
Zadatak 66. Regularnim izrazom izračunajte broj pojava znamenki u svakoj datoteci.
In [69]:
import re
hr=open('hr.txt').read().decode('utf8').lower()
en=open('en.txt').read().decode('utf8').lower()
print len(re.findall(r'\d',hr))
print len(re.findall(r'\d',en))
Zadatak 67. Regularnim izrazom izračunajte broj pojava jedne ili više znamenki u svakoj datoteci.
In [70]:
import re
hr=open('hr.txt').read().decode('utf8').lower()
en=open('en.txt').read().decode('utf8').lower()
print len(re.findall(r'\d+',hr))
print len(re.findall(r'\d+',en))
Zadatak 68. Regularnim izrazom izračunajte broj riječi u svakoj od datoteka, sve znakove prethodno pretvorite u mala slova.
In [71]:
import re
hr=open('hr.txt').read().decode('utf8').lower()
en=open('en.txt').read().decode('utf8').lower()
hr_rijeci=re.findall(r'\w+',hr,re.UNICODE)
en_rijeci=re.findall(r'\w+',en,re.UNICODE)
print len(hr_rijeci)
print len(en_rijeci)
Zadatke rješavajte na datotekama hr.txt i en.txt.
Zadatak 69. Stvorite prazni rječnik, pridružite mu više parova (ključ, vrijednost) različitih tipova podataka. Ispišite sve ključeve te potom sve vrijednosti iz stvorenog rječnika.
In [72]:
rjecnik={'a':6788,'b':'neki tekst',999:1.5,0.1:'jedan'}
print rjecnik
Zadatak 70. Izračunajte broj pojava svakog samoglasnika u datoteci hr.txt te u datoteci en.txt.
In [73]:
hr_tekst=open('hr.txt').read().decode('utf8')
en_tekst=open('en.txt').read().decode('utf8')
hr_frek_samogl={}
en_frek_samogl={}
for znak in hr_tekst.lower():
if znak in 'aeiou':
hr_frek_samogl[znak]=hr_frek_samogl.get(znak,0)+1
print hr_frek_samogl
for znak in en_tekst.lower():
if znak in 'aeiou':
en_frek_samogl[znak]=en_frek_samogl.get(znak,0)+1
print en_frek_samogl
Zadatak 71. Izračunajte dvije frekvencijske distribucije znakova, jednu za datoteku hr.txt, drugu za datoteku en.txt.
In [75]:
hr_tekst=open('hr.txt').read().decode('utf8')
en_tekst=open('en.txt').read().decode('utf8')
hr_frek_znak={}
en_frek_znak={}
for znak in hr_tekst.lower():
hr_frek_znak[znak]=hr_frek_znak.get(znak,0)+1
print len(hr_frek_znak)
print hr_frek_znak
for znak in en_tekst.lower():
en_frek_znak[znak]=en_frek_znak.get(znak,0)+1
print len(en_frek_znak)
print en_frek_znak
Zadatak 72. Ispišite na ekran dvadeset najfrekventnijih znakova iz svakog od rječnika iz prethodnog zadatka s pripadajućim frekvencijama. Usporedite distribucije.
In [76]:
hr_sort_znak=sorted(hr_frek_znak.items(),key=lambda x:-x[1])
print hr_sort_znak[:20]
en_sort_znak=sorted(en_frek_znak.items(),key=lambda x:-x[1])
print en_sort_znak[:20]
Zadatak 73. Ispišite sve znakove iz hrvatske distribucije koji su među 20 najčešćih, a nisu među 20 najčešćih engleskih. Inicijaliziraj listu 20 najčešćih znakova u hrvatskom jeziku. Iteriranjem kroz frekvencijsku distribuciju hrvatskih znakova, u listu dodajte prvih 20 znakova iz sortirane frekvencijske distribucije. Isto napravite i za 20 najčešćih znakova u engleskom jeziku. Zatim, iteriranjem kroz listu 20 najčešćih znakova u hrvatskom jeziku, provjerite nalazi li se u listi 20 najčešćih znakova u engleskom jeziku. Ako se ne nalazi, ispišite znak. Isto učinite i iteriranjem kroz listu 20 najčešćih znakova u engleskom jeziku.
In [86]:
hr20=[]
en20=[]
for par in hr_sort_znak[:20]:
hr20.append(par[0])
for par in en_sort_znak[:20]:
en20.append(par[0])
for znak in hr20:
if znak not in en20:
print 'znak in hr20 a ne u en20:',znak
for znak in en20:
if znak not in hr20:
print 'znak in en20 a ne u hr20:',znak
Zadatak 74. Izračunajte frekvencijsku distribuciju riječi u svakoj od datoteka koristeći regularne izraze i rječnike.
In [89]:
hr_fd_rijeci={}
en_fd_rijeci={}
for rijec in hr_rijeci:
hr_fd_rijeci[rijec]=hr_fd_rijeci.get(rijec,0)+1
for rijec in en_rijeci:
en_fd_rijeci[rijec]=en_fd_rijeci.get(rijec,0)+1
print hr_fd_rijeci['ali']
print en_fd_rijeci['but']
Zadatak 75. Ispišite 20 najčešćih riječi u svakoj od datoteka. O kakvim se riječima radi?
In [90]:
print sorted(hr_fd_rijeci.items(),key=lambda x:-x[1])[:20]
print sorted(en_fd_rijeci.items(),key=lambda x:-x[1])[:20]
Zadatak 76. U svakoj od datoteka izračunajte tzv. omjer broja različnica (različitih riječi u tekstu) i pojavnica (riječi u tekstu). Broj različnica možete dobiti računanjem duljine rječnika izračunatog u prethodnom zadatku. U kojem je jeziku taj omjer veći? Zašto?
In [91]:
print float(len(hr_fd_rijeci))/len(hr_rijeci)
print float(len(en_fd_rijeci))/len(en_rijeci)
Funkcije rješavajte u zasebnoj datoteci funkcije.py, a ostale zadatke u tekstnoj datoteci. Kod koji nije dio funkcija pišite u glavnom programu (unutar selekcije if __name__=='__main__':).
Zadatak 77. Napišite funkciju uvecaj_za_jedan() koja kao argument prima brojčanu vrijednost te vraća tu vrijednost uvećanu za 1. Provjerite funkciju u glavnom programu.
In [94]:
def uvecaj_za_jedan(broj):
return broj+1
if __name__=='__main__':
print uvecaj_za_jedan(5)
print uvecaj_za_jedan(78.9)
Zadatak 78. Napišite funkciju je_li_duljina_parna() koja kao argument prima iterabilni objekt (niz znakova, listu, rječnik) te vraća logičku vrijednost je li duljina parna ili ne. Provjerite funkciju u glavnom programu nad nizom znakova, listom i rječnikom.
In [96]:
def je_li_duljina_parna(iterabilni):
return len(iterabilni)%2==0
if __name__=='__main__':
print je_li_duljina_parna('neki niz znakova')
print je_li_duljina_parna([1,2,3,4,'pet'])
Zadatak 79. Napišite funkciju broj_samoglasnika() koja kao argument prima Unicode niz znakova te vraća broj samoglasnika u nizu znakova. Provjerite funkciju u glavnom programu.
In [98]:
def broj_samoglasnika(niz):
rezultat=0
for znak in niz:
if znak.lower() in 'aeiou':
rezultat+=1
return rezultat
if __name__=='__main__':
print broj_samoglasnika('Ovo je neki niz znakova.')
Zadatak 80. Napišite funkciju frekvencijska_distribucija() koja kao argument prima sekvencu te vraća rječnik koji predstavlja frekvencijsku distribuciju događaja iz sekvence.
In [101]:
def frekvencijska_distribucija(sekvenca):
rjecnik={}
for dogadjaj in sekvenca:
rjecnik[dogadjaj]=rjecnik.get(dogadjaj,0)+1
return rjecnik
if __name__=='__main__':
print frekvencijska_distribucija('Ovo je neki niz znakova.')
print frekvencijska_distribucija([1,1,1,1,2,3,3,4,4,4,4,4,4,4])
Zadatak 81. Napišite funkciju sortiraj_distribuciju() koja kao argument prima rječnik te vraća listu parova tog rječnika sortiranu prema drugoj vrijednosti unazadno.
In [102]:
def sortiraj_distribuciju(rjecnik):
return sorted(rjecnik.items(),key=lambda x:-x[1])
if __name__=='__main__':
print sortiraj_distribuciju(frekvencijska_distribucija('Ovo je neki niz znakova.'))
print sortiraj_distribuciju(frekvencijska_distribucija([1,1,1,1,2,3,3,4,4,4,4,4,4,4]))
Zadatak 82. Napišite funkciju opojavnici() koja kao argument prima Unicode niz znakova, a vraća listu pojavncia. Isprobajte funkciju u glavnom programu.
In [104]:
def opojavnici(niz):
import re
return re.findall(r'\w+',niz,re.UNICODE)
if __name__=='__main__':
print opojavnici('Ovo je neki niz znakova.')
Zadatak 83. U glavnom programu uključite modul funkcije. Pomoću funkcije frekvencijska_distribucija() izračunajte frekvencijsku distribuciju znakova pretvorenih u mala slova iz datoteka hr.txt i en.txt. Ispišite sortirane distribucije te uočite razlike u frekvenciji znakova svakog jezika.
In [107]:
import funkcije
hr=open('hr.txt').read().decode('utf8').lower()
en=open('en.txt').read().decode('utf8').lower()
hr_frek=funkcije.frekvencijska_distribucija(hr)
en_frek=funkcije.frekvencijska_distribucija(en)
print funkcije.sortiraj_distribuciju(hr_frek)[:20]
print funkcije.sortiraj_distribuciju(en_frek)[:20]
Zadatak 84. Izračunajte frekvencijsku distribuciju pojavnica pretvorenih u mala slova iz datoteka hr.txt i en.txt. Ispišite prvih 50 zapisa sortirane distribucije. O kakvim se riječima radi?
In [109]:
hr_pojavnice=[]
hr_pojavnice=funkcije.opojavnici(hr)
en_pojavnice=[]
en_pojavnice=funkcije.opojavnici(en)
hr_sortirano=funkcije.sortiraj_distribuciju((funkcije.frekvencijska_distribucija((funkcije.opojavnici(hr)))))
en_sortirano=funkcije.sortiraj_distribuciju((funkcije.frekvencijska_distribucija((funkcije.opojavnici(en)))))
print hr_sortirano[:50]
print en_sortirano[:50]
Zadatak 85. Izračunajte na temelju svake sortirane distribucije pojavnica iz prošlog zadatka koliki postotak pojavnica u tekstu tvori 20% najčešćih razčičnica. Izračunajte koliko riječi čini 20% različnica te broj pretvorite u cijeli broj. To će biti broj puta koliko će se vršiti iteracija. Iteriranjem kroz sortiranu frekvencijsku distribuciju pojavnica (za već utvrđeni broj puta), zbrojite vrijednosti. Za rezultat, dobiveni broj podijelite sa sveukupnim brojem pojavnica.
In [110]:
hr_br20=int(len(hr_sortirano)*0.2)
en_br20=int(len(en_sortirano)*0.2)
hr_br20_pojava=0
en_br20_pojava=0
for par in hr_sortirano[:hr_br20]:
hr_br20_pojava+=par[1]
hr_rez=float(hr_br20_pojava)/len(hr_pojavnice)
for par in en_sortirano[:en_br20]:
en_br20_pojava+=par[1]
en_rez=float(en_br20_pojava)/len(en_pojavnice)
print hr_rez
print en_rez