Professional Documents
Culture Documents
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.
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.
Objekt: bicikl
Metode: kreni, ubrzaj, stani, koi, prebaci u viu brzinu, prebaci u niu brzinu
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
upper() i replace() su metode koje se mogu koristiti nad objektima tipa string, pa tako onda i
nad varijablom s.
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.
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.
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
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]:
''
In [25]:
'3.14'
Out[25]:
'3.14'
In [26]:
3.14
Out[26]:
3.14
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'
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'
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
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
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 =:
None se takoer ne moe koristiti za naziv varijable, iako nije rezervirana rije, ve
konstanta.
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
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
In [46]:
a=20
b=10
print a+b
30
In [47]:
a=20
b=10
print a-b+3
13
In [48]:
a=20
b=10
print a*b
200
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
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
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
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
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
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
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
Operatori pridruivanja dodjeljuju vrijednosti operandima ili vre operacije nad operandima:
=
+=
-=
*=
/=
%=
**=
1.7.3.1. Operator =
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
In [76]:
c=7
d=2
c**=d
print c
print d
49
2
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
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
int (integer)
float (floating point numbers)
str (string)
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
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.
In [89]:
str(7.6)
Out[89]:
'7.6'
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
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
upper()
lower()
replace()
count()
find()
strip()
split()
join().
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
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
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
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
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
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
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']
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
In [107]:
print ['banana',5,98.95]
['banana', 5, 98.95]
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']
In [109]:
prazna_lista=[]
print prazna_lista
[]
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
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]
append()
insert()
remove()
In [115]:
lista=['banana',5,98.95]
lista.append('tekst')
print lista
['banana', 5, 98.95, 'tekst']
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]
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']
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.).
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.
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.
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.
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.
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
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.
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.
In [140]:
for element in ['jedan', 'dva', 'tri', 'cetiri', 'pet']:
print element[0]
j
d
t
c
p
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.