ÐÏࡱá>þÿ TVþÿÿÿQRSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿì¥Áq`ð¿ìfbjbjqPqP .Š::­¤ÿÿÿÿÿÿ¤âââââââöþ®þ®þ®þ®¯Ôö¡ðöò¯ò¯ò¯ò¯ò¯ò¯ò¯ò¯ïïïïïïï—ñhÿó~ïAâò¯ò¯ò¯ò¯ò¯ïââò¯ò¯[ð²í²í²íò¯”âò¯âò¯ï²íò¯ï²í²íââ²íò¯æ¯ `MÒÛÉþ®†Î²íïqð0¡ð²í}ôží }ô²í²íF}ôâøî ò¯ò¯²íò¯ò¯ò¯ò¯ò¯ïï¨í ò¯ò¯ò¯¡ðò¯ò¯ò¯ò¯ööö¤Wš\dRöööš\öööââââââÿÿÿÿ Programski jezik Python   1. Uvod Oko 1972. godine pojavio se jezik C, prvi jezk ope namjene. Sedamnaest godina kasnije Guido van Rossum, istra~iva  na CWI (Stichting Mathematisch Centrum) u Nizozemskoj, radi na projektima vezanima uz interpreterskim jezik ABC. Nezadovoljan nefleksibilnoau tog i sli nih programskih jezika i nedostatkom alata za automatiziranje dosadnih sistemskih problema, odlu uje se razviti novi programski jezik. }elio je programski jezik koji bi mu omoguio rjeaavanje generalnih administratorskih zadaa brzo i fleksibilno, ali je istovremeno ~elio iskoristiti snagu sistemskih poziva Amoeba distribuiranog OS-a. I tako je, krajem 1989. godine, po eo razvijati programski jezik Python, koji je nazvao prema kultnoj BBC seriji  Monty Python's letei cirkus . 1996. godine Van Rossum je napisao o nastanku Python-a: "Over six years ago, in December 1989, I was looking for a "hobby" programming project that would keep me occupied during the week around Christmas. My office ... would be closed, but I had a home computer, and not much else on my hands. I decided to write an interpreter for the new scripting language I had been thinking about lately: a descendant of ABC that would appeal to Unix/C hackers. I chose Python as a working title for the project, being in a slightly irreverent mood (and a big fan of Monty Python's Flying Circus)." (Introduction to Programming Python, by Mark Lutz, published by O'Reilly) Iako je u po etku zamislio jezik koji bi bio specifi an samo za Amoeba OS, brzo je shvatio da mu je potreban jezik koji bi se mogao pokretati na svakoj platformi. 1991. godine u open source zajednicu je puaten interpreter za novi programski jezik, Python, napisan u C-u. Zbog injenice da je Python open source aplikacija, danas se uspjeano mo~e vrtiti na gotovo svakoj platformi (Linux, Windows, Macintosh, Solaris, OS/2, Amiga, AROS, AS/400, BeOS, Palm OS, Acorn RISC OS, PlayStation, Sharp Zaurus, Pocket PC, & )   1.2. Osnovna svojstva jezika Python Python je interpreterski jezik, ato zna i da se program ne kompajlira tj. ne prevodi se u strojni kod procesora nego u poseban, tzv. Python binarni kod. (Python bytecode) kojeg  pokree Python virtualna maaina. Zato se programi vrlo jednostavno mogu prenositi sa stroja na stroj, dovoljno je da se kod kopira i pokrene. Naravno, pod uvjetom da na tom stroju postoji odgovarajui virtualni stroj. Zbog injenice da se Python kod interpretira, a ne izvodi izravno u strojnom jeziku optimiziranom za odgovarajui procesor, Python programi su sporiji od ekvivalentnih programa pisanih u drugim jezicima. Ali, kao i Java, i Python virtualni strojevi pru~aju mogunost prevoena Python binarnog koda u mati ni izvedbeni kod koji je puno bli~i strojnom kodu i kao takav omoguava i br~e izvoenje. Tako Python omoguava dobre perfomanse svojim programima, a u isto vrijeme zadr~ava snagu interpreterskih jezika. Python podr~ava proceduralno i objektno orijentirano programiranje. Kod proceduralnog programiranja program se rastavlja na niz manjih zadataka  procedura  koje su dovoljno jednostavne da bi se mogle izraziti pomou naredbi programskog jezika. U takvom na inu programiranja procedure se odvajaju od podataka koje obrauju. Za razliku od toga, u objektno orijentiranom programiranju, cilj je spajanje podataka i operacija nad njima u objekte. Programer koji e koristiti taj objekt jednostavno od objekta zatra~i odreenu uslugu i ne zamara se razmialjajui o na inu na koji objekt funkcionira. Modularnost. Python je mogue koristiti na viae na ina. Naj eae se kod rastavlja na viae manjih modula koji meusobno mogu "komunicirati". Mo~e se vrlo jednostavno iz jednog modula pozivati procedure ili koji koristiti objekte drugog modula.. `to je joa va~nije, pristup modulima je uvijek isti, bez obzira da li se radi o ve ugraenim modulima iz Python-ove standardne biblioteke ili o modulu koji ste napravili trenutak prije. Python-ova standardna biblioteka podr~ava regularne izraze, generiranje dokumentacije, threadove, baze podataka, web pretra~iva e, CGI, ftp, elektroni ku poatu, XML, HTML, WAV datoteke, kriptografiju, GUI (grafi ko su elje) upotrebom Tk i joa mnogo toga. Isto tako, moduli se mogu pisati i u drugim jezicima, pa se mogu napisati u C-u, kompajlirati i preko Python su elja, koje je potpuno isto kao i kod Python modula, jednostavno koristiti. To omoguuje da se dijelovi koda koji predstavljaju usko grlo (vremenski su zahtjevni) ubrzaju i time znatno poboljaaju cjelokupno izvraavanje programa. Takav na in programiranja se podrazumijeva u jezicima kao ato su C i C++, ali je iznimka meu skriptnim jezicima. U python-u je vrlo jednostavno otkriti pogreaku u izvraavanju programa. U slu aju pogreake u izvoenju programa, mogue je pristupiti stogu programa, "stack trace" e to no odrediti vrstu i mjesto greake (exception) ato omoguuje vrlo lagano lociranje i ispravljanje pogreake u programu. Automatsko skupljanje smea. Curenje memorije ili prerano uniatenje objekata u tradicionalnim jezicima je vrlo est uzrok "blokiranja" rada programa ili cijelog ra unala. Python interpreter sam se brine da se oslobodi memorija koja viae nije potrebna  mehanizam za sakupljanje smea (garbage collection) je ugraen u sustav i automatski se pokree po potrebi. Programeri tako ne moraju imati pod kontrolom gdje su rezervirali prostor za neki objekt i gdje e se taj prostor osloboditi, ve se mogu fokusirati na samo rjeaavanje problema. S druge strane, kod automatskog skupljanja smea, sustav sam procjenjuje kada treba to sakupljanje zapo eti i nerijetko se to dogaa upravo onda ka program obavlja neku zahtjevnu operaciju. Zato se i kod ugraenog automatskog sustava za skupljanje smea treba esto paziti da ne novi objekti ne stvaraju neracionalno. 1.3. Usporedba s drugim programskim jezicima Python se vrlo esto usporeuje s drugim programskim jezicima zbog injenice da podr~ava viae programskih paradigmi, sam Python je nastao kao kombinacija mnogih drugih programskih jezika, uklju ujui ABC, Modula-3, C, C++, Algol-68, SmallTalk, razne skriptne jezike. Ali, poato je Python interpreterski jezik, najviae je usporedbi sa Perl-om, Javom, Tcl-om i JavaScript-om.  Perl, kao i Python, nudi snagu potpunog programskog jezika kao i pristup sistemskim pozivima. Najvea snaga Perl-a je u radu sa stringovima, Perl je najmoniji upravo u radu sa regularnim izrazima, filtriranju teksta i joa uvijek se naj eae koristi za pisanje CGI skripti. Problem Perl-a je u kompliciranoj sintaksi koju je ponekad vrlo teako itati, ato dovodi do frustrirajue teakog u enja jezika i nerazumljivih programa. Python se vrlo esto, zbog  podr~avanja objektno orijentiranog programiranja i sli ne sintakse, usporeuje sa Javom. Java, iako puno jednostavnija od C++-a, joa uvijek je kruta, posebno ako se ~eli napisati mali, brzi program. Python-ova jednostavnost omoguuje puno br~e pisanje malih programa nego upotreba iste Jave. Veliki korak u odnosu Python-a i Jave je razvoj JPython-a, Python interpretera napisanog isklju ivo u Javi. Sada je mogue pokretati Python programe na strojevima na kojima se vrti samo Java virtualni stroj. Vrlo je jednostavno u JPython-u raditi s Java objektima, komunicirati s njima, koristiti Java biblioteke klasa, kao da je Java u Python bila integrirana od po etka razvoja jezika. Od jezika koji je naj eae usporeuju s Python-om najsli niji je JavaScript po svojoj sintaksi i po injenici da je objektno orijentiran. Programeri JavaScript-e vrlo brzo i bez problema prihvaaju Python. Python se, za razliku od JavaScripte, pokree izvan Web pretra~iva a, a omoguava sistemske pozive i podr~ava vrlo jednostavno rjeaavanje problema koji se tradicionalno obavljaju pomou shell skripta. 2.Pokretanje Python program-a 2.1.Tri su na ina pokretanja Python programa Najjednostavniji je na in startanjem interpretera interaktivno. Pokree se iz komandne linije a kod se unosi liniju po liniju i izvraava. Dodatne opcije kada se interpreter pokree iz komande linije. -d provide debug output -O generate optimized bytecode (resulting in .pyo files) -S do not run import site to look for Python paths on startup -v verbose output (detailed trace on import statements) -X disable class-based built-in exceptions (just use strings); obsolete starting with version 1.6 -c cmd run Python script sent in as cmd string file run Python script from given file (see below) Primjer 2.1. (interaktivni interpreter iz komandne linije):      $ python Python 2.4 (#4, Dec 10 2004, 19:19:57) [GCC 2.95.2 20000220 (Debian GNU/Linux)] on linux2 Type "copyright", "credits" or "license" for more information. IDLE 1.1 -- press F1 for help >>> print 'hello world' hello world >>> Drugi na in je pokretanje skripte napisane u Python-u. Interpreter se poziva zajedno sa skriptom. Veina skripta zavraava sa ekstenzijom .py. Vrlo je va~no da se dobro izabere editor u kojem e se pisati program. Viae editora koji podr~avaju python sintaksu, meu njima su najpopularniji i najmoniji Vim i Emacs. Primjer 2.2. (hello world skripta) #!/usr/bin/pyhon # Filename : hello_world.py print 'hello world' </pre> /usr/bin/pyhon ozna ava puni put prema python interpreteru. Pokretanje interpretera sa skriptom: $ python hello_world.py hello world U Unix-u je mogue automatski pokrenuti interpreter bez da ga pokrenemo iz komadne linije. Jednostavno postavimo modove tako da skripta postane executable. $ chmod a+x hello_world.py $ ./hello_world.py hello world Trei na in pokretanja Python programa je koriatenje grafi kom su elja iz IDE (integrated development environment) okoline. IDLE je prvi Unix IDE za Python. Razvio ga je Guido van Rossum, prvi put za Python 1.5.2. IDLE je baziran na Tk-u, ato zahtijeva da ima Tcl/Tk instaliran na stroju. Veine IDE su elja sadr~i i editor i interpreter.      2.2. Ispis/unos   Unos korisnika je vrlo jednostavno dobiti pomou raw_input() funkcije Primjer 2.3. Unoaenje teksta >>> ime = raw_input('Unesi ime: ') Unesi ime: ana >>> print 'Tvoje ime je:', ime Tvoje ime je: ana Primjer 2.3. je samo za unos teksta. Kada ~elimo raditi s cijelim brojevima, unoaeni tekst se mora konvertirati u integer pomou funkcije int() Primjer 2.4. Ispis broja >>> broj = raw_input('unesi broj: ') unesi broj: 45 >>> print 'kvadrat unesenog broja je: %d' %int(broj)**2 kvadrat unesenog broja je: 2025 Isto kao i C, Python u naredbi print ima format specifikatore, koji po inju sa %, ima %d za integere, %s za stringove i %f za realne brojeve. 2.2.Komentari Komentar zapo inje direktno iza znaka # i nastavlja se do kraja linije. 3.Tipovi podataka Postoje dva na ina provjere tipa varijabli u programi. Za vrijeme kompajliranja programa (static typing) ili za vrijeme rada programa (dynamic typing). Python prodr~ava dynamic type ato zna i da nema deklaracija tipa varijabli ve da sam program za vrijeme rada odlu uje koji e tip pridru~iti kojoj varijabli. Takav na in koriatenja varijabli je Dave Thomas (razvojna zajednica Ruby jezika) nazvao duck typing ("(referring to a value) if it walks like a duck, and quacks like a duck, then it is a duck."). U praksi, dinami ko deklariranje funkcionira tako da svaki program za vrijeme svog rada pridjeljuje varijablama tipove ovisno o tome koje su im vrijednosti pridru~ene (operator pridru~ivana u Python-u je =). Valjanost tih tipova se provjerava tek kada se te varijable koriste u operacijama  u tom trenutku se i generiraju greake u slu aju upotrebe operatora koji nisu dozvoljeni nad tipovima varijabli koje su u izrazu. Meu jezicima koji podr~ava dinami ko deklariranje, Python je umjereno type-checked. Impilicitno pretvaranje je definirano za numeri ke tipove, npr. dozvoljeno je mno~iti complex broj i long integer bez eksplicitnog pretvaranja. Ali nema implicitnog pretvaranja izmeu numeri kih tipova i stringova (za razliku od Perl-a, u Python se ne mo~e operaciji sa stringom pridru~iti broj.) Ono ato Python ima je ugraena funkcija eval() koja ita string kao moguu operaciju: >>> eval('5+6') 11 >>> eval('7*8') 56 Vrlo je va~no je zapamtiti da je Python osjetljiv na velika i mala slova pa varijabla brojac nije jednaka varijabli Brojac. 3.1. Brojevi Python podr~ava etiri tipa brojeva: integer, long integer (mogu biti prezentirani i oktalno i heksadecimalno), float (realni) i complex (kompleksni). Primjeri unosa: int 0101 84 -237 0x80 -0X92 long 29979062458L -84140l 0xDECADEDEADBEEFBADFEEDDEAL float 3.14159 4.2E-10 -90. 6.022e23 -1.609E-19 complex  6.23+1.5j -1.23-875J 0+1j  9.80665-8.31441J -.0224+0j 3.2. Stringovi String je u Python-u neprekidni niz karaktera izmeu navodnika (jednostrukih ili duplih). Evo nekoliko primjera koriatenja operacija sa stringovima.   >>> pystr = 'Python' >>> iscool = 'is cool!' >>> pystr[0] 'P' >>> pystr[2:5] 'tho' >>> iscool[:2] 'is' >>> iscool[3:] 'cool!' >>> iscool[-1] '!' >>> pystr + iscool 'Pythonis cool!' >>> pystr + ' ' + iscool 'Python is cool!' >>> pystr * 2 'PythonPython' U Python-u se uvijek mo~e doi do brze pomoi za koriatenje neke funkcije ili naredbe. Jednostavno se u interpreter prompt-u napiae help(naredba). Npr. za pomo u radu sa stringom: >>>  help(str) 3.3. Operatori Standardni operatori funkcioniraju u Python-u kao i u bilo kojem drugom programskom jeziku. +          -          *         /         %         ** Uz standardno zbrajanje, oduzimanje, mno~enje, cjelobrojno dijeljenje/ostatak cjelobrojnog dijeljenja Python nudi i operator za potenciranje **. Python podr~ava operatore poput *=, +=, -=, /=, ali ne podr~ava C-ovsko predinkrementiranje i postinkrementiranje. Isto tako, Python ima i standardne operator za usporeivanje. <          <=       >         >=        ==       !=  <> Za razli ito postoje dva operatora != i <>. Preporu a se koriatenje operatora !=. Isto tako podr~ani su logi ki operatori and, or i not. Upotrebljavajui logi ke operatore mo~emo stvarati izraze poput: >>> (2 < 4) and (2 == 4) False >>> (2 > 4) or (2 < 4) True >>> not (6.2 <= 6) True >>> 3 < 4 < 5 True Zadnji izraz je u Python-u legalan, i zapravo je krai zapis ovoga. >>> (3 < 4) and (4 < 5) True 4.Kontrola toka programa 4.1. Naredba Python implicitno pretpostavlja da fizi ka linija koda odgovara logi koj naredbi. Ako se ~eli staviti viae logi kih naredbi u fizi ku liniju odvaja ih se s to ka-zarez. U praksi se takav na in pisanja koda izbjegava jer dovodi do nepreglednosti i ne itljivosti at je u suprotnosti sa Python ideologijom. 4.2. Blokovi naredba Blokovi naredba  grupe naredbi koje se uvjetno izvode ili ije se izvoenje ponavlja (a ponaaaju se poput jedne naredbe)  grupiraju se pomou uvlaka, za razliku od C-a i C++ gdje se blokovi grupiraju pomou viti astih zagrada. Vrlo je va~no paziti na sva prazna mjesta jer Python-u je svako prazno mjesto ispred naredbe uvlaka. Prazni blok naredbi definira se klju nom rije ju pass. 4.3. If-elif-else If naredba omoguuje grananje toka programa ovisno o tome da li je logi ki izraz istinit ili la~an. Ako je vrijednost izraza iza rije i if logi ka istina, izvodi se if_blok_naredbi, u protivnom se ispituje izraz iza elif, ako ni on nije to an izvodi se else_blok_naredbi. if  logi ki_izraz1:           if_blok_naredbi elif  logi ki_izraz2:     elif_blok_naredbi else:     else_blok_naredbi Python nema switch-case naredbu. Svi mnogostruki izbori se rade pomou if-elif-else naredbe. Za razliku od C/C++-a to u Python-u nije mukutrpno upravo zbog njegove iste sintakse. Primjer 4.1. Upotreba if-elif-else naredbe #!usr/bin/python # if_iga_pogadanja.py broj = 23 pogodi = int(raw_input('Unesi cijeli broj: ')) if pogodi == broj:     #pocetak bloka     print 'Pogodak!!!!'     #kraj bloka elif pogodi < broj:     print 'broj je veci.' else:     print 'broj je manji.' print 'Kraj.' 4.4. While petlja Prva od petlja kojom raspola~e Python je while petlja. Ona se koristi za ponavljanje bloka naredbi. While_blok_naredbi e se izvraavati dok god je logi ki uvjet iza while naredbe istinit. Blok naredbi iza else e se izvraiti na kraju petlje. while  logi ki_izraz:     while_blok_naredbi else:     else_blok_naredbi else u while petlji redundantan jer zapravo se bilo koja naredba koja dolazi iza while petlje izvraava nakon ato while petlja zavrai. Primjer 4.2. Upotreba while petlje #!usr/bin/python # while_igra_pogadanja.py broj = 23 stop = False while not stop:     pogodi = int(raw_input('Unesi cijeli broj: '))     if pogodi == broj:         #pocetak bloka         print 'Pogodak!!!!'         stop = True         #kraj bloka     elif pogodi < broj:         print 'broj je veci.'     else:         print 'broj je manji.' else:     print 'While je gotov.' print 'Kraj.' 4.5. For petlja Druga petlja kojom raspola~e Python, for petlja je viae sli na foreach petlji u shell skriptama nego tradicionalnoj for petlji u veini programskih jezika koja funkcionira kao broja . Petlja uzima kao ulaz niz elemenata i obraduje svaki element u bloku naredbi. Niz elemenata mo~e biti lista, tuple ili string, isto tako to mo~e biti i niz stringova ili brojeva. Primjer 4.3. Upotreba for petlje s nizom brojeva #!usr/bin/python #for.py for i in range(1,5):     print i 1 2 3 4 Primjer 4.4. Upotreba for petlje s nizom stringova #!usr/bin/python #for_string.py print 'moji predmeti pasa su:' for predmet in ['pin','unix','nwp','mat 2']     print predmet, print $ python for_string.py moji predmeti su: pin unix nwp mat 2 Predmeti su ispisani svi u istom redu zbor zareza u printu koji ozna ava da se sljedei ispis nastavlja u istom redu. 4.6. break i continue Break naredbom se prekida izvoenje petlje, bez obzira na logi ki izraz u petlji koji joa uvijek mo~e biti istinit. Continue naredba uzrokuje skok programa na kraj petlje, ali se petlja nastavlja na sljedeu iteraciju. Primjer 4.5. Upotreba break i continue naredbe #!/usr/bin/python #break_continue.py while True:     s = raw_input('Unesi neato(izlaz): ')     if s == 'izlaz':         break     if len(s) < 3:         continue     print 'dovoljna duzina' print 'Kraj'   $ python break_continue.py Unesi nešto(izlaz): a Unesi nešto(izlaz): 45 Unesi nešto(izlaz): 123 dovoljna duzina Unesi nešto(izlaz): izaz dovoljna duzina Unesi nešto(izlaz): izlaz Kraj 5.Funkcije 5.1.Deklaracija i koriatenje funkcija Ponavljani postupak, blok naredbi koji se esto koristi, stavlja se u jednu zasebnu cjelinu, funkciju i svaki put kad zatreba pokree pozivom te funkcije. Onom tko poziva funkciju nije va~no ato u njoj piae, jedino je va~no ono ato funkcija prima (argumenti) i ono ato funkcija vraa. Primjer 5.1. Prva funkcija #!usr/bin/python #prva_funkcija.py #definiranje funkcije nadiMax sa dva argumenta a i b def nadiMax(a,b):     if a > b:         return a     else:         return b   #poziv funkcije print nadiMax(4,7), 'je najveci' x=-3 y=-6 print nadiMax(x,y),'je_najveci' $ python prva_funkcija.py 7 je najveci -3 je najveci Odmah nakon return naredbe vraa se tamo od kud je funkcija pozvana. Svaka funkcija implicitno sadr~i return naredbu. Ako uz return naredbu niata nije navedeno funkcija e vratiti None. None je specijalna vrijednost koja predstavlja ne postojanje vrijednosti. Kada varijabla nema vrijednosti, ima vrijednost None. 5.2. Lokalne i globalne varijable Pojedina funkcija u svojem radu mo~e za realizaciju ~eljenog algoritma trebati niz pomonih varijabli (objekata) #!usr/bin/python #funkcija_lokalna.py def funkcija(x):     print 'Lokalna varijabla x je',x     x = 2     print 'Lokalna varijabla x je',x x=50 funkcija(x) print 'x je',x $ python funkcija_lokalna.py Lokalna varijabla x je 50 Lokalna varijabla x je 2 x je 50 Python podr~ava i globalne objekte. Ako se ~eli u funkciji koristi varijabla definirana izvan nje koristi se global. #!usr/bin/python #funkcija_globalna.py def funkcija():     global x     print 'x prije promjene je',x     x = 2     print 'x poslije promjene je',x x=50 funkcija() print 'x je',x $ python funkcija_globalna.py x prije promjene je 50 x poslije promjene je 2 x je 2 5.2.Podrazumijevani argumenti U slu aju da se neke funkcije pozivaju vrlo esto sa istim vrijednostima mogu se definirati podrazumijevane vrijednosti argumenata funkcije. Argumenti s podrazumjevanom vrijednoau moraju se nalaziti na kraju liste argumenata. Isto tako umjesto pozicije u pozivu funkcije vrijednosti se mogu vezati uz neku odreenu varijablu. #!usr/bin/python #default_argumenti.py def funkcija(a,b=5,c=10):     print 'a je',a,',b je',b,', c je',c #dozvoljeni pozivi funkcija(3,7) funkcija(25,c=24) funkcija(c=50,a=100) $ python default_argumenti.py a je 3 ,b je 7 , c je 10 a je 25 ,b je 5 , c je 24 a je 100 ,b je 5 , c je 50 6.python Moduli Osnovna namjera modula je omoguiti efikasnije programiranje. Moduli su dokumenti koji sadr~e definicije i implementacije funkcija. Tako se onda mogu grupirati funkcije u module i koristiti iz svakog python programa. Te funkcije se mogu pozivati iz bilo koje programa tako da se moduli "importaju". Modul je zapravo python program koji sadr~i funkcije i varijable koje je pisac modula definirao. Python nudi svoju standardnu biblioteku, koja dolazi sa svakom instalacijom interpretera, u obliku modula. Sadr~i vrlo veliku koli inu korisnih modula za rad sa gotovo svime ato se mo~e zamisliti. Veina funkcija za rad sa sistemom dolazi u dva modula: sys (koji podr~ava rad sa Python interpreterom) i os (koji podr~ava rad sa operacijskim sustavom na kojem se Python interpreter vrti). 6.1. sys Primjer 6.1. Upotreba sys.argv liste (sadr~i argumente komandne linije) 24I:JúL”NÎOPP(P*P@PBPàS$T&TBTDT€T‚T¤T¦TüUDVFVbVdVÒVÔVWWðcdddd4d6d:djFjHjdjfjtjvj’j”jšjœjÀjÂjâjäjkk8k:kTkVkrktkÌrürþrs s6s8s@sBsfshsõîõîõîáõáõáõîáõáõáõáõîáõáõáõáõîáõáõáõáõîõîáõáõáõáõáõáõáõáõáõáõáõáõáõáõáõáõáõáõîáõáõáõáõáõhGÃh æ0JCJaJ hGÃh æhGÃh æCJaJY2\`@5šDœD4I>IeI˜I×IõIJ2J:JúLMTM|MŠMNLN|N”NÎOP÷ïêêèèêããããããããêããããããããêãgd ægd æ¤ð\$gd æ$a$gd æìfýP*PBPôRàS&TDT‚T¦TüUFVdVÔVWâXðcdd6djHjfjvj”jœjÂjäjk:kVktkülÌrþr s8sBshsrsŽs˜s"tRtúúúúúúúúúúúúúúúúõðúúúúúúúúõúgd ægd ægd æhspsrsŒsŽs–s˜s"t\t8RH…-‡\‹ä‹&ŒèŒ‘N’P’“Ø–"˜&˜J™êœúžæŸþ Ì¤ §®Æ€Ì„̴̆Ï@РЎغÛÊâ´åÐìœðtñ ñºôÜõÂ÷xøNùÒù¤úèüä  à Ö ´øüþ€Ôº$P0|7Ê7BÐE|I2LþMNOXO\RW@[D[F[B\ú^ìfóèóèóèáèáèáèáèáèáèáèáèáèáèáèáèáßèáèáèáèáèáèáèáèáèáèáèáèáèáèáèáèáèáèáèáèáèáèáèáèáèáèáèáU hGÃh æhGÃh æCJaJhGÃh æ0JCJaJVRt\t^t8Z†œú"€H€x€˜€À€ô€6RH…j…ž…´…Î…ð…+†B†Y†u†‰††úõõúúúúúúúúúúúúúõúúúúúúúúúúúgd ægd 憵†Ó†Ý†ü†‡‡-‡.‡\‹~‹Ž‹º‹Ò‹Ø‹Ü‹à‹ä‹&Œ7ŒFŒfŒ’Œ¥Œ«ŒÃŒÕŒèŒ‘úúúúúúúøóúúúúúúúúóúúúúúúúúúógd ægd æ‘(‘N‘h‘¼‘æ‘’’%’A’N’P’k’’˜’°’À’Ù’é’““ “Ø–ú–—Š—®—Ê—ì—úúúúúúúúúúõúúúúúúúúúóõúúúúúúgd ægd æì—˜"˜&˜F˜ˆ˜”˜ž˜Þ˜™.™J™êœ 6Z¤¸žž&žDžHžJž„ž¸žêžúžæŸúúõúúúúúúúúõúúúúúúúúúúúúúúúõgd ægd æ柠 + 8 [ e ‰  š © È ß ÷ þ Ì¤î¤¥P¥ ¥È¥ä¥¦2¦p¦¢¦Ö¦ §§úúúúúúúúúúúúúúõúúúúúúúúúúúúógd ægd 槧§§§®$Æ8ÆNÆ´ÆäÆÇ2ÇjÇ ÇÄÇìÇÈ(ÈTȊȨÈêÈ$É¢ÉÚÉÊJÊêÊýýýýøóóóóóóóóóóóóóóóóóóóóóóógd ægd æ#!/usr/bin/python # argv.py import sys # Funkcija koja ispisuje fajl na standardni izlaz def readfile(filename):     f = file(filename)     while True:         line = f.readline()         if len(line) == 0:             break         print line,     f.close() #glavni program if len(sys.argv) < 2:     print 'nema argumenta'     sys.exit() if sys.argv[1].startswith('--'):     option = sys.argv[1][2:]     #dohvaca prvi argument i kopira string osim prva dva znaka     if option == 'verzija':         print 'Verzija 1.00'     elif option == 'help':         print 'Ovo je help. Ovaj program ispisuje dokument na standardni izlaz'         print 'opcije programa ukljucuju'         print '--verzija - ispisuje verziju'         print '--help - ispisuje pomoc i izlazi' else:     for filename in sys.argv[1:]:         readfile(filename)   Model se uklju uje koristei import naredbu. U ovom primjeru importali smo sys modul. U trenutku kad Python interpreter doe do linije u kojoj piae import sys tra~i dokument sys.py u nekom od direktorija koji su u path-u. Ako nae dokument, naredbe u glavnom bloku tog modula se izvraavaju i funkcije modula se nakon toga mogu pozivati iz programa. 6.2. os Primjer 6.2. Izlistavanje sadr~aja direktorija >>> for line in os.popen('ls /B').readlines(  ):     print line[:-1] Primjer 6.3. (backup dokumenata i direktorija) #!/usr/bin/python #  backup_version.py import os, time # dokumenti i direktoriji za koje se radi backup izvor = ['/home/g2swaroop/all', '/home/g2swaroop/bin'] # odredisni direktorij odr_dir = '/mnt/d/backup/' # datum  stvara poddirektorij u glavnom odredisnom direktorju danas = odr_dir + time.strftime('%Y%m%d') # The time - the name of the zip archive sad = time.strftime('%H%M%S') # komenat korisnika komentar = raw_input('Enter a comment --> ') if len(komentar) == 0:     # da li je komentar unesen  # ime zip dokumenta odr = danas + os.sep + sad + '.zip' else:        odr = danas + os.sep + sad + '_' + \ komentar.replace(' ', '_') + '.zip' # ako nema poddirektorija, kreiraj ga if not os.path.exists(danas):         os.mkdir(danas)         print 'Uspjesno je kreiran direktorij ', danas # zip koji se pokrece zip_naredba = 'zip -qr %s %s' % (odr, ' '.join(izvor)) # pokreni backup if os.system(zip_naredba) == 0:         print 'Uspjesni backup u', odr else:         print 'Stvaranje backupa je propalo.' 6.3. socket Da se stvori veza izmeu maaina, Python programi importaju socket modul, kreiraju socket objekt, i pozivaju metode tog objekta da otvore vezu i aalju i primaju podatke. Metode socketa se direktno mapiraju na socket pozive u C biblioteci. Sljedeci primjer eka vezu na socketu, i kroz socket vraa ono ato je primio, dodajui 'Echo=>' ispred stringa. Primjer 6.4. Socket na server from socket import *                  # ukljuci modul socket myHost = ''                           # server, '' znaci localni host myPort = 50007                        # slusaj na slobodnom portu sockobj = socket(AF_INET, SOCK_STREAM)       # napravi TCP socket objekt sockobj.bind((myHost, myPort))               # postavi ga na port sockobj.listen(5)                            # slusaj, dozvoli 5 konekcija                                 # cekanju while 1:                                     # slusaj dok traje proces     connection, address = sockobj.accept()   # cekaj na sljedecu konekciju     print 'Server connected by', address     # konekcija je novi socket     while 1:         data = connection.recv(1024)    # citaj sljedecu liniju na klijentu         if not data: break                        connection.send('Echo=>' + data)     # posalji odgovor klijentu      connection.close() Na klijentskoj strani, upotrebljavaju se socketi pomou kojih se aalju podaci na server, i ispisuje odgovor servera; 'localhost' zna i da se klijent i server vrte na istoj maaini ato nam omoguava da testiramo skriptu. Za testiranje preko interneta: pokreni server na drugoj maaini, i postavi serverHost ili argv[1] na IP adresu te maaine. Primjer 6.5. socket na klijentu import sys from socket import *              serverHost = 'localhost'          # server ime serverPort = 50007                # slobodni port koji koristi server message = ['Hello network world']        # tekst koji se salje na server if len(sys.argv) > 1:     serverHost = sys.argv[1]       # ili server iz prvog argumenta     if len(sys.argv) > 2:                # ili iz drugog argumenta komandne linije         message = sys.argv[2:]           # poruka za svaki argument sockobj = socket(AF_INET, SOCK_STREAM)   # napravi TCP/IP socket objekt # spoji se na server i port servera sockobj.connect((serverHost, serverPort)) for line in message:     sockobj.send(line)                   # posalji preko socketa liniju     data = sockobj.recv(1024)       # primi liniju od servera preko socketa     print 'Client received:', `data` sockobj.close()                        # zatvori socket, server prima eof Poato je importanje modula vremenski zahtjevno Python optimizira modul i stvara Python binarni kod sa ekstenzijom pyc. Taj optimizirani Python-ov binarni kod ne ovisi o platformi na kojoj se vrti i mo~e se koristiti i iz drugih programa. Svaki modul ima ime koje se mo~e dobiti sa naredbom __name__ , koje je postavljen na __main__ kada se modul poziva samostalno, ato se mo~e iskoristit ako se ~eli izbjegnuti pokretanje nekog dijela glavnog programa u slu aju da je pozvan kao modul. if __name__=='__main__':     print 'samo ako se sam pokrecem'     print 'a ne kao modul iz drugog programa' 6.3. math i random >>> import math >>> math.cos(math.pi / 4.0) 0.70710678118654757 >>> math.log(1024, 2) 10.0 >>> import random >>> random.choice(['apple', 'pear', 'banana']) 'apple' >>> random.sample(xrange(100), 10)   # sampling without replacement [30, 83, 16, 4, 8, 81, 41, 50, 18, 33] >>> random.random()    # random float 0.17970987693706186 >>> random.randrange(6)    # random integer chosen from range(6) 4 6.4. Korisni ki moduli Svaki Python program je ujedno i modul. Tako da su svi primjeri u seminaru do sada moduli. Primjer 6.6. Moj prvi modul #name.py if __name__=='__main__':     print 'samo ako se sam pokrecem' verzija='1.01' def funkcija(a,b):     return (a*b) #moj_modul_primjer.py import name print name.verzija print name.funkcija(4,7) $ python moj_modul_primjer.py 1.01 28 ili se mo~e eksplicitno navesti koje se funkcije importaju. Primjer 6.7. Moj drugi modul #moj_modul_primjer1.py from name import funkcija print funkcija(4,7) $ python moj_modul_primjer1.py 28 Funkcija dir() lista sve funkcije i varijable uklju ene u modul. >>> import name >>> dir(name) ['__builtins__', '__doc__', '__file__', '__name__', 'funkcija', 'verzija'] 6.5. C à Python Kada u programu postoje dijelovi koda koji predugo traju i usporavaju rad programa  python omoguava koriatenje modula napisani i kompajliranih u C-u, ato uvelike mo~e ubrzati kriti ne dijelove koda. Primjer  6.8. Hello.c /* Jednostavan C modul za Python, "hello" */ #include <Python.h> #include <string.h> /* module funkcija */ static PyObject *                          /* vraa objekt */ message(PyObject *self, PyObject *args)    /* self neiskoriaten u modulu */ {                                                /* args poziva iz Pythona */     char *fromPython, result[64];     /* pretvori Python -> C */     if (! PyArg_Parse(args, "(s)", &fromPython))         /* null=exception */     return NULL;                                  else {         strcpy(result, "Hello, ");        /* dodaje string poslan iz Python-a */                     strcat(result, fromPython);               /* pretvaranje Python -> c */     return Py_BuildValue("s", result);             } } /* registracijska tablica  */ static struct PyMethodDef hello_methods[] = { /* ime metode, pointer na funkciju, uvijek-tuple */     {"message", message, 1},        {NULL, NULL}   }; , /* inicijalizacija modula */ /* poziva se na prvi import */ void inithello(  )                        {                                       /* ime je va~no jedino ako se dinami no u itava u Python */     (void) Py_InitModule("hello", hello_methods); } Napravite makefile #makefile.hello PY = $(DIR_PYTHON_HEADER) hello.so: hello.c     gcc hello.c -g -I$(PY)/Include -I$(PY) -fpic -shared -o hello.so clean:     rm -f hello.so core $ make  f makefile.hello $ Python >>> import hello                                   # import C modula >>> hello.message('svijet')                         # poziv C funkcije 'Hello, svijet' >>> hello.message('Ana') 'Hello, Ana' C funkcije izgledaju i koriste se iz Python-a kao da su napisane u njemu. Vrlo je malo razlika izmeu C modula hello i Python modula osim po imenu (ne zavraava na .py ili .pyc). C moduli ak i odgovaraju na dir() funkciju.   >>> dir(hello)                                     # C modul atributi ['__doc__', '__file__', '__name__', 'message'] >>> hello.__name__, hello.__file__ ('hello', './hello.so') >>> hello.message                                  # C funkcijski objekt 7.Strukture podataka Strukture podataka slu~e spremanju povezanih podataka u kolekciju. Tri su ugraene strukture podataka u Python-u  lista, tuple i rje nik. 7.1. Lista Lista je struktura podataka koja sadr~i ureenu kolekciju, tj. u listu mo~ea dodavati niz objekata koji su meusobno povezani. U listu mo~ea dodavati, iz nje brisati ili ju pretra~ivati. #!usr/bin/python # lista.py #Ovo je moja lista imena imena=['tomas','marko','mario','gorancic','tanja'] print 'U list je',len(imena),'imena' print 'imena:', for ime in imena:     print ime, print '\ndodavanje amelie' imena.append('amelia') print 'moja imena su sada',imena imena.sort() print 'sortirana imena su,',imena print 'prvo ime je',imena[0] brisano=imena[0] del imena[0] print 'obrisano je',brisano print 'moja imena su sada',imena $ python lista.py U list je 5 imena imena: tomas marko mario gorancic tanja dodavanje amelie moja imena su sada ['tomas', 'marko', 'mario', 'gorancic', 'tanja', 'amelia'] sortirana imena su, ['amelia', 'gorancic', 'mario', 'marko', 'tanja', 'tomas'] prvo ime je amelia obrisano je amelia moja imena su sada ['gorancic', 'mario', 'marko', 'tanja', 'tomas']   Joa nekoliko metoda liste: append(x)  dodaje na kraj liste insert(i,x)  dodaje element x na poziciju i remove(x)  briae prvi element iz liste pop(i)  - briae element na poziciji i, i vraa ga index(x)  vraa indeks prvog elementa u listi s vrijednoau x count(x)  brojac pojavljivanja elementa x u listi sort()  sortira elemente u listi reverse()  okrece redosljed elemenata u listi 7.2. Tuple Tuple ima istu strukturu kao i lista,  s tom razlikom da se elementi u tuple ne mogu mijenjati. Koriste se kada je sigurno da se lista objekata u programu nee mijenjati. #!/usr/bin/python # tuple.py zoo = ('vuk','slon','lisica') print 'Broj zivotinja je',len(zoo) novi_zoo = ('zebra','zeba',zoo) print novi_zoo print novi_zoo[2] print novi_zoo[2][2] $ python tuple.py Broj zivotinja je 3 ('zebra', 'zeba', ('vuk', 'slon', 'lisica')) ('vuk', 'slon', 'lisica') lisica 7.3. Rje nik Rje nik je kao telefonski imenik gdje se mo~e nai broj osoba znajui njihovo ime. Svakom objektu u rje niku pridru~uje se klju  sa vrijednostima. Klju  mora biti jedinstven  ne mo~e se nai prava osoba ako ih ima viae sa istim klju em. Za klju eve se mo~e koristiti samo nepromjenjive objekte poput stringova, dok se za vrijednosti mo~e koristiti sve. #!/usr/bin/python # dict.py tel={'mario':'3245-543',      'Tomas':'4324-323',      'Zoki':'4324-432'      } print 'telefon Tomas-a je %s' % tel['Tomas'] tel['Hrvoje']='4323-112' del tel['Tomas'] print '%d je ljudi u imeniku.' % len(tel) for ime,telefon in tel.items():     print 'ime %s - tel %s' %(ime,telefon) if tel.has_key('Hrvoje'):     print 'Hrvojev telefon je %s' %tel['Hrvoje'] $ python dict.py telefon Tomas-a je 4324-323 3 je ljudi u imeniku. ime mario - tel 3245-543 ime Zoki - tel 4324-432 ime Hrvoje - tel 4323-112 Hrvojev telefon je 4323-112 8.Objektno orijentirano programiranje Za razliku od proceduralnog programiranja koje je orijentirano na funkcije, objektno orijentirano programiranje je orijentirano na objekte, strukture koje kombiniraju podatke sa funkcionalnoau. U Python programskom jeziku sve je objekt. To uklju uje i funkcije i sve ugraene tipove podataka pa ak i integer. Metode klada se razlikuju od obi nih funkcija jedino po tome da imaju posebnu varijablu imena self  ta varijabla odnosi se upravo na objekt koji sadr~i te metode. Self varijabla je ekvivalenta this pokaziva u u C++-u. U klasi se mo~e definirati specijalna metoda imena __init__ koja e se pokrenuti odmah nakon ato se objekt stvori. Koristi se za inicijaliziranje po etnih vrijednosti ako je potrebno. Odgovara konstruktoru u C++-u. Postoji joa specijalnih metoda: __del__ (self) poziva se u prije nego ato se objekt uniati (destruktor) __str__(self) poziva se kada koristimo print sa objektom ili kada se upotrebljava str() __lt__(self,other) Poziva se kada se koristi operator <. Postoje metode za sve operatore (+,>,& ) __getitem__(self,key) Poziva se kada se koristi operator [] x[key] __len__(self) Poziva se kada se built-in funkcija len() koristi za objekt Unutar objekata postoje dva tipa varijabli  varijable klase i varijable objekta. Razlika izmeu tih dviju vrsta je u vlasniatvu  pitanje je tko je vlasnik tih varijabli  objekt ili klasa? Varijable klase se dijele izmeu svih objekata (instanci) klase. Varijable objekta su specifi ne za pojedina ni objekt i ne dijele se izmeu objekata. #!/usr/bin/python # objvar.py class Osoba:     populacija=0     def __init__(self,ime):         'Inicijalizacija osobe.'         self.ime = ime         print('inicijalizacija %s') %self.ime         'kada je osoba kreirana populacija se poveca'         Osoba.populacija += 1     def ispisImena(self):         print 'moje ime je %s' %self.ime     def kolikoIma(self):         #uvijek je barem jedna         if Osoba.populacija ==1:             print 'jedina sam osoba ovdje'         else:             print 'ima %s ljudi.' %Osoba.populacija zagor = Osoba('Zagor') zagor.ispisImena() zagor.kolikoIma() petro = Osoba('Petro') petro.ispisImena() petro.kolikoIma() marija = Osoba('Marija') marija.ispisImena() marija.kolikoIma() $ python objvar.py inicijalizacija Zagor moje ime je Zagor jedina sam osoba ovdje inicijalizacija Petro moje ime je Petro ima 2 ljudi. inicijalizacija Marija moje ime je Marija ima 3 ljudi. 8.1. Python podr~ava nasljeivanje. #!/usr/bin/python # nasljedivanje.py class ClanSkole:     'Bilo koji clan skole'     def __init__(self, ime,godine):         self.ime = ime         self.godine = godine         print 'inicijalizirani clan je %s' %self.ime     def ispis(self):         print 'Ime: %s, Godine:%s' %(self.ime,self.godine) class Ucitelj(ClanSkole):     'Svi ucitelji'     def __init__(self,ime,godine,placa):         ClanSkole.__init__(self,ime,godine)         self.placa = placa         print 'inicijaliziran ucitelj %s' %self.ime     def ispis(self):         ClanSkole.ispis(self)         print 'Placa je %s' %self.placa class Ucenik(ClanSkole):     'svi studenti'     def __init__(self,ime,godine,ocjene):         ClanSkole.__init__(self,ime,godine)         self.ocjene = ocjene         print 'inicijaliziran ucenik %s' %self.ime     def ispis(self):         ClanSkole.ispis(self)         print 'Ocjene su %s' %self.ocjene u = Ucitelj('Gosp. Grahorac',56,232321) uc = Ucenik('Mario',19,84) print clanovi=[u,uc] for clan in clanovi:     clan.ispis()     #radi i za ucenike i za ucitelje $ python nasljedivanje.py inicijalizirani clan je Gosp. Grahorac inicijaliziran ucitelj Gosp. Grahorac inicijalizirani clan je Mario inicijaliziran ucenik Mario Ime: Gosp. Grahorac, Godine:56 Placa je 232321 Ime: Mario, Godine:19 Ocjene su 84 9.Rad s tekstualnim datotekama Mogunost kreiranja, itanja i ispisivanja tekstualnih datoteka je vrlo va~an dio mnogih programa. 9.1. Datoteke Datoteke se mogu otvarati za itanje ili pisanje tako da se prvo kreira objekt tipa file. Tada se koriste read, readline, ili write metode file objekta da se ita ili piae u datoteku ovisno o tome u kojem je modu otvorena datoteka. Nakon zavraetka rada s datotekom metodom close se ona zatvara. Primjer 9.1 Tekstualna datoteka #!/usr/bin/python # fileobj.py tekst='''\ Ovo je prva linija tekst. ovo je druga linija teksta. Ovo je treca linija teksta. ''' f = file('tekst.txt','w') f.write(tekst) f.close f=file('tekst.txt') #datoteka se otvara u read modu while True:     linija=f.readline()     if len(linija) == 0: #duzina 0 indicira kraj fajla         break     print linija f.close() $ python fileobj.py Ovo je prva linija tekst. ovo je druga linija teksta. Ovo je treca linija teksta. 9.2. Pickle Standardni modul koji omoguava da se bilo koji Python objekt sprema u dokument i dobavlja kasnije (trajno spremanje objekata). Postoji joa jedan modul cPikle koji se ponaaa kao i pickle modul osim ato je napisan u C-u pa time puno br~i. Koriatenje i jednog i drugog modula je potpuno identi no. Primjer 9.2. Pickling i unpickling #!/usr/bin/python # pickle.py import cPickle listaDok = 'podaci.data' #ime dokumenta koji koristimo za spremanje lista=['hrast','bukva','lipa'] #pisanje, spremanje podataka f = file(listaDok,'w') cPickle.dump(lista,f) f.close()   del lista #citanje podataka f = file(listaDok) spremljena = cPickle.load(f) print spremljena $ python pickle.py ['hrast', 'bukva', 'lipa'] 10.Rukovanje iznimkama >>> 10 * (1/0) Traceback (most recent call last):   File "<stdin>", line 1, in ? ZeroDivisionError: integer division or modulo by zero >>> 4 + spam*3 Traceback (most recent call last):   File "<stdin>", line 1, in ? NameError: name 'spam' is not defined >>> '2' + 2 Traceback (most recent call last):   File "<stdin>", line 1, in ? TypeError: cannot concatenate 'str' and 'int' objects Iznimke su pogreake tj. odstupanja u radu programa. Mogu biti uzrokovane raznim dogaajima (pad sistema, nedozvoljeno pisanje po memoriji, dijeljenje s nulom,...) Kada se detektira takva situacija u python programu podi~e se iznimka. Iznimka se zatim prosljeuje pozivatelju funkcije koji ju obrauje. U slu aju da nema koda za obradu iznimke program se ruai. try:         # blok naredbi koji se pokusa izvrsiti except greska:         # blok naredbi koji obraduje iznimku greska else:         # blok naredbi koji se izvrsava ako nije  podignuta niti jedna iznimka Primjer 10.1. try-except #!/usr/bin/python # exception.py import sys class maliExcept(Exception):     'korisnicki definirana exception klasa'     def __init__(self,duzina,barem):         self.duzina = duzina         self.barem = barem try:     s = raw_input('Unesi nesto > ')     if len(s)<3:         raise maliExcept(len(s),3) except EOFError:     print 'Zasto EOF?' except maliExcept,x:     print 'Unos je bio duzine %d, najmanje je trebao biti %d' %(x.duzina,x.barem) else:     print 'nije dignuta nije jedna exception' EOFError  kada korisnik pritisne ctrl+d   Ako ~elimo izvraiti neki dio koda bez obzira je li doalo do greake ili nije koristimo Try& Finally Primjer 10.2. Try-Finally #!/usr/bin/python # try_finally.py try:     f = file('tekst.txt')     while True:         linija = f.readline()         if len(linija) == 0:             break         print linija, finally:     print 'Ciscenje...'     f.close() $ python try_finally.py Ovo je prva linija tekst. ovo je druga linija teksta. Ovo je treca linija teksta. Ciscenje... 11.zaklju ak Python je jednostavan programski jezik koji istovremeno ima snagu i slo~enost tradicionalnih programskih jezika (C, C++, & ) i jednostavnost skriptnih i interpreterskih jezika (Java, Perl, & ) . Iako je ponekad identificiran kao isto skriptni jezik, upotrebljavan je u mnogim velikim projektima kao ato je Zope aplikacijski server, Google i Mnet. itanje dobrog Python programa izgleda gotovo kao itanje engleskog. Vrlo je lako zapo eti u njemu programirati, a dovoljno je kompleksan da se u njemu mogu programirati i najte~i problemi. Za razliku od veine drugih programskih jezika, ne prisiljava programera da prihvaa jednu programsku paradigmu i razmialja o samoj metodi programiranja, ve da razmialja o rjeaavanju problema i onog ato zapravo ~eli u initi s programom. Programiranje u Python-u treba biti zabava... LITERATURA Wesley J. Chun: Core Python programming Mark Lutz: Introduction to Programming Python Mark Lutz: Programming Python, 2nd Edition C.H. Swaroop: A Byte of Python êÊ>˘ËúËÌJ̴̀̄̆ÏÐ@РÐÄÐîÐÑtÑâÑÒFÒÄÒÓjÓ¦ÓÐÓ*Ô–ÔÀÔÕúúúúúúõúõúúõúúúúúúúúúúúúúúúúgd ægd æÕ"ÕnÕ¶ÕÖNÖ~ÖÜÖ×vט×è×&ØBØŽØؘؚؒؔؖ؜؞ؠآؤئغÛ4Üúúúúúúúúúúúúúúøøøøøøøøøøøøóúgd ægd æ4ÜÀÜFÝÚÝ`ÞßJßÚßpàáá²áâ–âÈâÊâ´åÊåælæøæŒç¸ç>èäèléþéFêšêúúúúúúúúúúúúúúúõúúúúúúúúúúúúgd ægd æšêÆêVëîë8ìÎìÐìœðÎðñtñvñxñzñ ñÀñøñ òLòVò|òÚòêòróÀó ô4ô¶ôºôúúúúúúõúúúóóóõúúúúúúúúúúúúúúgd ægd æºôÜõîõ öjöˆö®öÐöþö÷@÷r÷°÷¼÷Â÷xø¦øÜøùFùNùÒùòùú¤ú¦ú¨úªúúõõõõõõõõõõõõõúõõõõõúõõõóóógd ægd æªúèüý8ýfýâýzþÔþÿ\ÿšÿþÿ8”ªödÀVnr° tÚàäúõõõõõõõõõõõõõõõõõõõõõõõõõõõgd ægd æ\°xÞâä ,bˆ"RT†˜"°Ð  à l Ê  B Ö úúúúúúúõúúúúúúúúúúúúúúõúúúúúgd ægd æÖ Ø Ú Ü Þ à â ´Öì †Ðð2j˜Úö:v˜²ê,RvÈýýýýýýøóóóóóóóóóóóóóóóóóóóóógd ægd æÈê†$Jpøüþ€¤ºø>~œÀê8’ÆÔÖØÚºÞòúúúúúúõúõúúúúúúúúúúúúúóóóõúúgd ægd æò& X † ” î  !B!–!Ö!,"`"Â"æ"#J#|#¬#à#$$$$P0t0Œ0¨0Ê01úúúúúúúúúúúúúúúúúúúøøøóúúúúúgd ægd æ1D1r1Î1:2v2ª2ü2.3l3®34 4ˆ4¸4Þ4525X5|5°5Ø5þ5&6R6v6¤6Ð6ô67úúúúúúúúúúúúúúúúúúúúúúúúúúúúúgd æ7<7b7|7~7€7‚7Ê7î7888n8¶8ä89ˆ9²9(:^:„:Ö:.;d;Ì;ö;2<‚<¶<Ü<úúúøøøóúúúúúúúúúúúúúúúúúúúúúgd ægd æÜ<0=ˆ=Â=(>R>Ž>â>4?j?v?”?¾?à?*@`@®@ú@6AnA®AÎAúABBBBÐEôEúúúúúúúúúúúúúúúúúúúúúúúøøøóúgd ægd æôEF&FZF’FÊFÒFG&G6G G¸GèGVHrH”H¨HÒHI@IzI|I2LVLnLŽLMVMMúúúúúúúúúúúúúúúúúúúúúõúúúúúúgd ægd æM¾MêMþMNN!e!˜!×!õ! """}#Ž#ª#¾#Å#$&$>$J$ç$%%!%z&ð&'"'A'S'þ'#(2(j(Š(q)ø./ ///S0p0¦0Õ01»1½1Ò1ê1÷1û1 222$232;2J2N2a2r2‹22«2º2~3f66…6œ6¡6´6¹6Ç6Ì67)7.7/7œ<­<Ã<Î<ý<=$=<=L=`=z=€=›=©=¤?µ?Ï?Ú?ç?ø?+@B@Y@u@‰@@µ@Ó@Ý@ü@AA-A.AÜBíBõB CCCCC CTCeCtC”CÀCÓCÙCñCDD°EÂEÕEâE F!F/FBFSFoF|F~F™F¯FÆFÞFîFGG1G6G7G£H´HÆHüHII-I7IHIJIZI{II†I¦IÁIÎIÜI¬K½KÒKäK LL8L>LJLYL[L\LyL“L¬L´L*M;MQMbMoM’MœMÀMÆMÑMàMÿMN.N5NO®OÄOßOPP)P;PPPoPˆP¢P½P¾P¿PÀPÁPÂP7TITST^T‘T©TÀTÐTìTUU-U;UKUaU|U‹U¬UÉUV$VAV\V¬VÖVW4W:W\WwWyWzWYCYWY‡Y™Y®Y¿YñY(Z?ZZZ™ZÃZìZ [[L[‚[—[»[È[î[\8\^\v\¥\»\ò\]+]J]X]~]]€]]‚]ƒ]„]…]†]‡]ˆ]‰]Š]_Q_—_Ú_$`g`·`Ü`$aoa·aÄab:b‚b›bœbdd>dmd³dýdeVe©eíe6fZf„fšfâf.gSgžgŸg…ižiÃiñiòióiôijj3jGj]jbjuj¤j¬jðjk=kQk’k”k%l.lGlll{lŽlŸl¶lÃl×lðlmmmsmŠm¥mºmÚmÞm n0n>n‰nŠn‹nŒn«o¿oÓoêo(ptp¡pÂpåpq6qSqqŒq²qéqr9rbrnrprr½rñr$s's)sFsess·sós&t(t)t=tMtht{tÀtÈtàtátútuHuuŸu¸uÅu§vívw@wXw¢w£w¤w¥w¦w§w¨wy"y-yGyzyŸy¯yÁyÐyìyz$z2zTzrzƒzz¬zÍzàzòz{,{z{É{Ü{ï{3|5|6|w~‰~”~³~Ö~ö~,?S€š¡¢£¤&0Jcz®ÇØ‚"‚M‚g‚˜‚ª‚Æ‚Ü‚õ‚ ƒ'ƒCƒDƒEƒFƒ_‰q‰}‰‹‰œ‰¸‰Ù‰ð‰ŠTŠrŠŒŠµŠÎŠíŠ‹9‹G‹{‹“‹¦‹¸‹Ð‹ã‹õ‹Œ#Œ6ŒJŒ`ŒrŒ‰ŒŸŒ±Œ¾ŒÕŒèŒõŒöŒ÷ŒøŒ.ASn’©ÆûŽKŽfŽyŽ¢ŽÎŽéŽ2Px’¥ÏûK`~¨Ñìò‘‘'‘L‘g‘Ž‘´‘Ò‘î‘’’4’A’B’C’D’”1”>”J”d”€”œ” ”»”ʔҔ••+•b•p••‹• •º•×•ô•õ•P—b—n—~——â—ÿ—˜,˜6˜8˜B˜U˜h˜…˜–˜ª˜Å˜Æ˜Ç˜È˜É˜Ê˜Ë˜Ì˜ã˜ò˜™4™j™y™œ™»™á™í™š/šeš¸œÊœÙœåœ/TqŒ’¶Çêûž'žyžž­ž×žÙžÚžXŸ´ µ ¶ · ¯¤0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€˜0€€®° 4!>!e!˜!×!õ! """}#Ž#ª#¾#Å#$&$>$J$ç$%%!%z&ð&'"'A'S'þ'#(2(j(Š(q)ø./ ///S0p0¦0Õ01»1½1Ò1ê1÷1û1 222$232;2J2N2a2r2‹22«2º2~3f66…6œ6¡6´6¹6Ç6Ì67)7.7/7œ<­<Ã<Î<ý<=$=<=L=`=z=€=›=©=¤?µ?Ï?Ú?ç?ø?+@B@Y@u@‰@@µ@Ó@Ý@ü@AA-AÜBíBõB CCCCC CTCeCtC”CÀCÓCÙCñCDD°EÂEÕEâE F!F/FBFSFoF|F~F™F¯FÆFÞFîFGG1G6G£H´HÆHüHII-I7IHIJIZI{II†I¦IÁIÎIÜI¬K½KÒKäK LL8L>LJLYLyL“L¬L´L*M;MQMbMoM’MœMÀMÆMÑMàMÿMN.N5NO®OÄOßOPP)P;PPPoPˆP¢P½P7TITST^T‘T©TÀTÐTìTUU-U;UKUaU|U‹U¬UÉUV$VAV\V¬VÖVW4W:W\WwWyWzWYCYWY‡Y™Y®Y¿YñY(Z?ZZZ™ZÃZìZ [[L[‚[—[»[È[î[\8\^\v\¥\»\ò\]+]J]X]~]_Q_—_Ú_$`g`·`Ü`$aoa·aÄab:b‚b›bœbdd>dmd³dýdeVe©eíe6fZf„fšfâf.gSgžgŸg…ižiÃiñijj3jGj]jbjuj¤j¬jðjk=kQk’k”k%l.lGlll{lŽlŸl¶lÃl×lðlmmmsmŠm¥mºmÚmÞm n0n>n‰n«o¿oÓoêo(ptp¡pÂpåpq6qSqqŒq²qéqr9rbrnrprr½rñr$s's)sFsess·sós&t(t)t=tMtht{tÀtÈtàtátútuHuuŸu¸uÅu§vívw@wXw¢wy"y-yGyzyŸy¯yÁyÐyìyz$z2zTzrzƒzz¬zÍzàzòz{,{z{É{Ü{ï{3|5|6|w~‰~”~³~Ö~ö~,?S€š¡¢£¤&0Jcz®ÇØ‚"‚M‚g‚˜‚ª‚Æ‚Ü‚õ‚ ƒ'ƒCƒDƒEƒ_‰q‰}‰‹‰œ‰¸‰Ù‰ð‰ŠTŠrŠŒŠµŠÎŠíŠ‹9‹G‹{‹“‹¦‹¸‹Ð‹ã‹õ‹Œ#Œ6ŒJŒ`ŒrŒ‰ŒŸŒ±Œ¾ŒÕŒèŒõŒ.ASn’©ÆûŽKŽfŽyŽ¢ŽÎŽéŽ2Px’¥ÏûK`~¨Ñìò‘‘'‘L‘g‘Ž‘´‘Ò‘î‘’’4’A’”1”>”J”d”€”œ” ”»”ʔҔ••+•b•p••‹• •º•×•ô•õ•P—b—n—~——â—ÿ—˜,˜6˜8˜B˜U˜h˜…˜–˜ª˜Å˜Æ˜Ç˜È˜É˜Ê˜Ë˜Ì˜ã˜ò˜™4™j™y™œ™»™á™í™š/šeš¸œÊœÙœåœ/TqŒ’¶Çêûž'žyžž­ž×žÙžÚžXŸ´ µ ¶ · ¯¤KÈ0öKÈ0€KÈ0€KÈ0€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€   š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€  š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€       š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€š@0€€€˜@0€€€˜@0€€€˜@0€€€ hsìfW\PÔiRt†‘ì—柧êÊÕ4ÜšêºôªúÖ Èò17Ü<ôEMTQú^ìfXZ[]^_`ab´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄìfYíïíî­°ëíë ì ëìëìž ghghKN3!7!=!>!M!N!d!f!—!˜!Ö!×!ô!ù! " """|#€###©#ª#½#À#Ä#Æ#$$%$($=$>$I$K$æ$é$%%%% %"%s&z&ï&ô&''!'&'@'A'R'T'ý'("(#(1(6(i(j(z({(‰(‹(o)q)q*r*q,r,q.r.÷.ü.// //////R0S0o0p0¥0¦0Ô0Õ011º1Á1Ñ1Ö1é1î1ö1÷1ú1ÿ1 2 22222#2(22232:2?2I2J2M2R2`2a2q2v2Š2‹2œ2¡2ª2«2¹2º2q3t3|3~3y5œ5e6k6y6|6~66„6Š6›6œ6 6¥6³6´6¸6½6Æ6Ç6Ë6Í677(7)7-7/7›<ž<¬<¯<Â<Ä<Í<Î<ü<þ<==#=(=7=:=;=A=K=L=_=d=y=z==„=š=›=¨=ª=£?¦?´?·?Î?Ð?Ù?Ú?æ?è?÷?ü?*@/@A@K@X@a@t@}@ˆ@’@œ@¡@´@½@Ò@×@Ü@å@û@ü@AAAA,A.AÛBÞBìBîBôBöB CCCCCCCCCCC!C-C.CSCVCdCfCsCuC“C”C¿CÄCÒCÓCØCÜCðCñCDDDD¯E³EÁEÃEÔEÖEáEæE FF F)F.F3FAFJFRFWFnFoF{F€F˜F™F®F¯FÅFÆFÝFÞFíFîFGGGG0G1G5G7G¢H¥H³HµHÅHÈHûHüH III$I,I1I6I?IGIKIYIZIzI|I€II…I†I¥I©IÀIÁIÍIÎIÛIÝI«K®K¼K¾KÑKÓKãKèKL LLL7L9L=L>LILJLXL^LxLyL’L“L«L¬L³LµL)M,M:MW[WdWvWzWYYBYGYVYXY†YŠY˜YœY­Y¯Y¾YÂYðYñY'Z*Z>Z?ZPZQZYZ\Z˜Z™ZÂZÅZëZìZ [ [[[K[L[[…[–[—[º[»[Ç[È[í[î[\\7\8\]\^\u\v\¤\§\º\»\ñ\ô\]]*]+]I]J]W]X]}]Š]__P_Q_–_—_Ù_Û_#`$`R`S`f`g`¶`Ô`Û`Ý`#a(aRaSanasa¶a»aÃaÌabb9bBbb‡bšbœb9c:cdddd9d>dldmd²d´düdýdeeUeZe¨e±eìeîe5f8fYfZfƒf…f™fžfáfæf-g2gRgTggŸg8h9h„i…ii¢iÂiÇiðiôij jjj2j3jFjKj\j]jajgjtjyj£j¤j«j°jïjñjôjõjkktLtNtgtitzttŠt‹t¿tÁtÇtÌtßtãtùtütuuGuLuŽuužu£u·u¸uÄuÆu¦v«vìvîvw!w?wAwLwMwWw]w¡w¨wyy!y$y,y/yFyGyyyzyžyŸy®y¯yÀyÅyÏyÑyëyìyzz#z%z1z2zSzUzqzrz‚zƒzzz«z¬zÌzÐzßzàzñzòz{{+{,{y{z{È{É{Û{Ü{î{ï{2|6|v~z~ˆ~‹~“~•~²~³~Õ~Ö~õ~ö~+/>?RT™š ¤¢€£€%(/1IObhy­®ÆÇ×Ø‚‚!‚&‚L‚M‚f‚k‚—‚›‚©‚ª‚Å‚Æ‚Û‚Ü‚ô‚õ‚ ƒ ƒ&ƒ'ƒBƒFƒC‰D‰^‰b‰p‰s‰|‰~‰Š‰‰›‰ ‰·‰À‰Ø‰á‰ï‰ø‰Š&ŠSŠ\ŠqŠvŠ‹Š”Š´Š¹ŠÍŠ×ŠìŠõŠ ‹‹8‹A‹F‹S‹z‹|‹’‹“‹¥‹¦‹·‹¹‹Ï‹Ð‹â‹ã‹ô‹ö‹ŒŒ"Œ#Œ5Œ9ŒIŒJŒ_Œ`ŒqŒrŒˆŒ‰ŒžŒŸŒ°Œ±Œ½Œ¾ŒÔŒÕŒçŒèŒóŒøŒ-0@BRWmr‘š¨±ÅÎúÿŽŽJŽLŽeŽjŽxŽ}Ž¡ŽªŽÍŽÖŽèŽñŽ!1:OXwy‘–¤©Î×éêú JO_h}†§©ÐÑëìñò‘‘‘‘&‘,‘K‘O‘f‘g‘‘Ž‘³‘´‘Ñ‘Ò‘í‘ï‘ ’’’’3’4’@’D’I’J’”"”0”3”=”?”I”J”c”d””€”›”œ”Ÿ”¡”º”»”ɔʔєӔ••••*•/•a•j•o•t•€••Š•Ž•Ÿ• •¹•»•Ö•Ø•ó•÷•O—S—a—d—m—o—}—~—Á—×á—ã—þ—ÿ—˜˜+˜,˜5˜8˜A˜D˜T˜U˜g˜h˜„˜…˜•˜™˜©˜«˜Ã˜Ì˜â˜ç˜ñ˜ò˜™™3™4™i™n™x™y™›™ž™º™»™à™å™ì™í™šš.š/šdšgš·œ»œÉœÌœØœÚœäœæœ.3S\py‹‘–µºÆÏéêúÿžž&ž+žxžyž~žƒž¬ž®žÖžÚžWŸ[Ÿ­Ÿ³Ÿ² · ¼¡¾¡¼¢½¢¬¤¯¤^_­°&'Ÿ ðñLN%&de3!5!=!>!d!e!—!˜!Ö!×!ô!õ! " """""Y#Z#|#}##Ž#©#ª#½#¾#Ä#Å#$$%$&$=$>$I$K$æ$ç$%%%% %"%y&z&ï&ð&''!'"'@'A'R'T'ý'þ'"(#(1(2(i(j(‰(‹())p)q)~++¡.¢.÷.ø.// / /////›/ž/B0C0R0S0o0p0¥0¦0Ô0Õ011º1½1Ñ1Ò1é1ê1ö1÷1ú1û1 2 22222#2$22232:2;2I2J2M2N2`2a2q2r2Š2‹2œ22ª2«2¹2º2}3~3ê3ë3í5î5e6f6~66„6…6›6œ6 6¡6³6´6¸6¹6Æ6Ç6Ë6Í677(7)7-7/7‡8ˆ8: :C;D;p<q<›<œ<¬<­<Â<Ä<Í<Î<ü<þ<==#=(=<=@=K=L=_=d=y=z==„=š=›=¨=ª=¯>°>€??£?¤?´?µ?Î?Ð?Ù?Ú?æ?è?÷?ü?*@/@A@J@X@a@u@}@ˆ@‘@œ@¡@´@½@Ò@×@Ü@å@û@ü@AAAA,A.AªB«BÛBÜBìBíBôBöB CCCC C!CSCTCdCeCsCuC“C”C¿CÄCÒCÓCØCÚCðCñCDDDDDŽD€EE¯E°EÁEÂEÔEÖEáEæE FF F)F.F3FAFJFRFWFnFoF{F~F˜F™F®F¯FÅFÆFÝFÞFíFîFGGGG0G1G5G7G‡HˆH¢H£H³H´HÅHÇHûHüH III$I,I1I6I?IGIJIYIZIzI|I€II…I†I¥I§IÀIÁIÍIÎIÛIÝIKK«K¬K¼K½KÑKÓKãKèKL LLL7L9L=L>LILJLXL\LxLyL’L“L«L¬L³LµL)M*M:M;MPMRMaMfMnMtM‘M–M›M M¿MÁMÅMÆMÐMÑMßMáMþMÿMNN-N.N4N7NœOO­O®OÃOÅOÞOãOPPPP(P)P:P;POPQPnPoP‡PˆP¡P¢P¼PÂP$S%SäSåS6T7THTITRTST]T_TT‘T¨T­T¿TÄTÏTØTëTôTUUU!U,U1U:U;UJUKU`UeU{U€UŠU‹U«U°UÈUÍUV V#V,V@VEV[VdV«V´VÕVÞVW W3W4W9W>W[WdWvWzW×XÙXYYBYGYVYXY†Y‡Y˜Y™Y­Y¯Y¾YÀYðYñY'Z(Z>Z?ZYZZZ˜Z™ZÂZÃZëZìZ [ [[[K[L[[ƒ[–[—[º[»[Ç[È[í[î[\\7\8\]\^\u\v\¤\¥\º\»\ñ\ò\]]*]+]I]J]W]X]}]Š]õ^ö^__P_Q_–_—_Ù_Û_#`$`f`g`¶`Ò`Û`Ý`#a(anasa¶a»aÃaÌabb9bBbb‡bšbœbðcñcdddd=d>dldmd²d´düdýdeeUeZe¨e±eìeîe5f6fYfZfƒf…f™fžfáfæf-g2gRgTggŸg„i…ii¢iÂiÇiðiôijjjj2j3jFjGj\j]jajcjtjuj£j¤j«j¬jïjðjkknˆnŒneofoªo«o¾o¿oÒoÔoéoêo'p(psptp p¥pÁpÆpäpépqq5q>qRqWq€q…q‹q”q±q¶qèqñqrr8r=rarlrprqrŽrr¼r½rðrõr#s$s&s'sEsFsdsesŽss¶s·sòs÷s%t&t(t*t?RS€™š ¤%&/1IObhy­®ÆÇ×Ø‚‚!‚&‚L‚M‚f‚k‚—‚™‚©‚ª‚Å‚Æ‚Û‚Ü‚ô‚õ‚ ƒ ƒ&ƒ'ƒBƒFƒ0„1„W†X†^‰_‰p‰q‰|‰~‰Š‰‰›‰ ‰·‰À‰Ø‰á‰ï‰ø‰Š&ŠSŠ\ŠqŠvŠ‹Š”Š´Š¹ŠÍŠÖŠìŠõŠ ‹‹8‹A‹F‹S‹z‹|‹’‹“‹¥‹¦‹·‹¹‹Ï‹Ð‹â‹ã‹ô‹ö‹ŒŒ"Œ#Œ5Œ7ŒIŒJŒ_Œ`ŒqŒrŒˆŒ‰ŒžŒŸŒ°Œ±Œ½Œ¾ŒÔŒÕŒçŒèŒôŒøŒ-.@BRWmr‘š¨±ÅÎúÿŽŽJŽLŽeŽjŽxŽ}Ž¡ŽªŽÍŽÖŽèŽñŽ!1:OXwy‘–¤©Î×ú JO_h}†§©ÐÑëìñò‘‘‘‘&‘+‘K‘M‘f‘g‘‘Ž‘³‘´‘Ñ‘Ò‘í‘ï‘ ’’’’3’4’@’D’Ç’È’þ“ÿ“””0”1”=”?”I”J”c”d””€”›”œ”Ÿ”¡”º”»”ɔʔєӔ••••*•/•a•j•o•t•€••Š•Œ•Ÿ• •¹•»•Ö•Ø•ó•÷•,—-—O—P—a—b—m—o—}—~—Á—×á—â—þ—ÿ—˜˜+˜,˜5˜8˜A˜C˜T˜U˜g˜h˜„˜…˜•˜—˜©˜ª˜Ä˜Ì˜â˜ã˜ñ˜ò˜™™3™4™i™j™x™y™›™ž™º™»™à™á™ì™í™šš.š/šdšgšÏ›Ñ›·œ¸œÉœÊœØœÚœäœæœ.3S\py‹‘–µºÆÏéêúÿžž&ž+žxžyž~žƒž¬ž®žÖžÚžWŸXŸ³ · ¢ ¢ù£ý£¬¤¯¤¯¤¯¤¾âYá N 6ü Ì;—"‡r?-Çs†2xãGíf%I•K«oFL>àLæa¡M}9DNk…UŽR¬aªqo½EsåGà æÿ@< "%'(/124=@.A.C.D.F7G7I7L7M7N7P7R7T­¤@@ @@@@@J@P@T@V@d@h@j@n@€@ @@ˆ@@@Ž@$@@”@˜@ž@@@@¢@¦@ª@ÆÿÿUnknownÿÿÿÿÿÿÿÿÿÿÿÿGî‡z €ÿTimes New Roman5€Symbol3&î ‡z €ÿArial?5î ‡z €ÿCourier New"ñˆðÄ©lÕfÝ´Õ¦ ”ŒT*”ŒT*!ð‰‰´´r4Y¤Y¤2ƒðHP)ðÿ?âÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ æ2ÿÿProgramski jezik Python Pa3K Sjul Pa3K Sjulþÿà…ŸòùOh«‘+'³Ù0Œ˜¼ÈÜèô ( H T `lt|„âProgramski jezik Python  Pa3K Sjul Normal.dot Pa3K Sjul3Microsoft Office Word@vÝA@”ñÓÓÉ@ÖËÛÉ”ŒþÿÕÍÕœ.“—+,ù®0 hp|„Œ” œ¤¬´ ¼ áâ*TY¤æ Programski jezik Python Title  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅþÿÿÿÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@þÿÿÿBCDEFGHþÿÿÿJKLMNOPþÿÿÿýÿÿÿýÿÿÿýÿÿÿUþÿÿÿþÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRoot Entryÿÿÿÿÿÿÿÿ ÀF@4ÒÛÉW€1TableÿÿÿÿÿÿÿÿÆ}ôWordDocumentÿÿÿÿÿÿÿÿ.ŠSummaryInformation(ÿÿÿÿADocumentSummaryInformation8ÿÿÿÿÿÿÿÿÿÿÿÿICompObjÿÿÿÿÿÿÿÿÿÿÿÿqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿ ÿÿÿÿ ÀFMicrosoft Office Word Document MSWordDocWord.Document.8ô9²q