You are on page 1of 34

1.

Osnove programiranja
1.1. Python
Python (https://www.python.org) je visokorazinski (High-level programming language),
interpretirani (Interpreter (computing)) i dinamiki tipizirani (Dynamic programming
language) programski jezik (Programming language, programski jezici) ope namjene.

Kod rada s visokorazinskim jezicima ne treba brinuti o nainu izvoenja koda na raunalu zbog
visokog stupnja apstrakcije od detalja rada raunala. Na primjer, kod pisanja raunalnog koda
koji sadrava raunske operacije s brojevima, ne treba brinuti jesu li brojevi 16-bitne ili 32-bitne
cjelobrojne vrijednosti pohranjene na raunalu. Osim to nije potrebno poznavati podatkovne
strukture, kod visokorazinskih jezika mogue je vriti sloenije operacije nad sloenijim
podatkovnim strukturama. Takvi jezici mogu u naredbama koristiti elemente prirodnog jezika,
to ih ini jednostavnijima za upotrebu od niskorazinskih jezika. Za usporedbu, instrukcije kod
strojnih jezika i niskorazinskih jezika slinih strojnim jezicima sastoje se od nula i jedinica te je
potrebno poznavanje arhitekture raunala.

Python je interpretirani jezik, to znai da se tijekom pokretanja programa prevodi naredba po


naredba na raunalu razumljiv jezik, a to vre interpreteri. Za usporedbu, postoje drugi jezici koji
prevode cijeli program na strojni kod prije njihova izvravanja, a to vre kompajleri ili
kompilatori.

Kod dinamiki tipiziranog jezika nije potrebno unaprijed definirati tipove podataka, ve se
prilikom dodjeljivanja vrijednosti varijabli odreuje kojem tipu podataka pripada.

Python je dobio naziv prema britanskoj televizijskoj seriji "Letei cirkus Montyja Pythona"
(Why is it called Python?) iz 60-ih i 70-ih godina.

1.2. Osnovni pojmovi


Python poznaje razliite tipove podataka (Data type) kao to su cjelobrojni, realni, logiki,
nizovi znakova i ostali. Tipovi podataka definiraju koje se operacije mogu vriti nad odreenim
tipom podataka te kako se vrijednosti odreenih tipova podataka pohranjuju na raunalu. Na
primjer, u sluaju cjelobrojnih tipova podataka, definirano je kako se navedeni tip podatka
pohranjuje u raunalu, koliko je raunalne memorije potrebno za pohranu, koja je najmanja
vrijednost koju tip podatka moe poprimiti, koja je najvea vrijednost koju moe poprimiti, koje
aritmetike operacije se mogu vriti nad navedenim tipom podataka i sl. Python omoguava
programerima da definiraju vlastite tipove podataka, uglavnom kombinirajui razliite elemente
drugih tipova podataka te definirajui dozvoljene operacije koje se smiju vriti nad novim tipom
podatka.

Varijabla (Variable (computer science))) je lokacija na memoriji raunala u koju se moe


pohraniti neka vrijednost. Upravo zbog odvajanja naziva i sadraja, preko naziva varijable,
program dodijeljenu vrijednost moe proitati, prikazati i upotrijebiti u dozvoljenim operacijama.
Na primjer, vrijednost 1234567890 pohranjujemo u varijablu s nazivom broj. Sljedei puta kada
elimo upotrijebiti navedenu vrijednost, moemo to uiniti preko naziva varijable broj.

Objektno-orijentirano programiranje (Object-oriented programming) temelji se na konceptu


objekata (Object (computer science)), koji su ustvari varijable. Objekt posjeduje svojstva
(Attribute (computing)) i metode (Method (computer programming)). Svojstva su u stvari podaci
s nazivom, vrijednostima i ogranienjima koji odreeni tip podatka namee, a metode su
dozvoljene operacije koje se mogu vriti nad tim podacima. Svi objekti istog tipa pripadaju istoj
klasi (Class (computer programming)), koja sadri informacije o tipovima podataka i
dozvoljenim operacijama za odreenu klasu. Svaki objekt je instanca odreene klase, a instance
su ustvari podaci koji pripadaju pojedinim objektima. Raunalni programi piu se kao skup
objekata koji su u meusobnoj interakciji. Raunalni program moe sadravati vie instanci iste
klase, pa se na taj nain mogu upotrebljavati iste procedure na razliitim skupovima podataka.

1.3. Primjer modela fizikog objekta


Fiziki objekt bicikl pripada klasi svih bicikala. Instanca klase je konkretan bicikl. Kada
imamo Nikolin, Tanjin, Majin i Petrin bicikl, imamo etiri instance jednog objekta bicikla. Klasa
je nacrt svih objekata i instanci navedene klase, odnosno zajednika svojstva svih pripadnika
klase, u naem sluaju svih bicikala na svijetu. Svojstva bicikla su tip, boja, veliina, veliina
kotaa, tip konica i sl. Metode koje pripadaju objektu bicikl su kreni, ubrzaj, stani, koi, prebaci
u viu brzinu, prebaci u niu brzinu i sl.

Objekt: bicikl

Klase: svojstva bicikla i operacije koje se mogu vriti biciklom

Instanca klase: Nikolin bicikl

Svojstva: tip, boja, veliina, veliina kotaa, tip konica

Metode: kreni, ubrzaj, stani, koi, prebaci u viu brzinu, prebaci u niu brzinu

1.4. Primjer objekta


Niz znakova je tip podataka string. U Pythonu se koristi naredba print za ispisivanje.

In [10]:
print "Hello world"
Hello world
In [11]:
s="Hello world"
In [12]:
print s
Hello world
In [13]:
print s.upper()
HELLO WORLD
In [14]:
print s.replace("o","O")
HellO wOrld

Ime varijable je s, a vrijednost varijable je Hello world. Navedeno ime varijable s


navedenom vrijednosti te varijable je instanca klase.

s je referenca na objekt tipa string tj. niz znakova.

upper() i replace() su metode koje se mogu koristiti nad objektima tipa string, pa tako onda i
nad varijablom s.

Svojstvo objekta je njegov sadraj, odnosno vrijednost varijable.

replace() je ime metode koja prima dva argumenta (prvi je podniz koji planiramo zamijeniti,
a drugi podniz kojim emo zamijeniti prvi argument).

Klasa stringa definira da niz znakova mora imati alfanumerike znakove s bjelinama, crticama i
ostalim znakovima, ali ne moe sadravati npr. sliku. Takoer definira sve metode koje se mogu
upotrijebiti nad tom klasom, dok su navedene metode samo dvije od svih moguih metoda.

1.5. Jednostavni tipovi podataka


Python poznaje sljedee jednostavne tipove podataka:

cjelobrojni tip podataka (integer, int)


realni tip podataka (floating-point number, float)
niz znakova (string, str)
logika vrijednost (boolelan).

1.5.1. Cjelobrojni tip podataka

Brojevi pripadaju nepromjenjivim tipovima podataka. U Pythonu se prije razlomakog dijela


broja koristi toka, a ne zarez.

Cjelobrojni tipovi podataka (Integer (computer science)) su pozitivni ili negativni cijeli brojevi
bez decimalne toke. Za pohranjivanje cjelobrojnog tipa podataka potrebno je 32 bita.

In [15]:
2
Out[15]:
2
In [16]:
-7897
Out[16]:
-7897

