1. Osnove programiranja

1.1. Python

Python (https://www.python.org) je visokorazinski (High-level programming language), interpretirani (Interpreter (computing)) i dinamički tipizirani (Dynamic programming language) programski jezik (Programming language, programski jezici) opće namjene.

Kod rada s visokorazinskim jezicima ne treba brinuti o načinu izvođenja koda na računalu zbog visokog stupnja apstrakcije od detalja rada računala. Na primjer, kod pisanja računalnog koda koji sadržava računske operacije s brojevima, ne treba brinuti jesu li brojevi 16-bitne ili 32-bitne cjelobrojne vrijednosti pohranjene na računalu. Osim što nije potrebno poznavati podatkovne strukture, kod visokorazinskih jezika moguće je vršiti složenije operacije nad složenijim 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 sličnih strojnim jezicima sastoje se od nula i jedinica te je potrebno poznavanje arhitekture računala.

Python je interpretirani jezik, što znači da se tijekom pokretanja programa prevodi naredba po naredba na računalu razumljiv jezik, a to vrše interpreteri. Za usporedbu, postoje drugi jezici koji prevode cijeli program na strojni kod prije njihova izvršavanja, a to vrše kompajleri ili kompilatori.

Kod dinamički tipiziranog jezika nije potrebno unaprijed definirati tipove podataka, već se prilikom dodjeljivanja vrijednosti varijabli određuje kojem tipu podataka pripada.

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

1.2. Osnovni pojmovi

Python poznaje različite tipove podataka (Data type) kao što su cjelobrojni, realni, logički, nizovi znakova i ostali. Tipovi podataka definiraju koje se operacije mogu vršiti nad određenim tipom podataka te kako se vrijednosti određenih tipova podataka pohranjuju na računalu. Na primjer, u slučaju cjelobrojnih tipova podataka, definirano je kako se navedeni tip podatka pohranjuje u računalu, koliko je računalne memorije potrebno za pohranu, koja je najmanja vrijednost koju tip podatka može poprimiti, koja je najveća vrijednost koju može poprimiti, koje aritmetičke operacije se mogu vršiti nad navedenim tipom podataka i sl. Python omogućava programerima da definiraju vlastite tipove podataka, uglavnom kombinirajući različite elemente drugih tipova podataka te definirajući dozvoljene operacije koje se smiju vršiti nad novim tipom podatka.

Varijabla (Variable (computer science))) je lokacija na memoriji računala u koju se može pohraniti neka vrijednost. Upravo zbog odvajanja naziva i sadržaja, preko naziva varijable, program dodijeljenu vrijednost može pročitati, prikazati i upotrijebiti u dozvoljenim operacijama. Na primjer, vrijednost 1234567890 pohranjujemo u varijablu s nazivom broj. Sljedeći puta kada želimo upotrijebiti navedenu vrijednost, možemo to učiniti 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 ustvari podaci s nazivom, vrijednostima i ograničenjima koji određeni tip podatka nameće, a metode su dozvoljene operacije koje se mogu vršiti nad tim podacima. Svi objekti istog tipa pripadaju istoj klasi (Class (computer programming)), koja sadrži informacije o tipovima podataka i dozvoljenim operacijama za određenu klasu. Svaki objekt je instanca određene klase, a instance su ustvari podaci koji pripadaju pojedinim objektima. Računalni programi pišu se kao skup objekata koji su u međusobnoj interakciji. Računalni program može sadržavati više instanci iste klase, pa se na taj način mogu upotrebljavati iste procedure na različitim skupovima podataka.

1.3. Primjer modela fizičkog objekta

Fizički 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 zajednička svojstva svih pripadnika klase, u našem slučaju svih bicikala na svijetu. Svojstva bicikla su tip, boja, veličina, veličina kotača, tip kočnica i sl. Metode koje pripadaju objektu bicikl su kreni, ubrzaj, stani, koči, prebaci u višu brzinu, prebaci u nižu brzinu i sl.

Objekt: bicikl

Klase: svojstva bicikla i operacije koje se mogu vršiti biciklom

Instanca klase: Nikolin bicikl

Svojstva: tip, boja, veličina, veličina kotača, tip kočnica

