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.
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.
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
In [10]:
print "Hello world"
In [11]:
s="Hello world"
In [12]:
print s
In [13]:
print s.upper()
In [14]:
print s.replace("o","O")
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.
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]:
In [16]:
-7897
Out[16]:
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.
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]:
In [18]:
-7213.6241
Out[18]:
In [19]:
2.66e-23
Out[19]:
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
.
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]:
In [21]:
"Ovo je isto niz znakova."
Out[21]:
In [22]:
"Ovo je 'niz znakova' u kojem se nalazi 'kombinacija' navodnika."
Out[22]:
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]:
kao, u ovom slučaju realnu vrijednost:
In [26]:
3.14
Out[26]:
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]:
Ako se niz pohrani u varijablu, može se indeksirati preko naziva varijable:
In [28]:
niz='Ovo je niz.'
niz[0]
Out[28]:
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]:
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]:
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]:
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]:
In [34]:
niz[7:-5]
Out[34]:
In [35]:
print 'Prvi red niza.\nDrugi 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 |
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]:
In [37]:
4.5>9
Out[37]:
Zadatke možete naći ovdje: Zadaci
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>
Prilikom imenovanja varijabli treba imati na umu sljedeće:
['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.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
Realna vrijednost -16.85
pohranjuje se u varijablu nazvanu broj2
na sljedeći način:
In [39]:
broj2=-16.85
print broj2
Na sljedeći način se niz znakova Ovo je niz
pohranjuje u varijablu nazvanu niz1
:
In [40]:
niz1='Ovo je niz'
print niz1
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
In [46]:
a=20
b=10
print a+b
In [47]:
a=20
b=10
print a-b+3
In [48]:
a=20
b=10
print a*b
In [49]:
a=20
b=10
print a/b
In [50]:
c=7
d=2
print c/d
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
Drugi način je korištenje funkcije float()
koja pretvara cijeli broj u realni.
In [52]:
c=7
d=2
print float(c)/d
In [53]:
print c/float(d)
In [54]:
c=7
d=2
print c%d
In [55]:
b=10
d=2
print b**2
In [56]:
a=20
b=10
print a==b
In [57]:
c=7
print c==7
In [58]:
a=20
b=10
print a!=b
In [59]:
c=7
print c!=7
>
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
In [61]:
print b>a
<
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
In [63]:
print b<a
In [64]:
a=20
b=10
print a>=b
In [65]:
print b>=a
In [66]:
c=7
print c>=7
In [67]:
a=20
b=10
print a<=b
In [68]:
print b<=a
In [69]:
c=7
print c<=7
In [70]:
c=7
print c
In [71]:
a=20
b=10
a+=b
print a
print b
In [72]:
a=20
c=7
a-=c
print a
print c
In [73]:
a=20
b=10
a*=b
print a
print b
In [74]:
a=20
b=10
a/=b
print a
print b
In [75]:
c=7
d=2
c%=d
print c
print d
In [76]:
c=7
d=2
c**=d
print c
print d
In [77]:
'a' in 'Niz znakova.'
Out[77]:
In [78]:
'y' in "Niz znakova."
Out[78]:
In [79]:
'a' not in 'Niz znakova.'
Out[79]:
In [80]:
'y' not in 'Niz znakova.'
Out[80]:
In [81]:
2*5+2>=2**3*2
Out[81]:
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
In [82]:
int(3.7)
Out[82]:
In [83]:
int('3')
Out[83]:
In [84]:
print float(2)
In [85]:
print 7/2
In [86]:
print float(7)/2
In [87]:
print 7/float(2)
In [88]:
print float(7/2)
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
.
In [89]:
str(7.6)
Out[89]:
In [90]:
type('niz')
Out[90]:
In [91]:
type(2)
Out[91]:
In [92]:
type(5.8)
Out[92]:
In [93]:
type(False)
Out[93]:
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'
In [95]:
niz1='Ana i Ivo'
niz2='Iva i Jan'
print niz1[:3]+niz2[-3:]
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:]
ili
In [97]:
niz1='Ana i Ivo'
niz2='Iva i Jan'
print niz1[:3]+' i '+niz2[-3:]
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.'
In [99]:
s='Ana i Ivo'
print s.upper()
print s
In [100]:
s="Ana i Ivo"
print s.lower()
print s
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
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)
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')
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')
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)
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)
Zadatke možete naći ovdje: Zadaci
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]
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
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]
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]
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
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])
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
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
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
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
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
Zadatke možete naći ovdje: Zadaci
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
naredbafor
petlja.if
naredbaNaredba 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.'
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.'
In [122]:
b=10
if b%2==0:
print 'Broj je paran.'
else:
print 'Broj je neparan.'
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
In [124]:
d=11
if d%2==0:
if d<10:
d*=3
else:
d*=5
print d
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
In [126]:
d=11
if d%2==0 and c<10:
d*=3
else:
d*=5
print d
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
In [128]:
f=5
if f%2==0 or f%3==0:
f+=4
else:
f-=8
print f
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.'
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.'
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.'
for
petljaPetlja 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.
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
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
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
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
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
In [137]:
for element in [1, 2, 'tri', [4,'pet'], 6.0]:
print element
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))
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
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]
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)
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
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
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