Cijeli brojevi mogu se prikazati od -9 223 372 036 854 775 808 do 9 223 372 036 854 775 807.
U sluaju da postoji potreba za brojevima izvan navedenog raspona, mogu se pohraniti u cijele
brojeve u dugom zapisu s oznakom L. U tom sluaju je ogranienje broja jedino koliina radne
memorije raunala.

1.5.2. Realni tip podataka

Realne vrijednosti su pozitivni ili negativni realni brojevi s pominom (kliznom) tokom
(floating-point number) (Floating point) koji odvaja cjelobrojnu vrijednost broja i razlomaki
dio. Brojevi s pominom tokom mogu se prikazati na dva naina: klasini nain s tokom ili
znanstveni nain prikazivanja brojeva sa slovom E. Za pohranjivanje realnog tipa podataka
potrebno je 64 bita.

In [17]:
3.4
Out[17]:
3.4
In [18]:
-7213.6241
Out[18]:
-7213.6241
In [19]:
2.66e-23
Out[19]:
2.66e-23

Realni brojevi mogu se prikazati od 2,2250738585072014e-308 do 1,7976931348623157e+308.


Kad je rezultat operacije nad brojevima prevelik za prikaz u Pythonu, prikae se vrijednost inf.
Slino tome, kad je negativan broj manji od najmanjeg broja koji se moe prikazati u Pythonu,
prikae se vrijednost 0.0.

1.5.3. Niz znakova