Metode: kreni, ubrzaj, stani, koči, prebaci u višu brzinu, prebaci u nižu 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 sadržaj, 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 alfanumeričke znakove s bjelinama, crticama i ostalim znakovima, ali ne može sadržavati npr. sliku. Također definira sve metode koje se mogu upotrijebiti nad tom klasom, dok su navedene metode samo dvije od svih mogućih metoda.

1.5. Jednostavni tipovi podataka

Python poznaje sljedeće jednostavne tipove podataka:

  • cjelobrojni tip podataka (integer, int)
  • realni tip podataka (floating-point number, float)
  • niz znakova (string, str)
  • logička vrijednost (boolelan).

1.5.1. Cjelobrojni tip podataka

Brojevi pripadaju nepromjenjivim tipovima podataka. U Pythonu se prije razlomačkog dijela broja koristi točka, a ne zarez.

Cjelobrojni tipovi podataka (Integer (computer science)) su pozitivni ili negativni cijeli brojevi bez decimalne točke. 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 slučaju da postoji potreba za brojevima izvan navedenog raspona, mogu se pohraniti u cijele brojeve u dugom zapisu s oznakom L. U tom slučaju je ograničenje broja jedino količina radne memorije računala.

1.5.2. Realni tip podataka

Realne vrijednosti su pozitivni ili negativni realni brojevi s pomičnom (kliznom) točkom (floating-point number) (Floating point) koji odvaja cjelobrojnu vrijednost broja i razlomački dio. Brojevi s pomičnom točkom mogu se prikazati na dva načina: klasični način s točkom ili znanstveni način 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, prikaže se vrijednost inf. Slično tome, kad je negativan broj manji od najmanjeg broja koji se može prikazati u Pythonu, prikaže se vrijednost 0.0.

1.5.3. Niz znakova

Niz znakova (string) (String (computer science))) pripadaju nepromjenjivim tipovima podataka koje možemo definirati kao jedan ili više znakova omeđenih jednostrukim (') ili dvostrukim navodnicima (").Ako je niz znakova započet s jednostrukim navodnicima, tada mora i završavati jednostrukim navodnicima. Isto vrijedi i za dvostruke navodnike. Moguće je kombinirati jednostruke i dvostruke navodnike. Ako je niz znakova započet s jednostrukim navodnicima, može sadržavati jedan ili više dvostruki navodnik. Također vrijedi da niz znakova započet dvostrukim navodnicima može sadržavati jedan ili više 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."

Moguće je navesti prazan niz znakova navođenjem 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 slučaju realnu vrijednost:


In [26]:
3.14


Out[26]:
3.14

1.5.3.1. Indeksiranje znakova

Unutar niza znakova je moguće dohvatiti (indeksirati ili adresirati) podniz putem uglatih zagrada i indeksa. Indeksiranje počinje nultim indeksom (zero-based numbering) (Zero-based numbering) te završava n-1 indeksom dužine niza. Indeks mora biti cjelobrojna vrijednost. Indeksirati se može jedan, u ovom primjeru prvi znak:


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


Out[27]:
'O'

Ako se niz pohrani u varijablu, može se indeksirati preko naziva varijable:


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


Out[28]:
'O'

Indeksirati se može i više znakova navodeći raspon indeksa tako da se navede početni indeks od kojeg se kreće, dvotočje te završni indeks do kojeg završava podniz:


In [29]:
niz[4:6]


Out[29]:
'je'

Ako se navodeći raspon indeksa izostavi završni 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.'

Također, ako se navodeći raspon indeksa izostavi početni indeks, program će naredbu obraditi kao da je umjesto izostavljenog indeksa naveden prvi indeks niza:


In [31]:
niz[:6]


Out[31]:
'Ovo je'

Moguće je indeksirati i posljednji znak negativnom cjelobrojnom vrijednosti indeksa:


In [32]:
niz[-1]


Out[32]:
'.'

Kod indeksiranja je moguće kombinirati pozitivne i negativne vrijednosti indeksa, dok god se početni indeks nalazi na indeksnom mjestu prije završnog indeksa. U suprotnom program vraća 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 između unosa i ispisa bit će vidljiva prilikom korištenja 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 značenja, koji se prikazuju pomoću obrnute kose crte (\):

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

1.5.4. Logička vrijednost

Logičke vrijednosti ili Booleove vrijednosti (Boolean data type) poprimaju samo dvije moguće vrijednosti, koje se prikazuju pomoću konstanti True i False. Logičke vrijednosti obično su rezultat uspoređivanja:


In [36]:
3<7


Out[36]:
True

In [37]:
4.5>9


Out[37]:
False

Zadatke možete naći ovdje: Zadaci

1.6. Varijable

Varijabla je mjesto pohrane kojem je dodijeljen naziv u kojem program može pohraniti dodijeljenu vrijednost te je pročitati i prikazati. Svaki programski jezik ima različita pravila kako se varijable mogu nazivati, unositi i koristiti. Varijabla poprima određenu vrijednost naredbom dodjeljivanja. Naredba dodjeljivanja vrši se operatorom =:

<naziv varijable> = <vrijednost>

1.6.1. Imenovanje varijabli

Prilikom imenovanja varijabli treba imati na umu sljedeće:

  • Naziv varijable može sadržavati 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 početi sa slovom ili podcrtom. Ne može početi sa znamenkom.
  • Postoje tzv. rezervirane riječi 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 također ne može 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 određuje kojem tipu podataka pripada varijabla. Vrijednost varijable je moguće mijenjati tijekom izvođenja programa. Također je deklariranjem varijable moguće mijenjati tako i tip podatka varijable. Kako bi se varijabla mogla koristiti tijekom izvođenja programa, mora biti deklarirana. Varijabla se može deklarirati dodjeljivanjem neke vrijednosti. Na sljedeći način 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 sljedeći način:


In [39]:
broj2=-16.85
print broj2


-16.85

Na sljedeći način se niz znakova Ovo je niz pohranjuje u varijablu nazvanu niz1:


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


Ovo je niz

Varijabla se može deklarirati i navođenjem praznine, čime je definiran tip podatka varijable, a trenutni sadržaj vrijednosti je prazan. Niz znakova se deklarira navođenjem 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 obrađena, su lista i rječnik, koji se također mogu deklarirati odnosno inicijalizirati bez sadržavanja vrijednosti.


In [43]:
lista=[]
print lista


[]

In [44]:
rjecnik={}
print rjecnik


{}

Ako ne znamo koju vrijednost i tip podataka će varijabla sadržavati, deklarirat ćemo je konstantom None:


In [45]:
var=None
print var


None

1.7. Operatori

Python podržava sljedeće tipove operatora:

  • aritmetički operatori
  • operatori uspoređivanja
  • operatori pridruživanja
  • operatori članstva

1.7.1. Aritmetički operatori

Aritmetički operatori su:

  • operator zbrajanja (+)
  • operator oduzimanja (-)
  • operator množenja (*)
  • 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 množenja

Operator množenja (*) množi 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 (/) vrši 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 vrši na dva načina. Jedan način je da jedan operand ima cjelobrojnu vrijednost.


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


3.5

Drugi način je korištenje 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 vraća ostatak dijeljenja.


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


1

1.7.1.6. Eksponent

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


In [55]:
b=10
d=2
print b**2


100

1.7.2. Operatori uspoređivanja

Operatori uspoređivanja uspoređuju vrijednosti na obje strane te odlučuju o njihovoj relaciji. Operatori uspoređivanja su:

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

1.7.2.1. Operator ==

Operator == uspoređuje jesu li vrijednosti operanda jednake te vraća logički tip podataka, odnosno True kada su vrijednosti jednake, a False kada su različite.


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 različite te vraća logički tip podataka, odnosno True kada su vrijednosti različite, 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 veća od vrijednosti desnog operanda te vraća logički tip podataka, odnosno True kada je vrijednost lijevog operanda veća od vrijednosti desnog operanda, a False kada vrijednost lijevog operanda nije veća 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 vraća logički 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 veća ili jednaka vrijednosti desnog operanda te vraća logički 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 vraća logički 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 pridruživanja

Operatori pridruživanja dodjeljuju vrijednosti operandima ili vrše 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 *= množi 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 %= vraća 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 **= vrši 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 određenoj 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 određenoj sekvenci te vraća logički tip podataka, odnosno True ako se vrijednost varijable nalazi u određenoj 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 određenoj sekvenci te vraća logički tip podataka, odnosno True ako se vrijednost varijable ne nalazi u određenoj 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. Složeni izrazi

U Pythonu je moguće postavljati složene izraze, odnosno izraze u kojima postoji više od jednog operatora.


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


Out[81]:
False

U tom slučaju je potrebno poznavati kojim redoslijedom će se prvo izvoditi koji operator, odnosno prioritete operatora. Slijedi lista prioriteta obrađenih operatora od najvišeg do najnižeg:

Operator Opis
** Eksponent
* / % Operatori množenja, dijeljenja, ostatka cjelobrojnog dijeljenja
+ - Operatori zbrajanja i oduzimanja
<= < > >= Operatori uspoređivanja
<> == != Operatori jednakosti
= %= /= /= -= += *= **= Operatori pridruživanja
in, not in Operatori članstva
not, or, and Logički operatori

Zadatke možete naći ovdje: Zadaci

1.8. Osnovne funkcije

Funkcije su potprogrami koji primaju nula ili više argumenata i vraćaju 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 izvršiti dijeljenje, ako želimo dobiti razlomački dio. Iz posljednjeg primjera vidljivo je da se količnik pretvara u realni tip podatka nakon cjelobrojnog dijeljenja, a on će u tom slučaju uvijek iznositi 0.

1.8.3. Funkcija str()

Funkcija str() pretvara brojčanu 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ć vraća koji je tip podatka određena 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 vrši operatorom =.


In [94]:
print 'dar'+'ovi'


darovi

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


AnaJan

Konkatenacija vrši samo spajanje nizova znakova. U slučaju da želimo iz prethodnog primjera dodati razmak, veznik i razmak, potrebno je to izričito 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 izvršiti ispis nizova znakova i brojčanih vrijednosti, prethodno je potrebno prebaciti brojčane vrijednosti u niz znakova funkcijom str.


In [98]:
ana=2000
luka=1995

print 'Ana je mlađa od Luke '+str(ana-luka)+' godina.'


Ana je mlađa 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() vraća 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() vraća 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() vraća niz znakova u kojem se stari podniz mijenja novim podnizom, ali se ne mijenja niz znakova nad kojim se vrši metoda. Sintaksa ove metode je niz.replace(old, new[, count]). Općenito 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 sadrži stari podniz koji planiramo zamijeniti novim. Argument new obavezan je argument koji sadrži novi podniz kojim ćemo zamijeniti stari. Argument count opcionalni je argument koji sadrži cjelobrojnu vrijednost koliko puta se treba izvršiti zamjena. Ako argument nije naveden, vrši se zamjena svih nađenih 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() vraća 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 sadrži podniz čiji broj pojavljivanja želimo izračunati. Argument start opcionalni je argument koji sadrži cjelobrojnu vrijednost početnog indeksa od kojeg kreće brojanje pojavljivanja podniza. Ako argument nije naveden, metoda kreće brojati od indeksa 0. Argument end opcionalni je argument koji sadrži cjelobrojnu vrijednost završnog indeksa do kojeg se vrši brojanje podniza. Argument je ovisan o argumentu start. Ako nije naveden argument start, ne može biti naveden niti argument end. Ako je pak naveden argument start, argument end može, ali i ne mora biti naveden. Ako argument end nije naveden, metoda završava 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() vraća broj početni broj indeksa od kojeg kreće podniz koji tražimo. Sintaksa ove metode je niz.find(sub[, start[, end]]). Metoda prima jedan obavezni i dva opcionalna argumenta. Argument sub obavezni je argument koji sadrži podniz čiji početni indeks tražimo. Argument start opcionalni je argument koji sadrži vrijednost početnog indeksa od kojeg metoda kreće tražiti indeks podniza. Ako argument nije naveden, metoda kreće od indeksa 0. Argument end opcionalni je argument koji sadrži vrijednost završnog indeksa do kojeg metoda traži indeks podniza. Argument je ovisan o argumentu start. Ako nije naveden argument start, ne može biti naveden niti argument end. Ako je pak naveden argument start, argument end može, ali i ne mora biti naveden. Ako argument end nije naveden, metoda završava s posljednjim indeksom niza. U slučaju ako podniz ne postoji, tada vraća 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() vraća string u kojem je podniz uklonjen s početka i kraja niza. Sintaksa ove metode je niz.strip([chars]). Metoda prima jedan opcionalni argument. Argument chars opcionalni je argument koji sadrži podniz koji želimo ukloniti s početka 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() vraća tip podatka listu svih riječi iz niza znakova upotrebljavajući neki separator. Sintaksa ove metode je niz.split([sep[, maxsplit]]). Metoda prima dva opcionalna argumenta. Argument sep opcionalni je argument koji sadrži podniz koji želimo upotrijebiti kao separator. Ako argument nije naveden, pretpostavljena vrijednost je razmak. Argument maxsplit opcionalni je argument koji sadrži cjelobrojnu vrijednost koliko puta želimo izvršiti razdvajanje. Argument je ovisan o argumentu sep. Ako nije naveden argument sep, ne može biti naveden niti argument maxsplit. Ako je pak naveden argument sep, argument maxsplit može, ali i ne mora biti naveden. Ako maxsplit nije naveden, metoda vrši maksimalan mogući 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() vraća 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 vrši metoda (niz). Metoda prima jedan obavezan argument. Argument list obavezni je argument koji sadrži listu čije elemente želimo spojiti pomoću niza znakova nad kojim vršimo 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 možete naći ovdje: Zadaci

1.10. Rad s listama

Liste (list, sequence) (List)) su složeni tipovi podataka koji mogu sadržavati više 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. Sadržaj elementa tj. njegova vrijednost može se u listi pojaviti više 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 pridruživanja =.


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 možemo inicijalizirati bez sadržavanja vrijednosti:


In [109]:
prazna_lista=[]
print prazna_lista


[]

Liste je moguće 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 moguće indeksirati unutar elemenata liste onih tipova podataka koji podržavaju indeksiranje (npr. nizovi znakova i liste) na sljedeći način:


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


a
d

Nad listama je moguće vršiti konkatenaciju na sljedeći način:


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() računa duljinu liste, odnosno vraća 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 moguće vrijednost postojećeg 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 vrše nad listama:

  • append()
  • insert()
  • remove()

1.10.1.1. Metoda append()

Metoda append() dodaje element u postojeću listu. Sintaksa ove metode je lista.append(obj). Metoda prima jedan obavezan argument. Argument obj obavezni je argument koji sadrži vrijednost elementa koji želimo dodati u postojeću listu. Objekt se dodaje na kraj liste. Metoda ne vraća nikakvu vrijednost, već ažurira postojeću 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() moguće je dodati element u postojeću listu na određeno mjesto u listi. Sintaksa ove metode je lista.insert(index, obj). Metoda prima dva obavezna argumenta. Argument index obavezni je argument koji sadrži cjelobrojnu vrijednost indeksa na koji želimo dodati element u postojeću listu. Argument obj obavezni je argument koji sadrži vrijednost elementa koji želimo dodati u postojeću listu. Metoda ne vraća nikakvu vrijednost, već ažurira postojeću 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 postojeće liste. Sintaksa ove metode je lista.remove(obj). Metoda prima jedan obavezni argument. Argument obj obavezni je argument koji sadrži vrijednost elementa koji želimo obrisati iz postojeće liste. Metoda ne vraća nikakvu vrijednost, već ažurira postojeću 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 moguće 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 možete naći ovdje: Zadaci