Niz znakova (string) (String (computer science))) pripadaju nepromjenjivim tipovima podataka
koje moemo definirati kao jedan ili vie znakova omeenih jednostrukim (') ili dvostrukim
navodnicima (").Ako je niz znakova zapoet s jednostrukim navodnicima, tada mora i zavravati
jednostrukim navodnicima. Isto vrijedi i za dvostruke navodnike. Mogue je kombinirati
jednostruke i dvostruke navodnike. Ako je niz znakova zapoet s jednostrukim navodnicima,
moe sadravati jedan ili vie dvostruki navodnik. Takoer vrijedi da niz znakova zapoet
dvostrukim navodnicima moe sadravati jedan ili vie jednostruki navodnik.

In [20]:
'Ovo je niz znakova.'
Out[20]:
'Ovo je niz znakova.'
In [21]:
"Ovo je isto niz znakova."
Out[21]:
'Ovo je isto niz znakova.'
In [22]:
"Ovo je 'niz znakova' u kojem se nalazi 'kombinacija' navodnika."
Out[22]:
"Ovo je 'niz znakova' u kojem se nalazi 'kombinacija' navodnika."

Mogue je navesti prazan niz znakova navoenjem dva jednostruka ili dvostruka navodnika za
redom. Vrijednost toga niza znakova je prazan niz duljine 1:

In [23]:
''
Out[23]:
''
In [24]:
""
Out[24]:
''

Python razlikuje znamenke pohranjene kao nizove znakova:

In [25]:
'3.14'
Out[25]:
'3.14'

kao, u ovom sluaju realnu vrijednost:

In [26]:
3.14
Out[26]:
3.14

1.5.3.1. Indeksiranje znakova

Unutar niza znakova je mogue dohvatiti (indeksirati ili adresirati) podniz putem uglatih zagrada
i indeksa. Indeksiranje poinje nultim indeksom (zero-based numbering) (Zero-based
numbering) te zavrava n-1 indeksom duine niza. Indeks mora biti cjelobrojna vrijednost.
Indeksirati se moe jedan, u ovom primjeru prvi znak:

In [27]:
'Ovo je niz.'[0]
Out[27]:
'O'

Ako se niz pohrani u varijablu, moe se indeksirati preko naziva varijable:


In [28]:
niz='Ovo je niz.'
niz[0]
Out[28]:
'O'

Indeksirati se moe i vie znakova navodei raspon indeksa tako da se navede poetni indeks od
kojeg se kree, dvotoje te zavrni indeks do kojeg zavrava podniz:

In [29]:
niz[4:6]
Out[29]:
'je'

Ako se navodei raspon indeksa izostavi zavrni indeks u Pythonu, program e naredbu obraditi
kao da je umjesto izostavljenog indeksa naveden posljednji indeks niza:

In [30]:
niz[4:]
Out[30]:
'je niz.'

Takoer, ako se navodei raspon indeksa izostavi poetni indeks, program e naredbu obraditi
kao da je umjesto izostavljenog indeksa naveden prvi indeks niza:

In [31]:
niz[:6]
Out[31]:
'Ovo je'

Mogue je indeksirati i posljednji znak negativnom cjelobrojnom vrijednosti indeksa:

In [32]:
niz[-1]
Out[32]:
'.'

Kod indeksiranja je mogue kombinirati pozitivne i negativne vrijednosti indeksa, dok god se
poetni indeks nalazi na indeksnom mjestu prije zavrnog indeksa. U suprotnom program vraa
prazan niz.

In [33]:
niz[7:-1]
Out[33]:
'niz'
In [34]:
niz[7:-5]
Out[34]:
''
1.5.3.2. Posebni znakovi

Ako postoji potreba za unosom novog retka, potrebno je rabiti znak \n. Razlika izmeu unosa i
ispisa bit e vidljiva prilikom koritenja print naredbe:

In [35]:
print 'Prvi red niza.\nDrugi red niza.'
Prvi red niza.
Drugi red niza.

Osim posebnog znaka za prelazak u novi red, u Pythonu postoji jo nekoliko korisnih nizova
znakova posebnog znaenja, koji se prikazuju pomou obrnute kose crte (\):

Unicode
Niz Opis
kod
\ obrnuta kosa crta (\) \u005C
jednostruki navodnik ('), koji se moe koristiti unutar niza znakova zapoetog \u0027
\'
jednostrukim navodnicima
dvostruki navodnik ("), koji se moe koristiti unutar niza znakova zapoetog \u0022
\"
dvostrukim navodnicima
\n ASCII Linefeed (LF) (novi red) \u000A
\r ASCII Carriage Return (CR) (povrat glave pisaa na poetak reda) \u000D
\t ASCII Horizontal Tab (TAB) (vodoravni tabulator) \u0009
\v ASCII Vertical Tab (VT) (okomiti tabulator) \u000B

1.5.4. Logika vrijednost

Logike vrijednosti ili Booleove vrijednosti (Boolean data type) poprimaju samo dvije mogue
vrijednosti, koje se prikazuju pomou konstanti True i False. Logike vrijednosti obino su
rezultat usporeivanja:

In [36]:
3<7
Out[36]:
True
In [37]:
4.5>9
Out[37]:
False

Zadatke moete nai ovdje: Zadaci

1.6. Varijable
Varijabla je mjesto pohrane kojem je dodijeljen naziv u kojem program moe pohraniti
dodijeljenu vrijednost te je proitati i prikazati. Svaki programski jezik ima razliita pravila kako
se varijable mogu nazivati, unositi i koristiti. Varijabla poprima odreenu vrijednost naredbom
dodjeljivanja. Naredba dodjeljivanja vri se operatorom =:

<naziv varijable> = <vrijednost>

1.6.1. Imenovanje varijabli

Prilikom imenovanja varijabli treba imati na umu sljedee:

Naziv varijable moe sadravati slova engleske abecede, znamenke i podcrte.


Python razlikuje velika i mala slova. Nije isto imenovati varijablu "broj", "Broj",
"BROJ", "BrOj" i sl.
Naziv varijable mora poeti sa slovom ili podcrtom. Ne moe poeti sa znamenkom.
Postoje tzv. rezervirane rijei koje ine sintaksu programskog jezika i koje se ne mogu
koristiti kao nazivi varijabli. To su:

['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del',


'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global',
'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print',
'raise', 'return', 'try', 'while', 'with', 'yield']

None se takoer ne moe koristiti za naziv varijable, iako nije rezervirana rije, ve
konstanta.

1.6.2. Dodjeljivanje vrijednosti varijabli

Prilikom deklariranja varijable ne navodi se vrsta podataka. Vrijednost koja je navedena prilikom
deklariranja varijable odreuje kojem tipu podataka pripada varijabla. Vrijednost varijable je
mogue mijenjati tijekom izvoenja programa. Takoer je deklariranjem varijable mogue
mijenjati tako i tip podatka varijable. Kako bi se varijabla mogla koristiti tijekom izvoenja
programa, mora biti deklarirana. Varijabla se moe deklarirati dodjeljivanjem neke vrijednosti.
Na sljedei nain pohranjuje se cjelobrojna vrijednost 9 u varijablu nazvanu broj1:

In [38]:
broj1=9
print broj1
9

Realna vrijednost -16.85 pohranjuje se u varijablu nazvanu broj2 na sljedei nain:

In [39]:
broj2=-16.85
print broj2
-16.85
Na sljedei nain se niz znakova Ovo je niz pohranjuje u varijablu nazvanu niz1:

In [40]:
niz1='Ovo je niz'
print niz1
Ovo je niz

Varijabla se moe deklarirati i navoenjem praznine, ime je definiran tip podatka varijable, a
trenutni sadraj vrijednosti je prazan. Niz znakova se deklarira navoenjem dva jednostruka ili
dvostruka navodnika za redom. Tako inicijaliziramo varijablu ija vrijednost je prazna, a tip
podataka je niz znakova:

In [41]:
prazan_niz1=''
print prazan_niz1

ili

In [42]:
prazan_niz2=""
print prazan_niz2

Dva tipa podataka koja su kasnije obraena, su lista i rjenik, koji se takoer mogu deklarirati
odnosno inicijalizirati bez sadravanja vrijednosti.

In [43]:
lista=[]
print lista
[]
In [44]:
rjecnik={}
print rjecnik
{}

Ako ne znamo koju vrijednost i tip podataka e varijabla sadravati, deklarirat emo je
konstantom None:

In [45]:
var=None
print var
None

1.7. Operatori
Python podrava sljedee tipove operatora:

aritmetiki operatori
operatori usporeivanja
operatori pridruivanja
operatori lanstva

1.7.1. Aritmetiki operatori

Aritmetiki operatori su:

operator zbrajanja (+)


operator oduzimanja (-)
operator mnoenja (*)
operator dijeljenja (/)
operator ostatka cjelobrojnog dijeljenja (%)
eksponent (**)

1.7.1.1. Operator zbrajanja

Operator zbrajanja (+) zbraja vrijednosti s desne i lijeve strane operatora.

In [46]:
a=20
b=10
print a+b
30

1.7.1.2. Operator oduzimanja

Operator oduzimanja (-) oduzima desni operand od lijevog.

In [47]:
a=20
b=10
print a-b+3
13

1.7.1.3. Operator mnoenja

Operator mnoenja (*) mnoi vrijednosti s desne i lijeve strane operatora.

In [48]:
a=20
b=10
print a*b
200

1.7.1.4. Operator dijeljenja

Operator dijeljenja (/) vri cjelobrojno dijeljenje tako da dijeli lijevi operand od desnog
operanda.
In [49]:
a=20
b=10
print a/b
2
In [50]:
c=7
d=2
print c/d
3

Realno dijeljenje se vri na dva naina. Jedan nain je da jedan operand ima cjelobrojnu
vrijednost.

In [51]:
e=7
f=2.0
print e/f
3.5

Drugi nain je koritenje funkcije float() koja pretvara cijeli broj u realni.

In [52]:
c=7
d=2
print float(c)/d
3.5
In [53]:
print c/float(d)
3.5

1.7.1.5. Operator ostatka cjelobrojnog dijeljenja

Operator ostatka cjelobrojnog dijeljenja (%) dijeli lijevi operand s desnim te vraa ostatak
dijeljenja.

In [54]:
c=7
d=2
print c%d
1

1.7.1.6. Eksponent

Eksponent (**) vri eksponencijalnu funkciju, gdje je lijevi operand baza, a desni eksponent.

In [55]:
b=10
d=2
print b**2
100
1.7.2. Operatori usporeivanja

Operatori usporeivanja usporeuju vrijednosti na obje strane te odluuju o njihovoj relaciji.


Operatori usporeivanja su:

operator ==
operator !=
operator >
operator <
operator >=
operator <=

1.7.2.1. Operator ==

Operator == usporeuje jesu li vrijednosti operanda jednake te vraa logiki tip podataka,
odnosno True kada su vrijednosti jednake, a False kada su razliite.

In [56]:
a=20
b=10
print a==b
False
In [57]:
c=7
print c==7
True

1.7.2.2. Operator !=

Operator != provjerava jesu li vrijednosti operanda razliite te vraa logiki tip podataka,
odnosno True kada su vrijednosti razliite, a False kada su jednake.

In [58]:
a=20
b=10
print a!=b
True
In [59]:
c=7
print c!=7
False

1.7.2.3. Operator >

Operator > provjerava je li vrijednost lijevog operanda vea od vrijednosti desnog operanda te
vraa logiki tip podataka, odnosno True kada je vrijednost lijevog operanda vea od vrijednosti
desnog operanda, a False kada vrijednost lijevog operanda nije vea od vrijednosti desnog
operanda.
In [60]:
a=20
b=10
print a>b
True
In [61]:
print b>a
False

1.7.2.4 Operator <

Operator < provjerava je li vrijednost lijevog operanda manja od vrijednosti desnog operanda te
vraa logiki tip podataka, odnosno True kada je vrijednost lijevog operanda manja od
vrijednosti desnog operanda, a False kada vrijednost lijevog operanda nije manja od vrijednosti
desnog operanda.

In [62]:
a=20
b=10
print a<b
False
In [63]:
print b<a
True

1.7.2.5. Operator >=

Operator >= provjerava je li vrijednost lijevog operanda vea ili jednaka vrijednosti desnog
operanda te vraa logiki tip podataka, odnosno True kada je uvjet istinit, a False kada nije.

In [64]:
a=20
b=10
print a>=b
True
In [65]:
print b>=a
False
In [66]:
c=7
print c>=7
True

1.7.2.6. Operator <=

Operator <=provjerava je li vrijednost lijevog operanda manja ili jednaka vrijednosti desnog
operanda te vraa logiki tip podataka, odnosno True kada je uvjet istinit, a False kada nije.

In [67]:
a=20
b=10
print a<=b
False
In [68]:
print b<=a
True
In [69]:
c=7
print c<=7
True

1.7.3. Operatori pridruivanja

Operatori pridruivanja dodjeljuju vrijednosti operandima ili vre operacije nad operandima:

=
+=
-=
*=
/=
%=
**=

1.7.3.1. Operator =

Operator = dodjeljuje lijevom operandu vrijednost desnog operanda.

In [70]:
c=7
print c
7

1.7.3.2. Operator +=

Operator += zbraja lijevom operandu vrijednost desnog operanda te rezultat dodjeljuje lijevom
operandu.

In [71]:
a=20
b=10
a+=b
print a
print b
30
10

1.7.3.3. Operator -=

Operator -= oduzima lijevom operandu vrijednost desnog operanda te rezultat dodjeljuje lijevom
operandu.
In [72]:
a=20
c=7
a-=c
print a
print c
13
7

1.7.3.4. Operator *=

Operator *= mnoi desni operand s lijevim operandom te rezultat dodjeljuje lijevom operandu.

In [73]:
a=20
b=10
a*=b
print a
print b
200
10

1.7.3.5. Operator /=

Operator /= dijeli vrijednost desnog operanda s vrijednosti lijevog operanda te rezultat dodjeljuje
lijevom operandu.

In [74]:
a=20
b=10
a/=b
print a
print b
2
10

1.7.3.6. Operator %=

Operator %= vraa ostatak dijeljenja vrijednosti desnog operanda s vrijednosti lijevog operanda te
rezultat dodjeljuje lijevom operandu.

In [75]:
c=7
d=2
c%=d
print c
print d
1
2

1.7.3.7. Operator **=


Operator **= vri eksponencijalnu funkciju, gdje je lijevi operand baza, a desni eksponent.

In [76]:
c=7
d=2
c**=d
print c
print d
49
2

1.7.4. Operatori lanstva

Operatori lanstva ispituju nalazi se izraz u odreenoj sekvenci, kao to su nizovi znakova ili
liste. Operatori lanstva su:

in
not in

1.7.4.1. Operator in

Operator in ispituje nalazi se vrijednost varijable u odreenoj sekvenci te vraa logiki tip
podataka, odnosno True ako se vrijednost varijable nalazi u odreenoj sekvenci, a False ako se
ne nalazi.

In [77]:
'a' in 'Niz znakova.'
Out[77]:
True
In [78]:
'y' in "Niz znakova."
Out[78]:
False

1.7.4.2. Operator not in

Operator not in ispituje nalazi se vrijednost varijable u odreenoj sekvenci te vraa logiki tip
podataka, odnosno True ako se vrijednost varijable ne nalazi u odreenoj sekvenci, a False ako
se nalazi.

In [79]:
'a' not in 'Niz znakova.'
Out[79]:
False
In [80]:
'y' not in 'Niz znakova.'
Out[80]:
True
1.7.5. Sloeni izrazi

U Pythonu je mogue postavljati sloene izraze, odnosno izraze u kojima postoji vie od jednog
operatora.

In [81]:
2*5+2>=2**3*2
Out[81]:
False

U tom sluaju je potrebno poznavati kojim redoslijedom e se prvo izvoditi koji operator,
odnosno prioritete operatora. Slijedi lista prioriteta obraenih operatora od najvieg do najnieg:

Operator Opis
** Eksponent
*/% Operatori mnoenja, dijeljenja, ostatka cjelobrojnog dijeljenja
+- Operatori zbrajanja i oduzimanja
<= < > >= Operatori usporeivanja
<> == != Operatori jednakosti
= %= /= /= -= += *= **= Operatori pridruivanja
in, not in Operatori lanstva
not, or, and Logiki operatori

Zadatke moete nai ovdje: Zadaci

1.8. Osnovne funkcije


Funkcije su potprogrami koji primaju nula ili vie argumenata i vraaju jednu vrijednost.
Funkcije za pretvaranje tipa podataka (casting) su:

int (integer)
float (floating point numbers)
str (string)

Dodatna funkcija koja je opisana u ovom poglavlju je funkcija type().

1.8.1. Funkcija int()

Funkcija int() pretvara realni tip podatka u cjelobrojnu vrijednost ili niz znakova u kojem je
pohranjena znamenka u cjelobrojnu vrijednost.

In [82]:
int(3.7)
Out[82]:
3
In [83]:
int('3')
Out[83]:
3

1.8.2. Funkcija float()

Funkcija float() pretvara cjelobrojnu vrijednost u realni tip podatka.

In [84]:
print float(2)
2.0
In [85]:
print 7/2
3
In [86]:
print float(7)/2
3.5
In [87]:
print 7/float(2)
3.5
In [88]:
print float(7/2)
3.0

Prvo je potrebno djeljenik ili djelitelj prebaciti iz cjelobrojne vrijednosti u realni tip podatka, a
zatim izvriti dijeljenje, ako elimo dobiti razlomaki dio. Iz posljednjeg primjera vidljivo je da
se kolinik pretvara u realni tip podatka nakon cjelobrojnog dijeljenja, a on e u tom sluaju
uvijek iznositi 0.

1.8.3. Funkcija str()

Funkcija str() pretvara brojanu vrijednost u niz znakova.

In [89]:
str(7.6)
Out[89]:
'7.6'

1.8.4. Funkcija type()

Funkcija type()ne pretvara tipove podataka, ve vraa koji je tip podatka odreena vrijednost.

In [90]:
type('niz')
Out[90]:
str
In [91]:
type(2)
Out[91]:
int
In [92]:
type(5.8)
Out[92]:
float
In [93]:
type(False)
Out[93]:
bool

1.9. Rad s nizovima znakova


1.9.1. Konkatenacija
U programiranju konkatenacija niza znakova je operacija spajanja znakova iz niza znakova
navedenim redoslijedom (Concatenation). U Pythonu se konkatenacija vri operatorom =.

In [94]:
print 'dar'+'ovi'
darovi
In [95]:
niz1='Ana i Ivo'
niz2='Iva i Jan'
print niz1[:3]+niz2[-3:]
AnaJan

Konkatenacija vri samo spajanje nizova znakova. U sluaju da elimo iz prethodnog primjera
dodati razmak, veznik i razmak, potrebno je to izriito navesti.

In [96]:
niz1='Ana i Ivo'
niz2='Iva i Jan'
print niz1[:6]+niz2[-3:]
Ana i Jan

ili

In [97]:
niz1='Ana i Ivo'
niz2='Iva i Jan'
print niz1[:3]+' i '+niz2[-3:]
Ana i Jan

Kada se eli izvriti ispis nizova znakova i brojanih vrijednosti, prethodno je potrebno prebaciti
brojane vrijednosti u niz znakova funkcijom str.
In [98]:
ana=2000
luka=1995

print 'Ana je mlaa od Luke '+str(ana-luka)+' godina.'


Ana je mlaa od Luke 5 godina.

1.9.2. Odabrane metode nad nizovima znakova


Ve su ukratko ranije spomenute dvije metode nad nizovima znakova upper() i replace(). U
ovom poglavlju opisane su jo neke odabrane metode nad ovim tipom podatka:

upper()
lower()
replace()
count()
find()
strip()
split()
join().

1.9.2.1. Metoda upper()

Metoda upper() vraa niz znakova u kojem su sva slova pretvorena u velika slova, ali ne
mijenja ulazni niz znakova.

In [99]:
s='Ana i Ivo'
print s.upper()
print s
ANA I IVO
Ana i Ivo

1.9.2.2. Metoda lower()

Metoda lower() vraa niz znakova u kojem su sva slova pretvorena u mala slova, ali ne mijenja
ulazni niz znakova.

In [100]:
s="Ana i Ivo"
print s.lower()
print s
ana i ivo
Ana i Ivo

1.9.2.3. Metoda replace()


Metoda replace() vraa niz znakova u kojem se stari podniz mijenja novim podnizom, ali se ne
mijenja niz znakova nad kojim se vri metoda. Sintaksa ove metode je niz.replace(old,
new[, count]). Openito se u Pythonu u oblim zagradama navode argumenti koji su obavezni,
dok se u uglatim zagradama nalaze argumenti koji su opcionalni. Iz zapisa metode replace()
vidljivo je da prima dva obavezna argumenta i jedan opcionalni. Argument old obavezan je
argument koji sadri stari podniz koji planiramo zamijeniti novim. Argument new obavezan je
argument koji sadri novi podniz kojim emo zamijeniti stari. Argument count opcionalni je
argument koji sadri cjelobrojnu vrijednost koliko puta se treba izvriti zamjena. Ako argument
nije naveden, vri se zamjena svih naenih pojavljivanja podniza.

In [101]:
niz='ananas, banana, jabuka, jagoda, mandarina'
print niz.replace('a','A')
print niz.replace('a','A',5)
print niz
AnAnAs, bAnAnA, jAbukA, jAgodA, mAndArinA
AnAnAs, bAnAna, jabuka, jagoda, mandarina
ananas, banana, jabuka, jagoda, mandarina

1.9.2.4. Metoda count()

Metoda count() vraa broj pojavljivanja nekog podniza. Sintaksa ove metode je
niz.count(sub[, start[, end]]). Metoda prima jedan obavezni argument i dva opcionalna
argumenta. Argument sub obavezni je argument koji sadri podniz iji broj pojavljivanja elimo
izraunati. Argument start opcionalni je argument koji sadri cjelobrojnu vrijednost poetnog
indeksa od kojeg kree brojanje pojavljivanja podniza. Ako argument nije naveden, metoda
kree brojati od indeksa 0. Argument end opcionalni je argument koji sadri cjelobrojnu
vrijednost zavrnog indeksa do kojeg se vri brojanje podniza. Argument je ovisan o argumentu
start. Ako nije naveden argument start, ne moe biti naveden niti argument end. Ako je pak
naveden argument start, argument end moe, ali i ne mora biti naveden. Ako argument end nije
naveden, metoda zavrava s posljednjim indeksom niza.

In [102]:
niz='ananas, banana, jabuka, jagoda, mandarina'
print niz.count('an')
print niz.count('an',5)
print niz.count('an',5,10)
5
3
0

1.9.2.5. Metoda find()

Metoda find() vraa broj poetni broj indeksa od kojeg kree podniz koji traimo. Sintaksa ove
metode je niz.find(sub[, start[, end]]). Metoda prima jedan obavezni i dva opcionalna
argumenta. Argument sub obavezni je argument koji sadri podniz iji poetni indeks traimo.
Argument start opcionalni je argument koji sadri vrijednost poetnog indeksa od kojeg
metoda kree traiti indeks podniza. Ako argument nije naveden, metoda kree od indeksa 0.
Argument end opcionalni je argument koji sadri vrijednost zavrnog indeksa do kojeg metoda
trai indeks podniza. Argument je ovisan o argumentu start. Ako nije naveden argument
start, ne moe biti naveden niti argument end. Ako je pak naveden argument start, argument
end moe, ali i ne mora biti naveden. Ako argument end nije naveden, metoda zavrava s
posljednjim indeksom niza. U sluaju ako podniz ne postoji, tada vraa vrijednost -1.

In [103]:
niz='ananas, banana, jabuka, jagoda, mandarina'
print niz.find('an')
print niz.find('an',2)
print niz.find('an',10,40)
print niz.find('ga')
0
2
11
-1

1.9.2.6. Metoda strip()

Metoda strip() vraa string u kojem je podniz uklonjen s poetka i kraja niza. Sintaksa ove
metode je niz.strip([chars]). Metoda prima jedan opcionalni argument. Argument chars
opcionalni je argument koji sadri podniz koji elimo ukloniti s poetka i kraja niza. Ako
argument nije naveden, pretpostavljena vrijednost su znakovi za bjeline.

In [104]:
niz=' ananas, banana, jabuka, jagoda, mandarina '
print niz
print niz.strip()
print niz.strip(' an')
print niz.strip('g')
ananas, banana, jabuka, jagoda, mandarina
ananas, banana, jabuka, jagoda, mandarina
s, banana, jabuka, jagoda, mandari
ananas, banana, jabuka, jagoda, mandarina

1.9.2.7. Metoda split()

Metoda split() vraa tip podatka listu svih rijei iz niza znakova upotrebljavajui neki
separator. Sintaksa ove metode je niz.split([sep[, maxsplit]]). Metoda prima dva
opcionalna argumenta. Argument sep opcionalni je argument koji sadri podniz koji elimo
upotrijebiti kao separator. Ako argument nije naveden, pretpostavljena vrijednost je razmak.
Argument maxsplit opcionalni je argument koji sadri cjelobrojnu vrijednost koliko puta
elimo izvriti razdvajanje. Argument je ovisan o argumentu sep. Ako nije naveden argument
sep, ne moe biti naveden niti argument maxsplit. Ako je pak naveden argument sep, argument
maxsplit moe, ali i ne mora biti naveden. Ako maxsplit nije naveden, metoda vri
maksimalan mogui broj razdvajanja.

In [105]:
niz='ananas, banana, jabuka, jagoda, mandarina'
print niz.split()
print niz.split('ja')
print niz.split('ja',1)
['ananas,', 'banana,', 'jabuka,', 'jagoda,', 'mandarina']
['ananas, banana, ', 'buka, ', 'goda, mandarina']
['ananas, banana, ', 'buka, jagoda, mandarina']

1.9.2.8. Metoda join()

Metoda join() vraa niz u kojem su elementi liste spojeni separatorom. Sintaksa ove metode je
niz.joint(list). U ovoj metodi separator je ustvari niz nad kojim se vri metoda (niz).
Metoda prima jedan obavezan argument. Argument list obavezni je argument koji sadri listu
ije elemente elimo spojiti pomou niza znakova nad kojim vrimo metodu.

In [106]:
niz='ananas, banana, jabuka, jagoda, mandarina'
lista=niz.split(', ')
print lista
print '-'.join(lista)
['ananas', 'banana', 'jabuka', 'jagoda', 'mandarina']
ananas-banana-jabuka-jagoda-mandarina

Zadatke moete nai ovdje: Zadaci

1.10. Rad s listama


Liste (list, sequence) (List)) su sloeni tipovi podataka koji mogu sadravati vie atomarnih
podataka. Liste imaju linearnu strukturu podataka, odnosno elementi u listi poredani su nekim
redoslijedom. Svakom elementu u listi dodijeljena je cjelobrojna vrijednost, koja predstavlja
poziciju ili indeks elementa. Prvi indeks je 0. Sadraj elementa tj. njegova vrijednost moe se u
listi pojaviti vie od jednog puta. Elementi liste ne moraju biti isti tip podatka.

Lista se zapisuje u uglatim zagradama, a elementi liste razdvojeni su zarezom.

In [107]:
print ['banana',5,98.95]
['banana', 5, 98.95]

Vrijednost liste dodjeljujemo varijabli operatorom pridruivanja =.

In [108]:
lista1=['banana',5,98.95]
lista2=[3,1,5,4,2]
lista3=['a','b','c','d','d']
print lista1
print lista2
print lista3
['banana', 5, 98.95]
[3, 1, 5, 4, 2]
['a', 'b', 'c', 'd', 'd']

Listu moemo inicijalizirati bez sadravanja vrijednosti:

In [109]:
prazna_lista=[]
print prazna_lista
[]

Liste je mogue indeksirati, kao i nizove znakova:

In [110]:
lista=['banana',5,98.95]
print lista[0]
print lista[-1]
print lista[:2]
print lista[-2:]
print lista[-2:1]
banana
98.95
['banana', 5]
[5, 98.95]
[]

Dodatno je kod lista mogue indeksirati unutar elemenata liste onih tipova podataka koji
podravaju indeksiranje (npr. nizovi znakova i liste) na sljedei nain:

In [111]:
lista4=['banana',5,98.95,[1,'dva',2]]
print lista4[0][-1]
print lista4[-1][1][0]
a
d

Nad listama je mogue vriti konkatenaciju na sljedei nain:

In [112]:
lista1=['banana',5,98.95]
lista2=[3,1,5,4,2]
print lista1+lista2
['banana', 5, 98.95, 3, 1, 5, 4, 2]

Funkcija len() rauna duljinu liste, odnosno vraa cjelobrojnu vrijednost broja elemenata u listi.

In [113]:
lista1=['banana',5,98.95]
lista2=[3,1,5,4,2]
lista3=['a','b','c','d','d']
lista4=['banana',5,98.95,[1,'dva',2]]
print len(lista1)
print len(lista2)
print len(lista3)
print len(lista4)
print len(lista4[-1])
3
5
5
4
3

Liste su promjenjivi tipovi podataka, tako da je mogue vrijednost postojeeg elementa liste
promijeniti indeksiranjem tog elementa i dodjeljivanjem nove vrijednosti:

In [114]:
lista=['banana',5,98.95]
lista[0]='jabuka'
print lista
['jabuka', 5, 98.95]

1.10.1. Odabrane metode nad listama


U ovom poglavlju opisane su metode koje se vre nad listama:

append()
insert()
remove()

1.10.1.1. Metoda append()

Metoda append() dodaje element u postojeu listu. Sintaksa ove metode je


lista.append(obj). Metoda prima jedan obavezan argument. Argument obj obavezni je
argument koji sadri vrijednost elementa koji elimo dodati u postojeu listu. Objekt se dodaje
na kraj liste. Metoda ne vraa nikakvu vrijednost, ve aurira postojeu listu.

In [115]:
lista=['banana',5,98.95]
lista.append('tekst')
print lista
['banana', 5, 98.95, 'tekst']

1.10.1.2. Metoda insert()

Metodom insert() mogue je dodati element u postojeu listu na odreeno mjesto u listi.
Sintaksa ove metode je lista.insert(index, obj). Metoda prima dva obavezna argumenta.
Argument index obavezni je argument koji sadri cjelobrojnu vrijednost indeksa na koji elimo
dodati element u postojeu listu. Argument obj obavezni je argument koji sadri vrijednost
elementa koji elimo dodati u postojeu listu. Metoda ne vraa nikakvu vrijednost, ve aurira
postojeu listu.

In [116]:
lista=['banana',5,98.95]
lista.insert(2,'tekst')
print lista
['banana', 5, 'tekst', 98.95]

1.10.1.3. Metoda remove()

Metoda remove() uklanja prvo pojavljivanje elementa iz postojee liste. Sintaksa ove metode je
lista.remove(obj). Metoda prima jedan obavezni argument. Argument obj obavezni je
argument koji sadri vrijednost elementa koji elimo obrisati iz postojee liste. Metoda ne vraa
nikakvu vrijednost, ve aurira postojeu listu.

In [117]:
lista5=['banana',5,98.95,'tekst',5]
lista5.remove(5)
print lista5
['banana', 98.95, 'tekst', 5]

Osim ovom metodom, elemente liste mogue je brisati putem naredbe del i indeksa elementa:

In [118]:
lista5=['banana',5,98.95,'tekst',5]
del lista5[-1]
print lista5
['banana', 5, 98.95, 'tekst']

Zadatke moete nai ovdje: Zadaci

1.11. Kontrola tijeka


Kontrola tijeka (control flow, flow control) (Control flow) odreuje kojim redoslijedom se vre
odreene naredbe u raunalnom programu. Naredbe kontrola tijeka postavljaju odreene uvjete
koji se trebaju ispuniti prije njihovog izvravanja, odnosno, ako se uvjeti ne ispune, naredbe se
nee izvriti. Skup naredbi esto je strukturiran u blok naredbi. U sintaksi Pythona blok naredbi
definira se uvlakama, a najavljuje se dvotokom.

Kontrola tijeka izvodi se selekcijom i iteracijom. Selekcija je grananje programa s obzirom na


zadovoljenost nekog logikog uvjeta. Naredba kojom se vri selekcija naziva se if naredba.
Iteracija je uzastopno ponavljanje niza naredbi, a vri se for petljom ili while petljom.

U ovom poglavlju opisane su dvije naredbe kontrola tijeka:

if naredba
for petlja.

1.11.1. if naredba
Naredba kojom se vri selekcija, odnosno grananje programa s obzirom na zadovoljenost jednog
ili vie logikih uvjeta, naziva se if naredbom. Sintaksa naredbe ima jednu obaveznu if izjavu,
jednu ili vie opcionalnih elif izjava (od else if) i jednu opcionalnu else izjavu. Blok naredbi
definiran je uvlakama, a najavljuje se dvotokom.

Na sljedei nain ispisat emo "Broj je vei od 5." za sve brojeve koji su vei od 5 te provjeriti
uvjet s brojevima 3 i 10:

In [119]:
a=3
if a>5:
print 'Broj je vei od 5.'
In [120]:
b=10
if b>5:
print 'Broj je vei od 5.'
Broj je vei od 5.

Kod provjere s brojem 3, logiki uvjet nije ispunjen (tj. rezultat logikog izraza je FALSE), jer 2
nije vei od 5 te se nije ispisao zadani tekst. Kod provjere s brojem 10, logiki uvjet je ispunjen
(tj. rezultat logikog izraza je TRUE) te se ispisao zadani tekst.

Na sljedei nain ispisat emo "Broj je paran." za sve brojeve koji su parni, a "Broj je neparan."
za sve brojeve koji su neparni te provjeriti blok naredbi s brojevima 3 i 10:

In [121]:
a=3
if a%2==0:
print 'Broj je paran.'
else:
print 'Broj je neparan.'
Broj je neparan.
In [122]:
b=10
if b%2==0:
print 'Broj je paran.'
else:
print 'Broj je neparan.'
Broj je paran.

U ovom primjeru provjeravamo je li ostatak dijeljenja s brojem 2 jednak 0 (if a%2==0). Ako je
uvjet ispunjen (tj. rezultat logikog izraza je TRUE), ispisat e se "Broj je paran." (print 'Broj
je paran.'). Za sve ostale sluajeve (else), ispisat e se "Broj je neparan" (print 'Broj je
neparan.).

Mogue je unutar if naredbe imati drugu if naredbu:

In [123]:
c=6
if c%2==0:
if c<10:
c*=3
else:
c*=5
print c
18
In [124]:
d=11
if d%2==0:
if d<10:
d*=3
else:
d*=5
print d
55

U ovom primjeru provjeravamo je li broj djeljiv s 2. Ako je taj uvjet ispunjen, provjeravamo je li
broj manji od 10. Ako je i taj uvjet ispunjen, broj mnoimo s 3. Ako broj nije djeljiv s 2, broj
mnoimo s 5.

Isti zadatak mogue je rijeiti logikim operatorom and na sljedei nain:

In [125]:
c=6
if c%2==0 and c<10:
c*=3
else:
c*=5
print c
18
In [126]:
d=11
if d%2==0 and c<10:
d*=3
else:
d*=5
print d
55

U ovom primjeru provjeravamo je li broj djeljiv s 2 i (logiki operator and) je li broj manji od
10. Tek kada se oba uvjeta ispune, broj mnoimo s 3. Ako uvjet nije ispunjen, broj mnoimo s 5.

Na sljedei nain mogue je upotrijebiti logiki operator or:

In [127]:
e=10
if e%2==0 or e%3==0:
e+=4
else:
e-=8
print e
14
In [128]:
f=5
if f%2==0 or f%3==0:
f+=4
else:
f-=8
print f
-3

U ovom primjeru provjeravamo je li broj djeljiv s 2 ili (logiki operator or) je li broj djeljiv s 3.
Samo je jedan uvjet potrebno izvriti kako bi broju zbrojili 4. Ako nije ispunjen ni jedan od
uvjeta, oduzima se broj 8.

Na sljedei nain moemo postaviti sloeni blok naredbi:

In [129]:
g=25
if g%2==0:
print 'Broj je djeljiv s 2.'
elif g%3==0:
print 'Broj je djeljiv s 3.'
elif g%5==0:
print 'Broj je djeljiv s 5.'
elif g%7==0:
print 'Broj je djeljiv sa 7.'
else:
print 'Broj nije djeljiv s 2, 3, 5 ni 7.'
Broj je djeljiv s 5.
In [130]:
h=6
if h%2==0:
print 'Broj je djeljiv s 2.'
elif h%3==0:
print 'Broj je djeljiv s 3.'
elif h%5==0:
print 'Broj je djeljiv s 5.'
elif h%7==0:
print 'Broj je djeljiv sa 7.'
else:
print 'Broj nije djeljiv s 2, 3, 5 ni 7.'
Broj je djeljiv s 2.
In [131]:
i=11
if i%2==0:
print 'Broj je djeljiv s 2.'
elif i%3==0:
print 'Broj je djeljiv s 3.'
elif i%5==0:
print 'Broj je djeljiv s 5.'
elif i%7==0:
print 'Broj je djeljiv sa 7.'
else:
print 'Broj nije djeljiv s 2, 3, 5 ni 7.'
Broj nije djeljiv s 2, 3, 5 ni 7.
1.11.2. for petlja
Petlja kojom se vri iteracija, odnosno uzastopno ponavljanje niza naredbi, naziva se for petlja.
Sintaksa petlje je for pomocna_varijabla in obj:. For petlja prolazi kroz neki objekt obj. U
svakom prolasku pomocna_varijabla poprima vrijednost elementa objekta kroz koji iterira
poevi od prvog elementa. Petlja se izvrava onoliko puta koliko ima elemenata u objektu.

1.11.2.1. Iteracija kroz niz znakova

Od tipova podataka koji su do sada opisani, iterirati se moe kroz nizove znakova i liste. Kada
stavimo niz znakova u for petlju, iterira se od prvog znaka niza do posljednjeg znaka. Na
primjer, u sljedeem primjeru iterirat emo kroz niz znakova te u svakoj iteraciji ispisati trenutnu
vrijednost pomone varijable.

In [132]:
for znak in 'neki niz':
print 'Pomona varijabla "znak" poprima vrijednost: '+znak
Pomona varijabla "znak" poprima vrijednost: n
Pomona varijabla "znak" poprima vrijednost: e
Pomona varijabla "znak" poprima vrijednost: k
Pomona varijabla "znak" poprima vrijednost: i
Pomona varijabla "znak" poprima vrijednost:
Pomona varijabla "znak" poprima vrijednost: n
Pomona varijabla "znak" poprima vrijednost: i
Pomona varijabla "znak" poprima vrijednost: z

Iz primjera je vidljivo da pomona varijabla znak poprima vrijednosti svakog znaka neki niz
kroz koji iteriramo, od prvog do posljednjeg. U prvoj iteraciji poprima vrijednost n, u drugoj
iteraciji poprima vrijednost e, u treoj iteraciji poprima vrijednost k i tako sve do posljednjeg
znaka niza kroz koji iteriramo. Vri se onoliko iteracija koliko ima znakova u nizu. Naziv
pomone varijable znak je proizvoljan.

Mogue je kombinirati if naredbu i for petlju. U sljedeem primjeru ispisat emo samo
samoglasnike iz niza znakova kroz koji iteriramo:

In [133]:
for znak in 'neki niz':
if znak in 'aeiou':
print znak
e
i
i

U ovom primjeru iteriramo kroz neki niz. U prvoj iteraciji znak poprima vrijednost n. Zatim se
provjerava nalazi li se ta vrijednost u nizu 'aeiou'. Upotrebljavamo operator lanstva in koji
ispituje nalazi li se vrijednost pomone varijable u navedenom nizu znakova te vraa logiki tip
podatka. Budui da se n ne nalazi, prva iteracija for petlje zavrava i kree druga iteracija for
petlje. U drugoj iteraciji znak poprima vrijednost e. Zatim se provjerava nalazi li se ta vrijednost
u nizu 'aeiou'. Budui da je uvjet ispunjen, ispisuje se trenutna vrijednost pomone varijable
znak, to je u ovom sluaju e. Ovdje zavrava druga iteracija i kree trea iteracija for petlje,
kada znak poprima vrijednost k. Zatim se provjerava nalazi li se ta vrijednost u nizu aeiou.
Budui da se k ne nalazi, zavrava trea iteracija petlje i kree etvrta iteracija. U etvrtoj
iteraciji znak poprima vrijednost i. Zatim se provjerava nalazi li se ta vrijednost u nizu aeiou.
Budui da je uvjet ispunjen, ispisuje se trenutna vrijednost pomone varijable znak. Ovdje
zavrava etvrta iteracija te kree peta iteracija for petlje. I tako sve do kraja zadnjeg znaka u
nizu neki niz. Vri se i dalje onoliko iteracija petlje koliko ima znakova u nizu, samo zbog
dodatnog uvjeta ispisujemo jedino one znakove koji ispunjavaju uvjet.

Brojaem moemo izbrojati koliko se puta neki fenomen pojavljuje u nizu, ali ga prvo moramo
svesti na vrijednost 0 dodjeljivanjem te vrijednosti varijabli koju nazivamo broja. Na primjer,
moemo izraunati koliko se samoglasnika pojavljuje u nekom nizu znakova.

In [134]:
broj_samoglasnika=0
niz="Ovo je niz znakova."
for znak in niz:
if znak in 'aeiou':
broj_samoglasnika+=1
print broj_samoglasnika
6

Varijabla niz sadri 7, a ne 6 samoglasnika. Logiki uvjet u if naredbi provjerava nalazi li se


pomona varijabla znak u nizu aeiou. Budui da je logiki uvjet ispunjen samo kada znak
poprimi vrijednost samoglasnika pisanog malim slovima, ovako postavljen uvjet preskae prvi
znak u varijabli niz odnosno veliko slovo O. Problem se rjeava trikom tako da se niz pretvori u
mala slova metodom lower() na sljedei nain:

In [135]:
broj_samoglasnika=0
niz="Ovo je niz znakova."
for znak in niz.lower():
if znak in 'aeiou':
broj_samoglasnika+=1
print broj_samoglasnika
7

U novi niz samoglasnici moemo pohraniti sve samoglasnike iz zadanog niza. Prvo je potrebno
inicijalizirati prazan niz, a nakon toga iterirati kroz niz, provjeriti je li trenutni znak samoglasnik
te ga pridruiti nizu samoglasnici ako je logiki uvjet ispunjen.

In [136]:
samoglasnici=''
niz="Ovo je niz znakova."
for znak in niz.lower():
if znak in 'aeiou':
samoglasnici+=znak
print samoglasnici
ooeiaoa
1.11.2.2. Iteracija kroz listu

Iterirati moemo kroz listu. Kada stavimo listu u for petlju, iterira se od prvog elementa liste do
posljednjeg elementa liste. Na primjer, u sljedeem primjeru iterirat emo kroz listu te u svakoj
iteraciji ispisati trenutnu vrijednost pomone varijable.

In [137]:
for element in [1, 2, 'tri', [4,'pet'], 6.0]:
print element
1
2
tri
[4, 'pet']
6.0

U ovom primjeru iteriramo kroz listu [1, 2, 'tri', [4,'pet'], 6.0]. U prvoj iteraciji
pomona varijabla element poprima vrijednost 1. U drugoj iteraciji element poprima vrijednost
2. U treoj iteraciji element poprima vrijednost 'tri'. U etvrtoj iteraciji element poprima
vrijednost [4, 'pet']. U petoj i posljednjoj iteraciji poprima vrijednost posljednjeg elementa
liste 6.0.

Za svaki element liste moemo provjeriti kojeg je tipa podatka pomou funkcije type():

In [138]:
for element in [1, 2, 'tri', [4,'pet'], 6.0]:
print 'Element je sljedeeg tipa podatka: '+ str(type(element))
Element je sljedeeg tipa podatka: <type 'int'>
Element je sljedeeg tipa podatka: <type 'int'>
Element je sljedeeg tipa podatka: <type 'str'>
Element je sljedeeg tipa podatka: <type 'list'>
Element je sljedeeg tipa podatka: <type 'float'>

Iz primjera je vidljivo da su prva dva elementa liste cjelobrojne vrijednosti, trei element je niz
znakova, etvrti element je lista, a peti element je realni tip podatka.

U sljedeem primjeru kombiniramo for petlju i if naredbu:

In [139]:
for element in ['jedan', 'dva', 'tri', 'cetiri', 'pet']:
if len(element)>3:
print element
jedan
cetiri

U ovom primjeru iteriramo kroz listu ['jedan', 'dva', 'tri', 'etiri', 'pet'] i
provjeravamo je li duina elementa liste vea od 3. Ako je vea, onda ispisuje element. U prvoj
iteraciji pomona varijabla element poprima vrijednost 'jedan'. Zatim se provjerava je li
duina trenutne vrijednosti pomone varijable vea od 3. Budui da je jedan ima vie od 3
znaka, uvjet je ispunjen i trenutna vrijednost pomone varijable element se ispisuje. Kree druga
iteracija u kojoj element poprima vrijednost 'dva'. Zatim se provjerava je li duina trenutne
vrijednosti pomone varijable vea od 3. Budui da dva nema vie od tri znaka (ima upravo tri
znaka, ali ne vie od tri znaka), uvjet nije ispunjen te tu zavrava druga iteracija i kree trea
iteracija. I tako sve do posljednjeg elementa liste.

U sljedeem primjeru ispisat emo prvi znak elemenata iz liste indeksiranjem:

In [140]:
for element in ['jedan', 'dva', 'tri', 'cetiri', 'pet']:
print element[0]
j
d
t
c
p

Moemo izraunati prosjenu duljinu znakova elemenata liste.

In [141]:
duljina_znakova=0
lista=['jedan', 'dva', 'tri', 'cetiri']
for element in lista:
duljina_znakova+=len(element)
print float(duljina_znakova)/len(lista)
print duljina_znakova/len(lista)
4.25
4

U ovom primjeru prvo smo varijablu u koju emo spremati duljinu znakova sveli na vrijednost 0.
Zatim smo u varijablu lista pohranili listu kroz koju emo iterirati. Za svaki element liste
raunali smo duljinu elementa (len(element)) i vrijednost dodavali u varijabli
duljina_znakova. U prvoj iteraciji duljina_znakova poprimila je vrijednost 5, jer jedan ima
5 znakova. U drugoj iteraciji duljina_znakova poprimila je vrijednost 8, jer dva ima jo 3
znaka, a 5+3 jednako je 8. U treoj iteraciji duljina_znakova poprimila je vrijednost 11, jer tri
ima jo 3 znaka, a 5+3+3 jednako je 11. U etvrtoj iteraciji duljina_znakova poprimila je
vrijednost 17, jer cetiri ima jo 6 znakova, a 5+3+3+6 jednako je 17. Kada je zavrila iteracija,
cjelobrojnu vrijednost varijable duljina_znakova pretvorili smo u realni tip podatka te
podijelili s duinom liste (tj. brojem elemenata u listi). Budui da su vrijednost varijable
duljina_znakova i vrijednost izraza len(lista) cjelobrojni tipovi podataka, potrebno je jednu
od vrijednosti pretvoriti u realni tip podatka, jer emo neemo dobiti razlomaki dio.

Kada imamo broja kojim brojimo koliko se puta neki fenomen pojavljuje u odreenoj sekvenci
ili zbrajamo elemente, taj broja moramo svesti na vrijednost 0 dodjeljivanjem tu vrijednost
varijabli. U sljedeem primjeru izraunat emo zbroj elemenata u listi, a broja pohraniti u
varijabli i. Na kraju iteracije ispisujemo vrijednost brojaa.

In [142]:
i=0
lista=[1,2,3,4,5]
for element in lista:
i+=element
print i
15

Mogue je pratiti koje vrijednosti poprima broja i u svakoj iteraciji, tako da se ispie vrijednost
i unutar for petlje:

In [143]:
i=0
lista=[1,2,3,4,5]
for element in lista:
i+=element
print i
1
3
6
10
15

Vrijednost brojaa i je 0. U prvoj iteraciji pomona varijabla element poprima vrijednost prvog
elementa liste odnosno 1 te tu vrijednost dodaje brojau. Vrijednost brojaa i sada je 1 te se ta
vrijednost ispisuje. U drugoj iteraciji pomona varijabla element poprima vrijednost drugog
elementa liste odnosno 2 te tu vrijednost zbraja na trenutnu vrijednost brojaa. Vrijednost brojaa
i sada je 1+2 odnosno 3 te se ta vrijednost ispisuje. U treoj iteraciji pomona varijabla element
poprima vrijednost treeg elementa liste odnosno 3 te tu vrijednost zbraja na trenutnu vrijednost
brojaa. Vrijednost brojaa i sada je 3+3 odnosno 6 te se ta vrijednost ispisuje. U etvrtoj
iteraciji pomona varijabla element poprima vrijednost etvrtog elementa liste odnosno 4 te tu
vrijednost zbraja na trenutnu vrijednost brojaa. Vrijednost brojaa i sada je 6+4 odnosno 10 te
se ta vrijednost ispisuje. U petoj iteraciji pomona varijabla element poprima vrijednost petog
elementa liste odnosno 5 te tu vrijednost zbraja na trenutnu vrijednost brojaa. Vrijednost brojaa
i sada je 10+5 odnosno 15 te se ta vrijednost ispisuje.

Zadatke moete nai ovdje: Zadaci

You might also like