1.11. Kontrola tijeka

Kontrola tijeka (control flow, flow control) (Control flow) određuje kojim redoslijedom se vrše određene naredbe u računalnom programu. Naredbe kontrola tijeka postavljaju određene uvjete koji se trebaju ispuniti prije njihovog izvršavanja, odnosno, ako se uvjeti ne ispune, naredbe se neće izvršiti. Skup naredbi često je strukturiran u blok naredbi. U sintaksi Pythona blok naredbi definira se uvlakama, a najavljuje se dvotočkom.

Kontrola tijeka izvodi se selekcijom i iteracijom. Selekcija je grananje programa s obzirom na zadovoljenost nekog logičkog uvjeta. Naredba kojom se vrši selekcija naziva se if naredba. Iteracija je uzastopno ponavljanje niza naredbi, a vrši 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 vrši selekcija, odnosno grananje programa s obzirom na zadovoljenost jednog ili više logičkih uvjeta, naziva se if naredbom. Sintaksa naredbe ima jednu obaveznu if izjavu, jednu ili više opcionalnih elif izjava (od else if) i jednu opcionalnu else izjavu. Blok naredbi definiran je uvlakama, a najavljuje se dvotočkom.

Na sljedeći način ispisat ćemo "Broj je veći od 5." za sve brojeve koji su veći od 5 te provjeriti uvjet s brojevima 3 i 10:


In [119]:
a=3
if a>5:
    print 'Broj je veći od 5.'

In [120]:
b=10
if b>5:
    print 'Broj je veći od 5.'


Broj je veći od 5.

Kod provjere s brojem 3, logički uvjet nije ispunjen (tj. rezultat logičkog izraza je FALSE), jer 2 nije veći od 5 te se nije ispisao zadani tekst. Kod provjere s brojem 10, logički uvjet je ispunjen (tj. rezultat logičkog izraza je TRUE) te se ispisao zadani tekst.

Na sljedeći način 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 logičkog izraza je TRUE), ispisat će se "Broj je paran." (print 'Broj je paran.'). Za sve ostale slučajeve (else), ispisat će se "Broj je neparan" (print 'Broj je neparan.).

Moguće 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 množimo s 3. Ako broj nije djeljiv s 2, broj množimo s 5.

Isti zadatak moguće je riješiti logičkim operatorom and na sljedeći način:


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 (logički operator and) je li broj manji od 10. Tek kada se oba uvjeta ispune, broj množimo s 3. Ako uvjet nije ispunjen, broj množimo s 5.

Na sljedeći način moguće je upotrijebiti logički 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 (logički operator or) je li broj djeljiv s 3. Samo je jedan uvjet potrebno izvršiti kako bi broju zbrojili 4. Ako nije ispunjen ni jedan od uvjeta, oduzima se broj 8.

Na sljedeći način možemo postaviti složeni 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 vrši 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 počevši od prvog elementa. Petlja se izvršava 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 može kroz nizove znakova i liste. Kada stavimo niz znakova u for petlju, iterira se od prvog znaka niza do posljednjeg znaka. Na primjer, u sljedećem primjeru iterirat ćemo kroz niz znakova te u svakoj iteraciji ispisati trenutnu vrijednost pomoćne varijable.


In [132]:
for znak in 'neki niz':
    print 'Pomoćna varijabla "znak" poprima vrijednost: '+znak


Pomoćna varijabla "znak" poprima vrijednost: n
Pomoćna varijabla "znak" poprima vrijednost: e
Pomoćna varijabla "znak" poprima vrijednost: k
Pomoćna varijabla "znak" poprima vrijednost: i
Pomoćna varijabla "znak" poprima vrijednost:  
Pomoćna varijabla "znak" poprima vrijednost: n
Pomoćna varijabla "znak" poprima vrijednost: i
Pomoćna varijabla "znak" poprima vrijednost: z

Iz primjera je vidljivo da pomoćna 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 trećoj iteraciji poprima vrijednost k i tako sve do posljednjeg znaka niza kroz koji iteriramo. Vrši se onoliko iteracija koliko ima znakova u nizu. Naziv pomoćne varijable znak je proizvoljan.

Moguće je kombinirati if naredbu i for petlju. U sljedećem 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 pomoćne varijable u navedenom nizu znakova te vraća logički tip podatka. Budući da se n ne nalazi, prva iteracija for petlje završava i kreće druga iteracija for petlje. U drugoj iteraciji znak poprima vrijednost e. Zatim se provjerava nalazi li se ta vrijednost u nizu 'aeiou'. Budući da je uvjet ispunjen, ispisuje se trenutna vrijednost pomoćne varijable znak, što je u ovom slučaju e. Ovdje završava druga iteracija i kreće treća iteracija for petlje, kada znak poprima vrijednost k. Zatim se provjerava nalazi li se ta vrijednost u nizu aeiou. Budući da se k ne nalazi, završava treća iteracija petlje i kreće četvrta iteracija. U četvrtoj iteraciji znak poprima vrijednost i. Zatim se provjerava nalazi li se ta vrijednost u nizu aeiou. Budući da je uvjet ispunjen, ispisuje se trenutna vrijednost pomoćne varijable znak. Ovdje završava četvrta iteracija te kreće peta iteracija for petlje. I tako sve do kraja zadnjeg znaka u nizu neki niz. Vrši se i dalje onoliko iteracija petlje koliko ima znakova u nizu, samo zbog dodatnog uvjeta ispisujemo jedino one znakove koji ispunjavaju uvjet.

Brojačem možemo 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, možemo izračunati 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 sadrži 7, a ne 6 samoglasnika. Logički uvjet u if naredbi provjerava nalazi li se pomoćna varijabla znak u nizu aeiou. Budući da je logički uvjet ispunjen samo kada znak poprimi vrijednost samoglasnika pisanog malim slovima, ovako postavljen uvjet preskače prvi znak u varijabli niz odnosno veliko slovo O. Problem se rješava trikom tako da se niz pretvori u mala slova metodom lower() na sljedeći način:


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 možemo 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 pridružiti nizu samoglasnici ako je logički 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 možemo kroz listu. Kada stavimo listu u for petlju, iterira se od prvog elementa liste do posljednjeg elementa liste. Na primjer, u sljedećem primjeru iterirat ćemo kroz listu te u svakoj iteraciji ispisati trenutnu vrijednost pomoćne 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 pomoćna varijabla element poprima vrijednost 1. U drugoj iteraciji element poprima vrijednost 2. U trećoj 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 možemo provjeriti kojeg je tipa podatka pomoću funkcije type():


In [138]:
for element in [1, 2, 'tri', [4,'pet'], 6.0]:
    print 'Element je sljedećeg tipa podatka: '+ str(type(element))


Element je sljedećeg tipa podatka: <type 'int'>
Element je sljedećeg tipa podatka: <type 'int'>
Element je sljedećeg tipa podatka: <type 'str'>
Element je sljedećeg tipa podatka: <type 'list'>
Element je sljedećeg tipa podatka: <type 'float'>

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

U sljedećem 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 dužina elementa liste veća od 3. Ako je veća, onda ispisuje element. U prvoj iteraciji pomoćna varijabla element poprima vrijednost 'jedan'. Zatim se provjerava je li dužina trenutne vrijednosti pomoćne varijable veća od 3. Budući da je jedan ima više od 3 znaka, uvjet je ispunjen i trenutna vrijednost pomoćne varijable element se ispisuje. Kreće druga iteracija u kojoj element poprima vrijednost 'dva'. Zatim se provjerava je li dužina trenutne vrijednosti pomoćne varijable veća od 3. Budući da dva nema više od tri znaka (ima upravo tri znaka, ali ne više od tri znaka), uvjet nije ispunjen te tu završava druga iteracija i kreće treća iteracija. I tako sve do posljednjeg elementa liste.

U sljedećem 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

Možemo izračunati prosječnu 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 računali 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 trećoj 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 završila iteracija, cjelobrojnu vrijednost varijable duljina_znakova pretvorili smo u realni tip podatka te podijelili s dužinom liste (tj. brojem elemenata u listi). Budući 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 nećemo dobiti razlomački dio.

Kada imamo brojač kojim brojimo koliko se puta neki fenomen pojavljuje u određenoj sekvenci ili zbrajamo elemente, taj brojač moramo svesti na vrijednost 0 dodjeljivanjem tu vrijednost varijabli. U sljedećem primjeru izračunat ćemo zbroj elemenata u listi, a brojač pohraniti u varijabli i. Na kraju iteracije ispisujemo vrijednost brojača.


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


15

Moguće je pratiti koje vrijednosti poprima brojač i u svakoj iteraciji, tako da se ispiše 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 brojača i je 0. U prvoj iteraciji pomoćna varijabla element poprima vrijednost prvog elementa liste odnosno 1 te tu vrijednost dodaje brojaču. Vrijednost brojača i sada je 1 te se ta vrijednost ispisuje. U drugoj iteraciji pomoćna varijabla element poprima vrijednost drugog elementa liste odnosno 2 te tu vrijednost zbraja na trenutnu vrijednost brojača. Vrijednost brojača i sada je 1+2 odnosno 3 te se ta vrijednost ispisuje. U trećoj iteraciji pomoćna varijabla element poprima vrijednost trećeg elementa liste odnosno 3 te tu vrijednost zbraja na trenutnu vrijednost brojača. Vrijednost brojača i sada je 3+3 odnosno 6 te se ta vrijednost ispisuje. U četvrtoj iteraciji pomoćna varijabla element poprima vrijednost četvrtog elementa liste odnosno 4 te tu vrijednost zbraja na trenutnu vrijednost brojača. Vrijednost brojača i sada je 6+4 odnosno 10 te se ta vrijednost ispisuje. U petoj iteraciji pomoćna varijabla element poprima vrijednost petog elementa liste odnosno 5 te tu vrijednost zbraja na trenutnu vrijednost brojača. Vrijednost brojača i sada je 10+5 odnosno 15 te se ta vrijednost ispisuje.

Zadatke možete naći ovdje: Zadaci