Prevod

:
BagZačin

Prevod:

Sadržaj
Prevod:..................................................................................................................................................1 1 Zagrljaj Pitona...................................................................................................................................6 1.1 Ko čita “Zagrljaj Pitona”?..........................................................................................................6 1.2 Akademska predavanja.............................................................................................................. 1.! "i#en#a....................................................................................................................................... 1.$ %itajte je sad...............................................................................................................................& 1.' K(pite Knjig(............................................................................................................................& 1.6 Pre()imanje...............................................................................................................................& 1. %itajte knjig( na va*em maternjem je)ik(.................................................................................& 2 Predgovor..........................................................................................................................................+ 2.1 Za koga je pisana ova knjiga......................................................................................................+ 2.2 "ek#ija i) istorije.......................................................................................................................+ 2.! ,tat(s knjige...............................................................................................................................+ 2.$ Zvanična internet strani#a........................................................................................................12.' Par rečeni#a )a ra)mi*ljanje.....................................................................................................1! .vod................................................................................................................................................11 !.1 Karakteristike P/t0on1a...........................................................................................................11 !.1.1 2ednostavanost..................................................................................................................11 !.1.2 "ako se (či.......................................................................................................................11 !.1.! Beaplatan je i otvorenog koda 34ree and 5pen ,o(r#e6...................................................11 !.1.$ 7ig01level 2e)ik................................................................................................................11 !.1.' Prenosiv 3Porta8le6...........................................................................................................11 !.1.6 9nterpreter.........................................................................................................................12 !.1. 58jektno orijentisan.........................................................................................................12 !.1.& Pro*iriv.............................................................................................................................12 !.1.+ :.gradljiv: ( dr(ge programe..........................................................................................12 !.1.1- Pro*irive 8i8lioteke........................................................................................................12 !.2 ;a)like i)me<( ver)ija P/t0on 2 i P/t0on !............................................................................1! !.! =ta programeri ka>(?...............................................................................................................1! $ 9nstala#ija.........................................................................................................................................1$ $.1 9nstala#ija na ?indo@s1(.........................................................................................................1$ $.1.1 A5, komandna linija.......................................................................................................1$ $.1.2 Pokretanje P/t0on kon)ole na ?indo@s1(......................................................................1' $.2 9nstala#ija na Ba# 5, C1(.......................................................................................................1' $.! 9nstala#ija na "in(D1(..............................................................................................................1' $.$ ;e)ime.....................................................................................................................................1' ' Prvi kora#i.......................................................................................................................................16 '.1 Kori*Eenje interaktivnog prompt1a..........................................................................................16 '.2 9)8or (re<ivača teksta 3Fditora6...............................................................................................16 '.! Kori*Eenje i)vorne datoteke.....................................................................................................1 '.!.1 9)vr*avanje P/t0on programa...........................................................................................1+ '.$ Pronala>enje pomoEi................................................................................................................2'.' ;e)ime.....................................................................................................................................26 5snove.............................................................................................................................................21 6.1 Komentari................................................................................................................................21 6.2 Aoslovne konstante 3"iteral #onstants6....................................................................................21

1

Prevod: 6.! Brojevi.....................................................................................................................................21 6.$ ,tringovi 3reči 1 strings6...........................................................................................................21 6.$.1 9)me<( apostroGa..............................................................................................................22 6.$.2 9)me<( navodnika............................................................................................................22 6.$.! 9)me<( trostr(ki0 apostroGa ili navodnika.......................................................................22 6.$.$ ,tringovi se ne mog( menjati...........................................................................................22 6.$.' Betoda Gormatiranja.........................................................................................................22 6.' Promenljive..............................................................................................................................2$ 6.6 9menovanje promenljive 3identiGika#ija6.................................................................................2$ 6. Hipovi podataka........................................................................................................................2$ 6.& 58jekat.....................................................................................................................................2$ 6.+ Kako pisati P/t0on programe..................................................................................................2$ 6.1- Primer: Kori*Eenje promenljivi0 i literalni0 konstanti..........................................................2' 6.1-.1 "ogička i Gi)ička linija...................................................................................................2' 6.1-.2 .vlačenje.......................................................................................................................26 6.11 ;e)ime...................................................................................................................................2 5peratori i Fkspresije......................................................................................................................2& .1 5peratori..................................................................................................................................2& .1.1 Preči#e )a matematike opera#ije i dodavanja vrednosti...................................................2+ .2 Koje eval(a#ije imaj( proritet?................................................................................................2+ .! Promena redosleda i)vr*avanja eval(a#ije..............................................................................!.$ Aso#ijativnost 3dodela vrednosti6............................................................................................!1 .' 9)ra)i 3ekspresije6.....................................................................................................................!1 .6 ;e)ime.....................................................................................................................................!1 & Kontrola protoka..............................................................................................................................!2 &.1 9G komanda...............................................................................................................................!2 &.2 ?0ile nared8a..........................................................................................................................!! &.! Gor petlja...................................................................................................................................!' &.$ 8reak komanda.........................................................................................................................!6 &.$.1 ,@aroop1ova pesma o P/t0on1(......................................................................................!6 &.' #ontin(e komanda....................................................................................................................! &.6 ;e)ime.....................................................................................................................................! + 4(nk#ije...........................................................................................................................................!& +.1 Parametri G(nk#ije....................................................................................................................!& +.2 "okalne promenljive................................................................................................................!+ +.! Kori*Eenje glo8alni0 promenljivi0..........................................................................................$+.$ Podra)(mevane vrednosti arg(menata....................................................................................$1 +.' Arg(menti deGinisani pomoE( klj(čni0 reči.............................................................................$1 +.6 IarArgs parametri....................................................................................................................$2 +. Parametri samo sa klj(čnim rečima.........................................................................................$! +.& ret(rn komanda........................................................................................................................$! +.+ Ao#,trings 3stringovi koji sl(>e kao dok(menta#ija na*eg programa6...................................$$ +.1- ;e)ime...................................................................................................................................$' 1- Bod(li...........................................................................................................................................$6 1-.1 Kompajlirani .p/# Gajlovi.......................................................................................................$ 1-.2 Grom . . . import komanda......................................................................................................$ 1-.! 9mena mod(la........................................................................................................................$& 1-.$ 9)rada sopstveni0 mod(la......................................................................................................$& 2

...........................& 16.'1-......&! 1'.....................................................................................................................2 9)()e#i 3eD#eptions6.....................................................................................................................................2 H(ple..............................................................................................................................e*avanje pro8lema.......1 Pro8lem....... + 1$................................6 Pove)ivanja39n0eritan#e6....... .............' %etvrta ver)ija........................................................'& 11................... 4inall/.......................................................................................................................................................................1 ...................62 12...................................................................................................(kovanje #a eD#eptions1ima....e*enje................................................................&6 16 ..............&! 1'.........................................................................................................& ......................1 selG.......................................$ HreEa ver)ija... Pro#es ra)voja soGtvera...........'' 11....................2 logging mod(l.............................2 .. 1 1!........................................ .........................................................................&! 1'......................................................................... + 1$................61 12 ..............................................................................! Pi#kle......................................................................................$ .........................................................................................6 .....................................&6 1'.................................................................................'1 11 ........................................................e)ime.................................................................................................tandardne 8i8lioteke..........................................................................e)ime.........6 12.......................&& 16......................e)ime.............................................' Promenljive klasa i o8jekata...........................6$ 12...................................................................................................................................611.........................................................'+ 11......................................................6+ 1! 58jektno orijentisano programiranje..............................................................................................................e)ime.......................6' 12................ečnik 3Ai#tionar/6............................................................................................................2 Klase...........................................................................................................................................................................&' 1'........................................................................................' 4(nk#ija dir...e)ime..............................................................................& 16....................1 s/s mod(l........... 2 1!......$ 9nit metod..............................................62 12....................' Hr/ ...........'2 11................................! Ar(ga ver)ija....6 Pakovanje.......................................................................................................................................................................................$ ......................................................................................! ......................e)ime.........&+ ! ..1 "iste.............................6 @it0 komanda..........................2 4ajlovi...................................'2 11..................................................................................................................................&! 1'..................................................................................................................................... 1!....6 Ii*e prilago<avanja programa.....................................' .........................................................................................................................................................................................................................eGeren#e.....................................e)ime......................ekven#e...................................................&1 1$............................................Prevod: 1-......$ .....................................! Bod(li nedelje serije......................................................................................................la)J9)la) 39np(tJ5(tp(t6................. 1$ .......................................................................................................................................................62 12.......................................................................................................................tr(kt(re podataka................................................................................................ Ii*e o stringovima..........................&1$..1.............................& ....................................................................................................6+ 12...........$ Podi)anje FD#eption1a.......................................&+ 16............................................................................! ............................................................................................$+ 1-.................. 1 1!................................................................. 2 1!............................&2 1' FD#eption 3:7vatanje gre*aka:6........................'2 11....................... ................................................................................................1 Br)o predstavljanje o8jekata i klasa............................................................. 1!......................................................................................'6 11.....'$ 11.......la) od korisnika.........................................................................................&$ 1'...........6& 12.........................................................................1 Kre*ke...................... ' 1!.............................................................................................................................et 3sk(p6.....................! Betode o8jekata............................

..............................+ 9ndone>anski.....................................................1-$ 22.....................................................1-2 22.......................! Katalonski..................................................... 9nstaliranje 8i8lioteka................+! 1& Kojim p(tem dalje?...................................................................e)ime................++ 2-...........ada.................. assert nared8a..................+2 1 ...........................................1 Primer koda.....................................+' 1&..........................................................1 9granje sa t(pleima............................................................1 ........e)ime............................16 .............' Kompresovanje lista..........................&........................................................................................... Nemački.....................................................................................................................................1-! 22.................................+6 1&...................+1 .................................................e)ime K...............................6 Iesti.Prevod: 1 Balo vi*e.......................12 Bongolski..........1-22 Prevodi............................11 2apanski.......................................................................................................................................................................................................................+1 ...............1-' 22.........................................................................& KraGički soGtver.............................................................+$ 1&......................................................2 Hinejd>erske godine....................................2 Pose8ne metode.lanje t(ple i rečnika G(nk#ijama.....................1-! 22.................................................++ 2-..............................................................1......................................11 ................................+' 1&...................................................................................+$ 1&...1-$ 22.........................................................................................................................................................................+' 1&.....................................................................................................................................................++ 2-................................................................................................................................................1 ..........................................................+ .............................................................................................$ Kineski..............+' 1&............................................................+$ 1&..................................................................................................................1-$ 22..............................................! ....................................1-2 22....................a)ne implementa#ije..........................................++ 2-..1-' 22...........................! H(torijali.................................................................+2 1 ........................................................................................+1 1 .............................$ Iideo.............1-2 22.......................................................1-' 22......+$ 1&........+! 1 .............................................................................................................$ "am8da Gorme..................................................................................................................................................................................................1! Norve*ki 38okmOl6...........................................1$ Poljski....................+' 1&......................................................................................................................................1 Arapski........+' 1&..............................a<anje knjige..........1-' 22.................................................................................................................6 4ran#(ski.............................................................................9 alata.......................................................................................................................& Krčki.............................................1' Port(galski...........................................................................tring.....................................................................Molop0on........................a@ ...........................................1-' $ ...........eL(en#es........................................................ .....................& Fs#ape ...............................................................................6 ....9talijanski.......' Aisk(sija.&..................1-' 22.................................................................................................................................................................................................................................................................................................................(m(nski....+1 ................2 Bra)ilski Port(galski...................................................................................................................................1-2 22........................................................................................................................................................++ 21 9storija revi)ija.........................................................................................................+! 1 ............................................................................................! Blokovi sačinjeni od samo jedne nared8e.........................................................' Hradi#ionalni Kineski................................+ ...........................1..........................................................................................................................................................+1 1 ........$ 5 a(tor(........................................+6 1&............................1-2 22...+6 1+ 4"5........................+ 2............................................................................................................................2 Pitanja i odgovori................................................4(nk#ionalno programiranje 3)a napredne čitao#e6................................+1 1 ................................................................1-! 22.........1 ..............

...................................................................................................1+ =panski.............................(ski i .21 H(rski.............................................krajinski..............12! Kako prevoditi................................................................1-& ' ...................................lovački.......Prevod: 22.............................................................................................................1-6 22....................1-6 22....................................1-6 22................................................................=vedski.......................................................................2............................1 ............................................1& .................................1-6 22......................................................

Ako je sve *to )nate da radite na kompj(ter( č(vanje tekst(alni0 datotekaP onda je ovo knjiga )a Ias. 5va knjiga je pisana )a najnovij( ver)ij( P/t0on !P iako je P/t0on 2 najče*Ee kori*Eena ver)ija P/t0on1a danas 3pročitajte vi*e o tome ( . 7vala Iam jo* milion p(taP vi ste ( stanj( da :ra)lo>ite pro8lem ( komade: na nivo koji mo>e da ra)(me i početnikP a to ne mo>e svako. .a)like i)me<( ver)ija P/t0on 2 i P/t0on !6..eill/1ja. BrilijantnoP remek deloQ . 5n mi je poka)ao načine “(” i “i)” 55P1aP jednostavno i sa 6 .ep(8like.#om6 :Aragi .0an .1 Ko čita “Zagrljaj Pitona”? Fvo *ta lj(di govore o knji)i: :Naj8olja stvar na koj( sam naleteo je :Zagrljaj Pitona:P koji je jednostavno 8rilijantna knjiga )a početnika.#om6 :2a volim tvoj( knjig(Q 5na je naj8olji P/t0on t(torijal ikada napisanP i veoma je korisna reGeren#a.: 1 Joseph Duarte 3jd(arte1R#Gl.1 Zagrljaj Pitona 1 Zagrljaj Pitona :Zagrljaj Pitona: je 8esplatna knjiga o programiranj( kori*Eenjem Pajton 3P/t0on6 programskog je)ika. .pl6 :5dličan i pa>ljiv (vod ( programiranje S P/t0on )a početnike : 1 .ajasekaran :ZdravoP ja sam i) Aominikanske .rr. 5na je do8ro napisanaP pojmovi s( do8ro o8ja*njeni pomoE( očigledni0 primera.: 1 Walt Michalik 3@mi#0'-Rt0eramp. Ieoma mi je >ao *to posle poslednje strani#e ove knjige moram da se vratim na dosadne i s(voparne 5Treill/ i slične prir(čnika )a (čenje P/t0on1a.. 9)gleda da sam konačno na(čio osnove pa sad mog( nastaviti ka svom početnom #ilj(: ra)voj video igri#a. Boje ime je PavelP nedavno sam pročitao va*( knjig( :Zagrljaj Pitona: i ja je smatram GantastičnomQ :6. Na(čio sam mnogo i) primera. Ia*a knjiga je od velike pomoEi )a početnike kao *to sam ja .amo tako nastavite sa do8rim radomQ: 1 Chris !ndr" Sommerseth :..N5 )a stvaranje ovog str(kt(risanog i korisnog vodiča )a osnove programiranja na internet(. 2a sam pok(*avao da na(čim P/t0on nekoliko mese#i pre pronalaska Ia*e knjigeP mada sam postigao ograničen (spe0 koristeEi p/KameP nisam (spe*no napravio niti jedan program.: 1 Syed Talal 31+ godina6 :5vo je naj8olji početnički t(torijal koji sam ikada videoQ 7vala vam na tr(d(. Za0valj(j(Ei Ia*em pojednostavljenj( pro8lemaP P/t0on sada i)gleda kao lako dost(pan #ilj.amo da Iam po*aljem e1mail kako 8i0 vam se )a0valio na knji)i :Zagrljaj Pitona:. Ho nije knjiga )a početnika 8e) ikakvog programerskog )nanjaP i proGesora koji 8i tre8alo da radi ne*to dr(go.onet. 2o* jednomP 0vala P. 7valaQ: 1 Joshua Robin 3jos0ro8Rpo#)sta.#om6 :Nedavno sam )avr*io čitanje :Zagrljaj Pitona:P i mislio sam da stvarno tre8a da ti se )a0valim.net6 :Napravili ste naj8olji P/t0on t(torial koji sam na*ao na internet(. : 1 Pavel Simo 3pavel.. Bi koristimo :"earning P/t0on:P dr(go i)danjeP od 5T. 5na sl(>i kao (vod ili vodič )a P/t0on je)ik početni#ima ( programiranj(.: 1 Samuel Young 3s/1! Rgmail.simoRgmail. 5dličan posao. svakom sl(čaj(P ja stvarno #enim tvoj( knjig(. 1.@aroopP ja po0a<am časove kod proGesora koji nema interesovanje )a (čenje. 7vala vam p(no )a Ia*( knjig(P 8e) koje 8i 8io i)g(8ljen ( P/t0on1( i programiranj(.

/stems” predavanje na . Boje ime je A0med.niversit/ oG MaliGorniaP Aavis • “Programming ?it0 P/t0on” predavanje na 7arvard .#ri8(s o8javljen na lin(D. 7vala na tr(d( :6: 1 M0inma/ :.#om6 :Aivan res(rs )a početnike koji >ele da na(če vi*e o P/t0on1/P koji je na 11. ::Zagrljaj Pitona: je daleko naj8olja stvar )a čoveka. :Zagrljaj Iim1a i Pitona 3A B/te oG I9BP A B/te 5G P/t0on U originalni na)iv6 od Rs@aroop#0 jeP po meniP daleko naj8olji rad ( sGeri te0ničkog pisanja.3 Licenca 5va knjiga je li#en#irana pod Mreative Mommons Attri8(tion1. P/t0on je 8io moj dr(gi programski je)ik . . Predivno *tivo S 4eelKood4a#tor: 1 Surendran ( svom tveet1(.čim Iis(al Basi# 6 ( *koliP ali ( njem( ne (>ivamP ali sam )aista (>ivao () (čenje P/t0on1a.: 1 Dre$ !mes ( člank( .spe*no sam napravio adresar program i) primera.ta#k5verGlo@ odgovor(.. 2a E( pok(*ati da napravim *to vi*e programa () čitanje “i)vora” P/t0on programa 3ako mo>ete da mi ka>ete i)vore koji Ee 8iti od pomoEi6.1 Zagrljaj Pitona ra)(mevanjem U mesta na kojima s( pok(*aji dr(ge dve tekst(alne knjige propali.0are Alike !.kills Gor Beteorolog/” k(rs na .vek sam 8io lj(8itelj :Zagrljaj Pitona: jer je napravljen kako )a nove tako i )a isk(sne programere.#ripting .: 3.tate .strani#a PA41aQ H(torijal :Zagrljaj Pitona: od .#om :2(če sam prelistao veEi deo :Zagrljaj Pitona: na mojoj Nokia N&-. 2a imam 1' godina i >ivi ( Fgipt(.niversit/ • “9ntrod(#tion to Programming” predavanje na ..niversit/ oG Fdin8(rg0 1.@aroop M 71a je odlično napisanP lako se pratiP i mo>da je naj8olji (vod ( P/t0on programiranje koji je tren(tno dost(pan.: 1 Jason Delport na svom 8log(.: 1 Patri#k 7arringtonP ( svom . Čak i NASA! 5v( knjig( čak koristi NA.: 1 Matt #allivan 3mVgallivan12R0otmail. Prepor(č(jem kao pola)n( tačk( )a (čenje P/t0on1 a.niversit/ oG 5kla0oma • “Keopro#essing” predavanje na Bi#0igan .emanti# ?e8 . 7vala.#om6 :Weleo 8i0 da vam se )a0valim na va*oj knjig)i :Zagrljaj Pitona: )a koj( ja mislim da je naj8olji način da se na(či P/t0on.niversit/ oG "eeds • “9ntrod(#tion to Appli#ation Programming” predavanje na Boston .nported li#en#om. . Ho 8i mi mnogo pomoglo. odgovor( na pitanje: :Bo>e li iko predlo>iti do8ar i jeGtin res(rs )a (čenje osnove P/t0on1a?:6 1 Justin %oveTrue ka>e na 4a#e8ook strani#i )ajedni#e :Knjiga :Zagrljaj Pitona: je 8ila veoma korisna .niversit/ • “9nGormation He#0nolog/ . 1.: 1 !hmed Mohammed 3sedoV+1R0otmail.niversit/ • “B(lti Agent .AQ 5na se koristi ( nji0ovoj 2et Prop(lsion "a8orator/ ( nji0ovom projekt( “Aeep .niversiteitP Amsterdam • “Basi# Mon#epts oG Momp(ting” predavanje na ..2 Akademska predavanja 5va knjiga se 3ili se jo* koristi6 koristila kao nastavni materijal ( ra)ličitim o8ra)ovnim instit(#ijama: • “Prin#iples oG Programming "ang(ages” predavanje na Irije . Hako<e E( početi da (čim 2av( i ako mo>ete da mi ka>ete gde da na<em t(torijal koji je do8ar kao Ia*P samo pisan )a 2av(.i mislim da je to najlak*i i najpre#i)niji (vod ( P/t0on na koji sam nai*ao.pa#e Net@ork Proje#t”.

• Ii ste slo8odni da je menjate i transGormi*ete odnosno da prilagodite ov( knjig(. 1. • . 1.$ Pre#%imanje • PA4 • Meo i)vor Ako >elite da podr>i nastavak ra)voja ove knjigeP ra)mislite o k(povini papirne ver)ije. 3linkovi s( ka originalnim ver)ijama na Fmgleskom je)ik(6. !itajte je sad Bo>ete da pročitate knjig( na internet( ." K#pite Knjig# =tampana ver)ija knjige se mo>e k(piti )arad )adovoljstva čitanjaP kao i kako 8i podr>ala dalji ra)voj i (napre<enje ove knjige. 1. Ali imajte na (m(: • Bolimo vas da ne prodajete elektronske i *tampane primerke ove knjigeP osim ako je jasno i (očljivo ( opis( na)načeno da to nije od originalnog a(tora ove knjige.#omJnotesJP/t0on i mora jasno da se (ka>e da originalni tekst mo>e 8iti pre()et sa ove loka#ije. • Na)nake o originalnom rad( moraj( 8iti prika)ani ( (vodnom opis( knjige i na naslovnoj strani dok(mentaP linkovanjem na)ad na 0ttp:JJ@@@.& !itajte knjig# na va'em maternjem je%ik# .A li#en#e osim ako nije dr(gačije na)načeno.1 Zagrljaj Pitona =to )nači: • Ii ste slo8odni da je deliteP odnosno da kopirateP distri8(irate i dajete dr(gima ov( knjig(. 3original na Fngleskom je)ik(6. & . 1.s@aroop#0.koliko ste )ainteresovani )a čitanje ili doprinos prevod( ove knjige na dr(ge svetske je)ikaP pogledajte strani#e prevoda.vi kodoviJskripte prika)ane ( ovoj knji)i s( li#en#irane pod !1#la(se B. • Ii ste slo8odni da je koriste ( komer#ijalne svr0e.

2 Predgovor

2 Predgovor
P/t0on je verovatno jedan od retki0 programski0 je)ika koji je i jednostavan i moEan. 5n je do8ar kako )a početnikeP tako i )a str(čnjakeP i jo* va>nijeP )a8avno je programiranje sa njim. 5va knjiga ima )a #ilj da pomogne da na(čite ovaj divan je)ik i poka>e kako da se stvari (rade 8r)o i 8e)8olno 1 ( s(*tini “,avr*ena Anti1glavo8olja )a va*e programske pro8leme”.

2.1 Za koga je pisana ova knjiga
5va knjiga sl(>i kao vodič ili t(torijal kro) P/t0on programski je)ik. 5na je (glavnom (smerena ka početni#ima ali je korisna i )a isk(sne programere. Milja na to da ako je sve *to )nate o kompj(terima je kako da sač(vate tekst(aln( datotek(P onda mo>ete da na(čite i P/t0on i) ove knjige. .koliko imate pret0odno isk(stvo i) programiranjaP onda tako<e mo>ete na(čiti P/t0on. Ako imate pret0odno isk(stvo i) programiranjaP 8iEete )ainteresovani )a ra)like i)me<( P/t0on1a i va*eg omiljenog programskog je)ika 1 pa s( nagla*ene mnoge takve ra)like. Ne*to ipak tre8a da Ias 8rine: P/t0on Ee (skoro postati va* omiljeni programski je)ikQ

2.2 Lekcija i% istorije
Prvi p(t sam se s(sreo sa P/t0on1om kada sam tre8ao da isprogramiram instaler soGtvera koji sam pisaoP na)van “Aiamond”P tako da 8i mogao da ga načinim da se instalira lako. Borao sam da 8iram i)me<( P/t0on1ovi0 i Perl1ovi0 pove)ivanja sa Xt 8i8liotekama. .radio sam neka istra>ivanja na internet( i nai*ao sam na članak od Fri# ,. ;a/mond1aP koji je po)nat i #enjen 0akerP ( kome je pisao o tome kako je P/t0on postao njegov omiljeni programski je)ik. Hako<e sam sa)nao da s( P/Xt ve)ovi 8ili :( 8oljem stanj(: ( odnos( na Perl1Xt. AakleP odl(čio sam da je P/t0on je)ik )a mene. 5nda sam po*ao ( potrag( )a do8rom knjigom )a P/t0on. Nisam mogao da na<em niti jedn(Q Prona*ao sam neke 5Y;eill/1jeve knjigeP ali s( one ili 8ile presk(pe ili s( 8ili vi*e kao reGerentni prir(čnikP nego vodič )a programiranje. Zato sam ja pro(čavao dok(menta#ij( koj( sam do8o () P/t0on. Be<(tim ta dok(menta#ija je 8ila s(vi*e kratka i “s(voparna”. 5na mi je ipak dala do8r( osnov( o P/t0on1(P ali ta osnova nije 8ila potp(na. .speo sam da (radim ne*to sa je)ikomP jer sam imao pret0odno isk(stvo programiranjaP ali njegova dok(menta#ija nije pogodna )a početnike. 5ko *est mese#i posle mog prvog s(sreta sa P/t0on1om sam instalirao 3tada6 najnoviji ;ed 7at +."in(D pa sam se malo igrao sa K?ord1om. Holiko sam 8io od(*evljen timeP da mi je odjednom sin(la ideja da napi*em neke stvari o P/t0on1(. Počeo sam da pi*em nekoliko strani#aP ali se (8r)o nak(pilo !- strana. 5nda sam počeo o)8iljno da ra)mi*ljam o tomeP da 8i sve to 8ilo vi*e korisno ( o8lik( knjige. Posle dosta ispravljanja gre*akaP sve to je dostiglo Ga)( ( kojoj je postalo koristan vodič )a (čenje P/t0on je)ika. ,matram da Ee ova knjiga 8iti moj doprinos i promo#ija open so(r#e )ajedni#e. 5va knjiga je počela kao mojia lična 8ele*ka o P/t0on1(P i ja je i dalje posmatram na isti načinP iako sam (lo>io mnogo napora da 8i 8ila čitljivija dr(gima :6 . istinskom d(0( otvorenog kodaP ja sam do8io mnogo konstr(ktivni0 predlogaP kritika i povratni0 inGorma#ija od od(*evljeni0 čitala#a koji s( mi pomogli mnogo ( po8olj*anj( ove knjige.

2.3 (tat#s knjige
5va knjiga je Gormatirana ( okto8r( 2-12 kori*Eenjem Pando#1aP kako 8i se mogla generisati ( Gormat( elektonske knjigeP a sve to na )a0tev vi*e korisnikaP kada s( (ra<ene i ispravke i dop(ne. Promene ( i)danj( i) de#em8ra 2--&1me 3sem ranije velike revi)ije ( mart( 2--'6 je a>(riranje )a +

2 Predgovor i)danje P/t0on !.- je)ika. 5voj knji)i je potre8na pomoE svoji0 čitala#aP kakva 8i 8ila da i sami istakn( one delove knjige koji nis( do8ro napisaniP nis( ra)(mljivi ili s( jednostavno pogre*ni. Bolimo pi*ite glavnom a(tor( ili odgovaraj(Eim prevodio#ima sa va*im komentarima i s(gestijama.

2. Zvanična internet stranica
Zvanična internet strani#a knjige je 0ttp:JJ@@@.s@aroop#0.#omJnotesJP/t0on. Na njoj mo>ete pročitati #el( knjig(P pre()eti najnovije ver)ije knjigeP k(piti *tampan( ver)ij(P a tako<e i poslati mi por(k( sa Ia*om povratnom inGorma#ijom 3(tis#iP s(gestijeP predlo)i...6.

2." Par rečenica %a ra%mi'ljanje
:Postoje dva prila)a ( i)gradnji i di)ajn( soGtvera: jedan način je da ga načinite tako jednostavno da očigledno nema nedostatakaP dr(ga je da ga napravite toliko komplikovano da nema očigledni0 nedostataka.: 1 M. A. ;. 7oare :Za (spe0 ( >ivot( nije 8itan toliko talenat i mog(EnostP koliko kon#entra#ija i (pornost.: 1 M. ?. ?endte

1-

! .vod

3 Uvod
P/t0on je jedan od oni0 retki0 je)ika )a koji mo>e da se ka>e da je i &ednostavan ali i mo'an. Prijatno Eete se i)nenaditi kada vidite kako je lako da se kon#entri*ete na re*avanje pro8lema (mesto na sintaks( i str(kt(r( je)ika sa kojem programirate. Zvanični (vod ( P/t0on je: :P/t0on je je)ik koji se lako na(čiPa ( isto vreme je i moEan programski je)ik. 5n ima eGikasne 0ig01level str(kt(re podataka i jednostavan ali eGikasan prist(p o8jektno1orijentisanom programiranj(. P/t0on1ova elegantna sintaksa i dinamikaP )ajedno sa svojim prirodom interpreteraP čine ga idealnim je)ikom )a pisanje skripti i 8r) ra)voj aplika#ija ( mnogim o8lastima i na veEini operativni0 sistema.: 2a E( pojasniti veEin( ovi0 G(nk#ija detaljnije ( narednom odeljk(. Priča iza imena jezika K(ido van ;oss(mP tvora# P/t0on je)ikaP na)vao je je)ik po BBM emisiji :"eteEi Mirk(s Bonti Pajtona: 3“Bont/ P/t0onYs 4l/ing Mir#(s”6. 5n nije 8io lj(8itelj )mija koja (8ijaj( >ivotinje 3svoj( 0ran(6 tako *to o8avijaj( svoja d(ga tela oko >rtve i tako i0 smrskaj(.

3.1 Karakteristike P)t*on+a 3.1.1 Jednostavanost
P/t0on je jednostavan i minimalističan je)ik. %itanje do8rog i)vornog koda P/t0on programa 8(di oseEaj kao čitanje engleskog je)ikaP iako je to veoma striktan FngleskiQ 5vakva priroda P/t0on1a je jedan od njegovi0 najveEi0 prednosti. 5na vam omog(Eava da se vi*e kon#entri*ete na re*avanje pro8lema nego na sama pravila programskog je)ika.

3.1.2 Lako se uči
Kao *to Eete videtiP sa P/t0on1om je i)()etno lako da se počne sa programiranjem. P/t0on ima i)()etno jednostavn( sintaks(P kao *to je veE pomen(to.

3.1.3 Beaplatan je i otvorenog koda !ree and "pen Sour#e$
P/t0on je primer (%)SS 34reeJ"i8rZ and 5pen ,o(r#e ,oGt@are6 soGtvera. 2ednostavnije rečenoP mo>ete slo8odno distri8(irati kopije ovog soGtveraP čitati i)vorni kodP napraviti promene na njem(P i koristiti njegove delove ( novim slo8odnim programima. 4"5,, se )asniva na kon#ept( )ajedni#e koja deli )nanje. 5vo je jedan od ra)loga )a*to je P/t0on tako do8ar 1 jer je stvaran i stalno po8olj*avan od strane )ajedni#e koji samo >eli da stvori 8olji P/t0on.

3.1.% &ig'(level Je)ik
Kada pi*ete programe ( P/t0on1(P nikada neEete morati da se 8avite o lo@1level detaljima kao *to s( (pravljanje memorijom koj( koristi Ia* programP itd.

3.1.* Prenosiv Porta+le$
Z8og svoje prirode otvorenog kodaP P/t0on je portovan 3tj. i)menjen da 8i radio6 na vi*e platGormi. ,vi va*i P/t0on programi mog( raditi na 8ilo kojoj od ovi0 platGormiP 8e) potre8e 8ilo kakve promene ( kod( ako ste 8ili dovoljno pa>ljivi da i)8egnete 8ilo kakve G(nk#ije koje )avise od operativnog sistema. 11

14 Pro0irive +i+lioteke .9.ve ovoP ( s(*tiniP čini kori*Eenje P/t0on1a mnogo lak*imP jer ne morate da 8rinete o kompajliranj( programaP niti da vodite rač(na da li s( odgovaraj(Ee 8i8lioteke pove)ane i (čitane itd.J!+-P )J5.! .5. P/t0on ima veoma moEanP ali pojednostavljen način o8avljanja 55P1aP naročito kada se (poredi sa velikim je)i#ima kao *to s( M[[ ili 2ava. 5vo tako<e )nači da je Ia* P/t0on program prenosiv sa platGorme na platGorm(P jer mo>ete samo da kopirate Ia* P/t0on program na dr(gi rač(nar i on Ee da radiQ 3.tation1(P .1(P A.9 3graGički0 korisnički0 interGejsa6P i dr(gi0 stvari koje s( )avisne od sistema. Program napisan na je)i#ima koji )a0tevaj( kompajliranje kao *to s( M ili M[[ s( konvertovani i) i)vornog je)ika 3odnosno M1a ili M[[1a6 na je)ik kojim govori Ia* rač(nar 38inarni kod tj. . Kada pokrenete takav programP linkerJloader soGtver kopira program sa 0ard diska ( memorij( i tada ga pokreEe. 3. "+jektno orijentisan P/t0on jednako podr>ava pro#ed(ralno1orijentisano programiranjeP kao i o8jektno1orijentisano programiranje. .. P/t0on1(P sa dr(ge straneP ne tre8a kompila#ija ( 8inarni kod.1(P XNCP IB.J$--P Be5. 3.M 5.A1(P Ba#intos01(P . -nterpreter 5vo )a0teva malo o8ja*njenje.vod Bo>ete koristiti P/t0on na "in(D1(P ?indo@s1(P 4reeB.1 2Ugradljiv2 u druge progra3e Bo>ete da :(gradite: P/t0on ( va*e MJM[[ programe da 8i pr(>ili mog(Enosti :skriptovanja: )a korisnike va*eg programa. 3.PM1aP 7HB"1aP ?AI GajlovaP kriptograGijeP K.1. 3.1. 12 .1. 3iP0oneP iPad6 i Android.tandardne 8i8lioteke P/t0on1a s( )aista ogromne./ Pro0iriv Ako vam je potre8no da va>an deo koda mora da se pokreEa veoma 8r)oP ili >elite da imate neki deo algoritma da ne 8(de otvoren 3da ne mo>e da se pročita i)vorni kod6P mo>ete kodirati taj deo va*eg programa ( M1( ili M[[1(P a )atim ga koristiti i) P/t0on programa. .ncluded: 3spreman )a rad1sve dola)i sa njim6 Gilo)oGija P/t0on1a. Ii samo pokreEete program direktno i) i)vornog koda.1(P Psion1(P A#orn .. 5ne mog( da Iam pomogn( da (radite ra)ne stvari (klj(č(j(Ei reg(lar eDpressionsP generisanje dok(menataP testiranje (re<ajaP t0reading1aP 8a)e podatakaP ?FB pretra>ivačaP MK91aP 4HP1aP e1mail1aP CB"1aP CB"1. .1(P Palm 5.J2P AmigiP A.1. Ho je tako)vana :+atteries . n(le i jedini#e6 koristeEi kompajler sa ra)ličitim o)nakama i op#ijama.1(P 5. ob&ektno ori&entisanim &e*icimaP program je i)gra<en od o8jekata koji kom8in(j( podatke i G(nk#ionalnost. ZapamtiteP to sve je (vek na raspolaganj( kada je P/t0on instaliran. s(*tiniP P/t0on pretvara i)vorni kod ( neki srednji o8likP koji se )ove 8/te#ode 38ajtkod6 a )atim prevodi ovo ( je)ik rač(nara koji ga pokreEe.olaris1(P 5. Pored standardni0 8i8liotekaP postoje ra)ne dr(ge kvalitetne 8i8lioteke koje mo>ete pronaEi na P/t0on Pa#kage 9ndeD internet strani. proceduralno ori&entisanim je)i#imaP program je i)gra<en i) pro#ed(ra ili G(nk#ija koje nis( ni*ta dr(go do komade programa koje se mog( vi*e p(ta (potre8ljavati.0arp Za(r(s1(P ?indo@s MFP pa čak i na Po#ketPM1(Q Bo>ete čak koristiti platGorm( kao *to je Kiv/ da stvarate igre )a i5.1.1 (P ID?orks1(P Pla/.

Peter 2orvig je po)nati a(tor "9. 5vaj članak je 8io prava inspira#ija )a moje prve korake sa P/t0on1om. 3.2 . Bo>ete se )apravo i (veriti sami gledaj(Ei Koogle 2o8s stran( na internet( ( kojoj se navodi )nanje P/t0on1a kao (slov )a poslove soGtverski0 in>enjera. mo/ete lako da nau-ite i ra*like i*me0u te dve ver*i&e i da se prilagodite vrlo lako1 2a&te/i deo &e u-en&e programiran&a i ra*umevan&e osnove Python &e*ika i to &e na3 cil& u ovo& kn&i*i.vod Rezime P/t0on je )aista ()8(dljiv i moEan je)ik. AakleP vi Eete (čiti da koriste P/t0on ! i) ove knjigeP čak i ako >elite da koristite P/t0on 2. . i kada postignete ta& cil&. 5va knjiga je prilago<ena 2--&g. 5n ka>e da je P/t0on od(vek 8io sastavni deo Koogle1a. Za vi*e detalja pročitajte kompletan intervj(.ma&te na umu da kada ste pravilno ra*umeli i nau-ili da koriste bilo ko&i od n&ih. 1! .3 .a%like i%me-# ver%ija P)t*on 2 i P)t*on 3 Bo>ete da preskočite ov( sek#ij(P ako niste )ainteresovani )a ra)like i)me<( P/t0on 2 i !.oss(m1( )a t( inGorma#ij(6. )a P/t0on ! i ona je 8ila jedna od prvi0 knjiga )a one koji koriste P/t0on !. 5n ka>e da ga nijedan je)ik nije (činio vi*e prod(ktivnijim od P/t0on1a. +ruce 6ckel je a(tor č(veni0 knjiga Thinking in Java i Thinking in C77.ear#0 X(alit/ 3)a0valj(jem K(ido van . 2.P1aP i direktor )a Koogle1ovog . . 5n ka>e da je P/t0on postao njegov omiljen programski je)ik. !. 6ric S1 Raymond je a(tor knjige :H0e Mat0edral and t0e Ba)aar:P a tako<e je i oso8a koja je i)mislila termin )pen Source 3otvoreni kod6. 3. 5n sadr>i prav( kom8ina#ij( perGormansi i karakteristika koje čine pisanje programa ( P/t0on1( )a8avnim i lakim. Ho jeP na>alostP )8(njivalo čitao#e koji s( pok(*avali da na(če P/t0on 2 sa ver)ijom knjige )a P/t0on ! i o8rn(to.! .ta programeri ka/#? Bo>da Ee vam 8iti interesantno da pročitam *ta veliki 0akeri pop(t F. lako mo/ete da koristite kako ver*i&u 4 tako i ver*i&u 5 u *avisnosti od situaci&e u ko&o& se na0ete1 Za detalje o ra)likama i)me<( P/t0on 2 i P/t0on ! ver)ijeP pogledajte ov( internet strani#( na .vet lagano i dalje prela)i na P/t0on !..8(nt( @iki1j(. imaj( da ka>( o P/t0on1(: 1. 5n ka>e da je P/t0on mo>da jedini je)ik koji se Gok(sira da pravljenje stvari 8(de lak*e )a programera. AliP molim vasP o8ratite pa>nj( na to koj( ver)ij( koristite.

orgJdo@nloadJ i pre()mite najnovij( ver)ij(. ona 8i tre8ala da postane %System'oot %\system3(.estart nije potre8an./stem Iaria8les:P a )atim i)a8erite Edit i dodajte ./stem. prompt1(P onda morate da na odgovaraj(Ei način podesite promenljiv( p(tanje PAH7./stemP sa desne strane Eete videti :Iie@ 8asi# inGormation a8o(t /o(r #omp(ter: !. Na kraj( linije ispod Iaria8le val(e dodati . .p/t0on. Prika)ana Iam je Advan#ed karti#a dijaloga . Iista neEe podesiti p(tanje ( sistem( dok se ne restart(je. Kliknite na d(gme Fnvironment Iaria8les koje se nala)i ( donjem desnom (gl(. Kliknite na promenljiv( pod imenom PAH7 ( odeljk( :. donjem polj( pod na)ivom :. 6.1 0nstalacija na 1indo2s+# Posetite sajt 0ttp:JJ@@@. Ponovo pokrenite sistem. Kliknite na d(gme .tart i i)a8erite stavk( Montrol Panel 2. %. . Kliknite na 5K i )avr*ili ste. Za operativni sistem ?indo@s : 1.1. Na dn( kliknite na Fnvironment Iaria8les i pod .e#(rit/ \ .1 5"S ko3andna linija Ako >elite da imate mog(Enosti da koristite P/t0on ( ?indo@s komandnoj linijiP odnosno A5. Pažnja! Kada se prilikom instala#ije prika>e mog(Enost :de*tikliranja: neki0 :op#ioni0: komponentiP nemojte to (raditi 1 ostavite onako kako Iam je pon(<eno.tart d(gme i i)a8erite Montrol Panel \ . !.C:\Python33 3proverite da li ova Gas#ikla postojiP mo>e 8iti dr(gačiji )a novije ver)ije P/t0on1a6 na kraj( liste onoga *to se veE tamo nala)i. NaravnoP koristite odgovaraj(Ee ime direktorij(ma ( kojem je instaliran P/t0on.C:\Python33 . Za ?indo@s 2---P CPP 2--!: kliknite na Control Panel ./stem varia8lesP potra>ite promenljiv( PAH7P i)a8erite je i pritisnite Fdit.C:\Python33 $. . $. '. 9nstala#ija je ista kao i kod svakog dr(gog ?indo@s 8a)iranog programa. . Aesnim tasterom mi*a kliknite na ikoni#( kompj(tera na Ia*em desktop( i i)a8erite properties ili kliknite na . Ako je vrednost 8ila %System'oot%\system3(.a leve strane je lista )adatakaP od koji0 je poslednja :Advan#ed s/stem settings:. 1$ .C:\Python33: 38e) navodnika6 i restart(jte sistem./stem Iaria8les: skrol(jte prema dole do Pat0 i kliknite na d(gme Fdit. Nemojte ga preskakati jer sadr>i dosta korisni0 inGorma#ija.Advanced Environment Variables.System . ovom poglavlj( Eemo se posvetiti način( na koji se instalira P/t0on programski je)ikP na vi*e ra)ličiti0 operativni0 sistema. Za ?indo@s Iista1(: 1. 2./stem Properties. Promenite pat0 prema direktorij(m( ( koji ste instalirali P/t0on./stem and .Kliknite na nj(. Za starije ver)ije operativnog sistema ?indo@sP otvorite datotek( C:\AUTOE EC!"AT i dodajte linij( :PAT#$%PAT#%. Kliknite . Kliknite na Advan#ed s/stem settings sa leve straneP a )atim kliknite na ta8 Advan#ed. Za ?indo@s NHP koristite AUTOE EC!&T Gajl. .$ 9nstala#ija % -nstala#ija .

Bolimo proverite dok(menta#ij( ili Gor(me Ia*e "in(D distri8(#ije koj( imate instaliran( )a ispravan( komand( )a pokretanje paket menad>era distri8(#ije. Ako to ne (speP pogledajte dok(menta#ij( ili se o8ratite na Gor(mima va*e "in(D distri8(#ije. Zatim instalirajte P/t0on ! k(#aj(Ei: bre2 install )ython3 . 1' . Kada ste )avr*ili instala#ij(P pokrenite )ython3 -V ( *el( i tre8alo 8i da vidite ver)ij( P/t0on1a na ekran(: . sledeEem poglavlj( Eemo kren(ti sa pisanjem na*eg prvog P/t0on ! programa. dijalog( otk(#ajte cmd i pritisnite Fnter.2 Pokretanje P6t'on kon)ole na 7indo8s(u Korisni#i ?indo@s1aP mog( da pokreE( P/t0on interpreter ( komandnoj linijiP ako s( postavili PAH7 promenljiv( sa odgovaraj(Eim parametrima. .3 0nstalacija na Lin#6+# Za "in(D korisnike: otvorite terminal otvaranjem Terminal aplika#ije ili pritiskom na Alt [ 42 i k(#anjem 3nome-terminal 3ako koristite KN5BF desktop okr(>enjeP ako neP (k(#ajte komand( koja pokreEe odgovaraj(Ei terminal em(lator6.c+rl -/sS01 ra2!3ith+b!com4m5cl4homebre243o6.$ 9nstala#ija %. Možda je podrazumevan u novoj verziji Vaše distri u!ije" Novije distri8(#ijeP kao *to je npr . Na primer ( .tart i kliknite na :.)ython3 -V Python 3!3!7 Pažnja: $ je deo *ela. ZatimP morate da instalirate p/t0on! paket.-.potlig0t pretrag(6P k(#ajte Terminal i pritisnite Fnter. 9nstalirajte 7ome8re@ k(#anjem: r+by -e . Ho mo>e 8iti dr(gačije kod Ias ( )avisnosti od pode*avanja Ia*eg operativnog sistema na rač(nar(P ovde Eemo navoditi od)iv *ela sa ] sim8olom.8(nt( 12. Aa 8iste otvorili terminal ( operativnom sistem( ?indo@sP kliknite na d(gme .e%ime 5d sadaP smatramo da imate P/t0on ! instaliran na va*em sistem(. .1-P dola)e sa veE instaliranim P/t0on !P kao podra)(mevanom ver)ijom P/t0on1aP pa proverite da nije mo>da veE instaliran.1. . ZatimP odk(#ajte )ython3 -V 3(koliko ova komanda poka)(je nek( gre*k( ili ne poka)(je ni*taP a pret0odni post(pak ste do8ro (radiliP pok(*ajte sa komandom )ython -VP (koliko ni ona :ne radi:P proverite pret0odne korakeP najverovatnije niste do8ro podesili PAH7 promenljiv(6 da 8i 8ili sig(rni da nema gre*aka.(n:.8(nt(P mo>ete da koristite s+do a)t3et install )ython3 . .adaP k(#ajte )ython3 -V da proverite da nema gre*aka. .2 0nstalacija na 3ac 4( 5+# Za Ba# 5. C korisnike: otvorite terminal pritiskom kom8ina#ije Command*S)ace tastera 3otvara . .

' Prvi kora#i

* Prvi kora#i
,ada Eemo videti kako da pi*ete i pokrenete tradi#ionalno prvi program :7ello ?orld: 3:Po)drav ,vet(:6 ( P/t0on1(. Ho Ee vas na(čiti kako da pi*eteP sač(vate i pokreEete P/t0on programe. Postoje dva načina :naterati: P/t0on da pokreEe Ia* program 1 pomoE( interaktivnog prompt1a ili kori*Eenjem i)vornog Gajla. ,ada Eemo videti kako da koriste o8a metoda.

".1 Kori'7enje interaktivnog prompt+a
5tvorite terminal ( va*em operativnom sistem( 3kao *to je o8ja*njeno ranije ( poglavlj( koje govori o instala#iji6P a )atim otvorite P/t0on prompt k(#anjem )ython3 3ili samo )ythonP (koliko se program :oda)iva: na taj način. PAWN2AQ B(dite sig(rni da je ver)ija programa !Q Ho Eete proveriti sa komandom i) pret0odnog poglavlja. Po standard( o)načavanja )ython je komanda )a ver)ij( 2P a )ython3 )a ver)ij( !P ali npr !.!.- na 5, ?indo@sCP se po)iva samo nared8om )ython6 i pritiskom na taster Fnter. Kada ste pokren(li )ython3 P tre8alo 8i da vidite ovakv( o)nak(: 888 . 5datle mo>ete početi da k(#ate. Ho se )ove Python interpreter prompt 3interaktivni prompt6. . P/t0on interaktivnom prompt(P (k(#ajte )rint.9Po:drav Svima;96 )atim stisnite Fnter. Hre8alo 8i da vidite reči Po:drav Svima; na Ia*em ekran(. Fvo ga primer *ta 8i tre8alo da se vidiP (koliko se koristi rač(nar sa Ba# 5, C1om. Aetalji o P/t0on program( Ee se ra)likovati ( )avisnosti od Ia*eg rač(naraP ali deo od prompta 3tj. od ^^^ nadalje6 tre8alo 8i da 8(de isti 8e) o8)ira na operativni sistem. - )ython3 Python 3!3!7 .de/a+lt< Oct (( (7=(< =(:(7:3>6 ?@CC A!(!= Com)atible A))le Clan3 A!7 ..ta3s4A))le4clan3-A(=!7!>766B on dar2in Ty)e ,hel),< ,co)yri3ht,< ,credits, or ,license, /or more in/ormation! 888 )rint.9Po:drav Svima;96 Po:drav Svima; 888 Primetimo da Iam P/t0on gotovo tren(tno daje i)la) komandeQ 5no *to ste (pravo (k(#ali je jedna komanda ( P/t0on1( 3P/t0on statement6. Bi koristimo komand( )rint da 3kakvo i)nena<enje?6P prika>emo nekakv( vrednost koj( smo )adali ( komandi. 5vde smo )adali tekst Po:drav Svima; i on je odma0 prika)an na ekran(. #ako iza$i iz interaktivno% prompta Ako koristite "in(D ili .niD s0ellP mo>ete da i)a<ete i) interaktivnog prompta pritiskom #trl[d ili (no*enjem e5it.6 3Napomena: Ne )a8oravite da otk(#ate )agradeP T36T6P )atim pritisnite enter. Ako koristite ?indo@s komandn( linij(P pritisnite #trl[)P a )atim enter taster.

".2 0%8or #re-ivača teksta 9:ditora;
Ne mo>emo da pi*emo na* program ( interaktivni prompt svaki p(t kada >elimo da ga pokrenemoP tako da 8i 8ilo pametno da i0 sač(vamo ( datotekama kako 8i mogli da i0 pokreEemo neograničen 8roj p(ta. Aa 8iste kreirali Ia*e P/t0on i)vorne GajloveP potre8an nam je program 3tekst(alni editor6 ( kojem mo>ete da k(#ate i sač(vate. Ao8ar programerski editor Ee (činiti Ia* >ivot lak*im dok pi*ete i)vorne datoteke. AakleP )aistaP i)8or editora je od klj(čnog )načaja. Borate da i)a8erete editor kao *to 8i oda8rali a(to koji 8i k(pili )a Ia*e potre8e. Ao8ar editor Ee vam pomoEi da lak*e pi*ete 16

' Prvi kora#i P/t0on programeP čineEi va*e p(tovanje (do8nijim i poma>e Iam da stignete na odredi*te 3da postignete Ia* #ilj6 na mnogo 8r>i i sig(rniji način. 2edan od osnovni0 )a0teva koji tre8a da isp(ni Ia* editor je istican&e sintakseP to jestP 8ojenje ra)ličiti0 delova va*eg P/t0on programaP tako da mo>ete vi)(elno da pratite svoj program i vi)(elno )amislite njegov tok. .koliko nemate idej( sa kojim editorom da počneteP ja 8i0 prepor(čio kori*Eenje programa Komodo FditP koji je dost(pan )a ?indo@sP Ba# 5, C i "in(D. Ako koristite ?indo@sP molim Ias da ne koristite Notepad 1 jer je lo* i)8orP jer ne postoji isti#anje sintakse iP *to je najva>nije 1 ne podr>ava (vlačenje teksta 3indenta#ij(6 *to je veoma va>no ( na*em (čenj(P kao *to Eemo videti kasnije. Ao8ri editori pop(t Komodo Fdit1a Ee sve to a(tomatski raditi )a nas. Ako ste isk(san programerP onda mora da veE koristite Iim ili Fma#s. 9)li*no je reEi da s( ovo dva najmoEnija editora i da Eete imati ogromne koristi (potre8ljavaj(Ei i0 ( pisanj( P/t0on programa. 2a lično koristim o8a )a veEin( moji0 programaP pa sam čak i napisao #el( knjig( o Iim1(. . sl(čaj( da ste spremni da odvojite malo vremena da na(če Iim ili Fma#sP onda Iam prepor(č(jem da na(čite da koristite 8ilo koji od nji0P *to Ee 8iti veoma korisno )a Ias na d(>e sta)e. Be<(timP kao *to sam ranije pomen(oP početni#i mog( početi sa Komodo Fdit1om da 8i se Gok(sirali na (čenje o P/t0on1( (mesto na (čenje (potre8e editora. Aa podsetimoP molimo Ias da i)a8erete odgovaraj(E( editor 1 to mo>e da (čini pisanje P/t0on programa )a8avanim i jednostavnim. &a korisnike Vim'a Postoji do8ar članak o tome kako da podesite Iim da postane moEan P/t0on 9AF od 2o0n B Anderson1a. Hako<eP prepor(č(je se jedi1vim pl(gin i moja sopstvena dotvim konGig(ra#ija. &a (ma!s korisnike Postoji do8ar (vod o tome kako da napravite od Fma#s1a moEni P/t0on 9AF od Pedro Kroger1a. Hako<eP prepor(č(jem BKYs dotema#s konGig(ra#ij(.

".3 Kori'7enje i%vorne datoteke
7ajde sad da se vratimo na programiranje. Postoji tradi#ija da prilikom (čenja novog programskog je)ikaP prvi program koji napi*ete i pokrenete 8(de Tpo)drav ,vimaQT 3_7ello ?orldY6 program 1 sve *to on radi je to da samo prika>e TPo)drav ,vimaQT kada ga pokrenete. Kako 8i ,imon Mo)ens 3a(tor )adivlj(j(Ee :Beginning Perl: knjige6 rekaoP da je to :tradi#ionalna molitva programerskim 8ogovima da Iam pomogn( da na(čite je)ik 8olje.: Pokrenite i)a8rani editorP (nesite sledeEe program i sač(vajte ga kao )o::!)y. Ako koristite Komodo FditP kliknite na Cile - &e2 - &e2 CileP a )atim otk(#ajte sledeEe: )rint.9Po:drav Svima;96 . Komodo Fdit1(P kliknite Cile - Save da 8iste sač(vali t( datotek(. Kde 8i tre8alo da sač(vate Gajl? . 8ilo koji Golder )a koji )nate njegov( loka#ij(. Ako ne ra)(mete *ta to )načiP kreirajte nov( Gas#ikl( i koriste njen( loka#ij( da č(vate i pokreEete sve svoje P/t0on programe: • C:\\)y na ?indo@s1( • 4tm)4)y na "in(D1( • 4tm)4)y na Ba# 5, C1( Aa 8iste kreirali GolderP koristite m0dir komand( ( terminal(P na primerP m0dir 4tm)4)y . Važno .vek proverite da li ste datote#i dali eksten)ij( !)y P na primerP /oo!)y . 1

' Prvi kora#i . Komodo Fdit1( kliknite na Tools - '+n Command P otk(#ajte )ython3 )o::!)y i kliknite na ;(n i tre8alo 8i da vidite i)la) kao na sli#i ispod.

Snimak ekrana 8omodo 6dit a sa Po*drav Svetu programom Bolji način je daP (mesto da ( Komodo Fdit1( pokreEeto programP koriste terminal: 1. 5tvorite terminal kao *to je o8ja*njeno ( poglavlj( instala#ije. 2. Promenite loka#ij( tamo gde ste sač(vali datotek(P na primerP cd 4tm)4)y !. Pokrenite program (no*enjem komande )ython3 )o::!)y . 9)la) je prika)an ispod. - )ython3 )o::!)y Po:drav Svima; Ako ima* i)la) kao na sli#i goreP čestitamQ 1 .spe*no ste pokren(li svoj prvi P/t0on program. .spe*no ste pre*li najte>i deo (čenja programiranjaP koji jeP sam početak sa svojim prvim programomQ 1&

1 -)vr0avanje P6t'on progra3a 5vo va>i samo )a "in(D i . sl(čaj( da imate nek( gre*k(P molimo vas da (pi*ete gornji program upravo onako kako &e poka*ano i)nad i ponovo pokrenite program. 1+ . . #0mod komanda se ovde koristi )a promeni pona3an&e datoteke daj(Ei joj do*volu da se i*vr3ava )a sve korisnike sistema. . Aodajte linij( i) donjeg primera tako da 8(de prva lini&a ( va*em program(: D.' Prvi kora#i . Ao sada smo 8ili ( mog(Enosti da pokrenemo svoj program dok )namo njegov( tačn( loka#ij(. .4+sr4bin4env )ython3 AakleP va* program 8i sada tre8alo da i)gleda ovako: D. Bi koristimo o)nak( .!4)o::!)y Po:drav Svima.vaki p(tP kada >elimo da pokrenemo P/t0on programP moramo ga i)ričito po)vati komandom )ython3 /oo!)yP )a*to ga ne 8i mogli pokren(ti kao i svaki dr(gi program na na*em rač(nar(? Ho mo>emo postiEi pomoE( nečega *to se )ove hashbang linija. Kad god pokrenete 8ilo koji programP sistem tra>i taj program ( svakom od direktorij(ma navedeni0 ( PAH7 promenljivoj okr(>enjaP a )atim pokreEe taj program. Bo>emo (činiti ovaj program dost(pan sv(da jednostavnim kopiranjem njegovog i)vornog Gajla ( jedan od direktorij(ma navedeni0 ( PAH7 .chmod a*5 )o::!)y .9Po:drav Svima.ada mo>emo pokren(ti na* program direktnoP jer je na* operativni sistem po)iva 4+sr4bin4env *to Ee pronaEi na* P/t0on ! program i )ato )na kako da pokrene na* i)vorni Gajl: . na*em prvom program(P imamo samo jedn( instr(k#ij(. ovom sl(čaj(P mi smo postavili tekst TPo:drav Svima. *.4+sr4bin4env )ython3 )rint .96 Ar(goP moramo dati i)vr*n( do)vol( program( koristeEi chmod komand(Pa )atim pokrenite i)vorni program. Hako<eP (verite se da nema ta8ova i ra)maka pre prvog )naka ( svakoj liniji 1 mi Eemo videti )a*to je ovo va>no kasnije. .J da 8i (ka)ali operativnom sistem( da se program nala)i ( tren(tnoj Gas#ikli. 9majte na (m( da s( slova ( P/t0on1( osetljiva na veličin(P odnosno )rint nije isto *to i Print 1 o8ratite pa>nj( na malim p ( prvom primer( i veliko P ( dr(gom.3. #ako ovo )unk!ioniše . =ta ako >elimo da mo>emo da pokrenemo program i) Goldera? Ho mo>ete da (radite tako *to Eete sač(vati program ( jednom od Goldera navedeni0 ( PAH7 promenljivi0 okr(>enja. Aa 8i stvari 8ile jo* vi*e )a8avneP mo>ete da preimen(jete datotek( da 8(de samo )o:: i pokren(ti je kao !4)o:: P i program Ee i dalje raditiP jer sistem )na da mora da se pokrene program pomoE( interpretera čija loka#ija je navedeno ( prvom red( ( i)vornom Gajl(.vaki P/t0on program se sastavlja od instr(k#ija 3 statements6.niD korisnikeP ali 8i i korisni#i ?indo@s1a tre8alo da )naj( ovo.T. . toj instr(k#ijiP mi po)ivamo )rint komand( 39unkci&u6 koja samo prika)(je tekst TPo:drav Svima. Bi Eemo na(čiti vi*e o komandama i G(nk#ijama detaljnije ( kasnijim poglavljima 1 ono *to )a sada tre8a da s0vate je da sve *to postavite ( )agradama Ee 8iti prika)ano na ekran(.T.

c) )o::!)y 4home4s2aroo)4bin4)o:: . 5vaj metod je veoma koristan ako >elite da pi*ete komande koje mo>ete pokren(ti 8ilo kadaP 8ilo gde. 58ično Ee postojati sličan direktorij(m na va*em sistem(P samo sa korisničkim imenom koji Ii koristite. ". sl(čaj( da morate da do8ijete pomoE )a operatore pop(t komande ret+rn P onda morate da stavite t( komand( (n(tar #itata kao na primer hel). 2- . Ho je slično stvaranj( sopstveni0 komandi kao *to je cd P ili 8ilo koja dr(ga komanda koj( koristite ( terminal(.6 da 8i ste sa)nali vi*e o kori*Eenj( samog hel)1aQ . Na primerP ( interaktivnom prompt( pokrenite hel).9ret+rn96P tako da se P/t0on ne 8i )a8(nio oko onoga *ta od njega tra>imo. 5na je veoma korisnaP pose8no kada se koristi interaktivni prompt. ".lično tomeP mo>ete do8iti inGorma#ije o gotovo svem( ( P/t0on1(.echo -PAT# 4+sr4local4bin:4+sr4bin:4bin:4+sr4 =='>4bin:4home4s2aroo)4bin .e%ime . 5vde smo prika)ali PAH7 promenljiv( kori*Eenjem e#0o komande sa preGiksom ] da (ka>emo *el( da nam je potre8na vrednost ove :promenljive okr(>enja:.ada 8i tre8ali da )nate da napi*eteP sač(vate i pokreEete P/t0on programe sa lakoEom." .ada kada ste korisnik P/t0on1aP 0ajde da na(čite i neke naprednije kon#epte P/t0on1a. . . 5vde vidimo da je 4home4s2aroo)4bin jedan od direktorij(ma i) promenljive PAH7P gde je s$aroop korisničko ime koje ja koristim na svom sistem(. K(#ajte hel).' Prvi kora#i . Ako >elite da dodate neki direktorij(m po va*em i)8or( ( PAH7 promenljiv( 1 to mo>e da se postigne k(#aj(Ei e5)ort PAT#$-PAT#:4home4s2aroo)4mydir gde je T4home4s2aroo)4mydirT direktorij(m koji >elim da dodam ( PAH7 promenljiv(. Pažnja Pritisnite taster L )a i)la)ak i) pomoEi.)rint6 1 ova komanda prika)(je pomoE )a print G(nk#ij( koja se koristi )a prika)ivanje stvari na ekran(.)o:: Po:drav Svima. Pronala/enje pomo7i Ako Iam je potre8na 8r)a inGorma#ija o 8ilo kojoj G(nk#iji ili komandi ( P/t0on1(P onda mo>ete koristiti (gra<en( hel) G(nk#ij(.

Broj 2 (vek predstavlja se8e i ni*ta dr(go 1 on je konstanta jer njegova vrednost ne mo>e 8iti promenjena. Na primer: )rint.To Ee strin3. AakleP sve ovo do sada *to smo radili nosi na)iv doslovna konstanta.1 Komentari 8omentari s( svaki tekst koji pi*emo sa desne strane S sim8ola i (glavnom se koriste kao napomena )a one koji čitaj( na* program. ovom sl(čaj(P '2.!F1$ )nači '2. . Ii Eete koristiti stringove ( skoro svakom P/t0on program( koji 8(dete pisaliP pa o8ratite pa>nj( na deo koji sledi.9Po:drav Svima. (tringovi 9reči + strings. $.. Primeri 8rojeva sa pokretnim )are)om 3ili de#imaliP (kratko 9loats6 s( !.9Po:drav Svima.96 ili: D Primetite da Ee )rint /+n0ciEa )rint.2! P ili stringovi 3slovaP reči6 kao *to s( 9Ovo Ee strin39 ili .! ` 1-1$ .tring je ni* *nakova.2 <oslovne konstante 9Literal constants.96 Koristite onoliko korisni0 komentaraP koliko mo>eteP ( svom program( da: • o8jasnite pretpostavke • o8jasnite va>ne odl(ke • o8jasnite va>ne detalje • o8jasnite pro8leme koje pok(*avate da re*ite • o8jasnite pro8leme koje ste pok(*avali da i)8egnete ( svom program(P itd Kod vam govori kakoP komentari 8i tre8alo da vam ka>( )a*to.2! P i '2. int tip 8rojeva mo>e da 8(de #eo 8roj 8ilo koje veličine. F o)naka (ka)(je na stepen 8roja 1-. 21 . Napomena za iskusne pro%ramere Ne postoji pose8an long tip 8rojeva. Bi mo>emo to postiEi ( P/t0on1( koristeEi konstante i promenljiveP aP pored togaP na(čiEemo i neke dr(ge kon#epte ( ovom poglavlj(. $.vimaQT nije dovoljnoP )ar ne? Ii >elite da (radite mnogo vi*e od toga 1 vi >elite da imate neke (la)ne podatkeP menjate i0 na neki način i da do8ijete ne*to od svega toga. .amo prika)ivanje TPo)drav .3 =rojevi Brojevi se (glavnom dele na dve vrste 1 #ele 8rojeve i de#imale. 5ne se )ov( doslovne 3literalne6P jer 8(kvalno 1 koristite nji0ov( vrednost doslovno 3onako kako ste odk(#ali6. Primer doslovni0 konstanti s( 8rojevi kao na primer 'P 1.6 5snove .tringovi s( ( osnovi samo gomile reči. 5vo je korisno )a čitao#e va*eg programaP da 8i oni lako mogli da ra)(mej( *ta program radi. . 2edan primer je: #eo 8roj 3ili integer6 2 je samo vrednost koja predstavlja #eo 8roj. "snove .!F1$ . ZapamtiteP ta oso8a 3čitao# programa6 mo>ete 8iti i Ii sami 1 ali posle *est mese#iQ D Primetite da Ee )rint /+n0ciEa $. $. .

9ako ovoP na prvi pogled mo>e i)gledati kao lo*a stvarP to )aista i nije tako..6 5snove .%. . Pode*avanje komandne linije (n(tar ?indo@s1aP kako 8i ispravno prika)ivala na*e )nakoveP je i)van #ilja ove knjige6: 3odine $ (7 ime $ 9S2aroo)9 )rint. .%. #ilj( *to prostijeg o8ja*njavanja i .6 koristan. Napomena za *+*.H41&P dok na ?indo@s operativnim sistemima to nije sl(čaj.Fa0o se :ovesG.vaki pra)an prostorP odnosno ra)mak i (vlačenje 3ta8ovanje6 s( prika)ani onako kako s( i napisani.ač(vajte sledeEe linije kao Gajl /ormatiranEeIstrin3a!)y 3napomena: (koliko koristite "in(D mo>ete ( string( koristiti i na*e EiriličneJlatinične Gontove.* . %ak mo>ete slo8odno koristiti apostroGe i navodnike ( okvir( trostr(ki0 navodnika. Na ovom mest( nam je /ormat..P pro%ramere Zapamtite da s( stringovi koji s( #itirani i stringovi koji s( pod navodni#ima isti 1 oni se ne ra)lik(j(P niti se pona*aj( na 8ilo koji dr(gi način. pro%ramere Ne postoji pose8an char tip podataka ( P/t0on1(.. IideEemo )a*to to nije nikakvo ograničenje ( ra)ličitim programima koje Eemo pisati kasnije. . .etoda :or3atiranja Ponekad >elimo da i)gradimo stringove od neki0 dr(gi0 inGorma#ija.ime< 3odine66 22 .%."ond =779s< Hovan "ond =779s!. Napomena za Per-+P. .%. Primer je ..tringovi ( navodni#ima se pona*aj( na isti način kao stringovi i)me<( apostroGa.1 -)3e9u apostro:a Bo>ete odrediti string tako *to ga stavite i)me<( apostroGaP na primer T A)ostro/i s+ o0o mene9.% Stringovi se ne 3ogu 3enjati Ho )nači da kada ste kreirali neki stringP ne mo>ete da ga promenite.%FN2AP ( primerimaP koji se nala)e ( ovoj knji)iP s( kori*Eeni :Eelavi: GontoviP tj slova s( pisana 8e) karakteristični0 k(ki#a )a na* je)ik.%.3 -)3e9u trostruki' apostro:a ili navodnika Bo>ete da odredite string koji sadr>i vi*e linija () trostr(ke navodnike ili apostroGe 1 3 ::: ili TTT 6. Na primer: 999Ovo Ee strin3 i: vise liniEa! Ovo Ee )rva liniEa! Ovo Ee dr+3a liniEa! . Ho se de*ava )ato *to je kod veEine 3ako ne i kod svi06 distri8(#ija podra)(mevano kodiranje )nakova .. Ne postoji realna potre8a )a tim i sig(ran sam da Iam neEe nedostajati. .9J7K Ee imao J=K 3odina< 0ada Ee na)isao ov+ 0nEi3+!9!/ormat.. Pitao sam 3a! On rece .2 -)3e9u navodnika .Fa0o se :ovesG. 999 .

58ratiti pa>nj( na prv( primen( gde smo koristili a-bP *to odgovara promenljivoj ime koja je prvi arg(ment ( Gormat metod(.9JK Ee imao JK 3odina< 0ada Ee na)isao ov+ 0nEi3+!9!/ormat. Hako<e imajte na (m( da s( 8rojevi ( vitičastim )agradama op#ionalniP tako da je isto ovo moglo da se napi*e kao: 3odine $ (7 ime $ 9S2aroo)9 )rint. Ar(ga stvarP konver)ija ( string Ee se a(tomatski i)vr*iti /ormat metodomP (mesto da je ekspli#itno konvert(jemo ( stringP *to je potre8no ( ovom sl(čaj(. . 9majte na (m( da P/t0on počinje 8rojanje od -P *to )nači da je prva po)i#ija na indeks( -P dr(ga po)i#ija ima indeks 1P i tako dalje.!!!T 888 9J7:!3K9! /ormat. HreEeP kada se koristi /ormat metodaP mo>emo da promenimo por(k(P 8e) potre8e da se 8akEemo sa promenljivima koje se koriste i o8rn(to.)ython3 /ormatiranEeIstrin3a!)y S2aroo) Ee imao (7 3odina< 0ada Ee na)isao ov+ 0nEi3+! Lasto se S2aroo) i3ra sa tim Python-omG Kako to G(nk#ioni*e: .@aroop je napisao Zagrljaj PitonaT 2! .3odine6 * 9 3odina star9 P ali ova metoda je mnogo r(>nija i podlo>nija gre*kama.ime< 3odine66 )rint.6 )aokr(>en na ! #iGre )a de#imalni 8roj 3o)naka )a de#imalni 8roj 1 Gloat6 Gloat T-.tring mo>e da koristi nekoliko spe#iGika#ija i samim timP 9ormat metoda mo>e 8iti po)vana da )ameni te spe#iGika#ije sa odgovaraj(Eim arg(mentima /ormat metodoe.=436 – okr(>(je sa donjim #rtama 3V6 tekst koji Ee 8iti #entriran 3c6 na d(>in( od 11 karaktera TVVVPo)dravVVVT 888 9J7:IM==K9!/ormat. 5no *to P/t0on radi ( /ormat metodi je da )ameni svak( vrednost arg(menta na mest( spe#iGika#ije.ime66 koji Ee dati isti i)la) kao i ( pret0odnom program(.ime66 9)la): . Primetimo da smo mogli postiEi ist( stvar koristeEi spajanje stringova: ime * 9 Ee 9 * str.9Lasto se J7K i3ra sa tim Python-omG9!/ormat.9Lasto se JK i3ra sa tim Python-omG9!/ormat.lično tomeP dr(ga spe#iGika#ija je a1b koja odgovara promenljivoj 3odine koja je dr(gi arg(ment ( Gormat metodi.9Po:drav96 – opis rečima T.6 5snove )rint. Bog( postojati vi*e detaljne spe#iGika#ije kao *to s(: – de#imalni 8roj 3.

M99 ili . $.@ 48jekat ZapamtiteP P/t0on se odnosi prema svem( *to smo (neli ( program kao ob&ekatu.ač(vajte sledeEi primer i pokrenite program.ni#ode o)nake6P donje #rte 3TVT6 ili #iGre 3-1+6. 5vo je mesto gde promenljive dola)e ( #entar pa>nje. 2$ .8(d(EeP standardna pro#ed(ra da sač(vate i pokrenete P/t0on program je sledeEi: 1. Za ra)lik( od literalni0 konstantiP morate imati neki metod da prist(pite ovim promenljivim i )ato im dajemo neka imena. Promenljive s( (pravo ono *to ime s(geri*e 1 nji0ova vrednost mo>e variratiP odnosnoP mo>ete sač(vati 8ilo *ta koristeEi promenljive. $.denti9ikatori s( imenaP koja s( dataP da 8i identiGikovali ne3to. Prepi*ite kod programa datog ( primer(.ač(vajte ga kao datotek( sa imenom koje je pomen(to.mesto da ka>emo :ne3to:P mi ka>emo :ob&ekat:. Ho je rečeno ( generičkom smisl(.ve ove primere mo>ete proveriti ( interaktivnom prompt1(6.$ 0menovanje promenljive 9identi>ikacija. $." Promenljive Kori*Eenje samo literalni0 konstanti mo>e (skoro postati dosadno 1 moramo na neki način o8e)8editi č(vanja inGorma#ije i manip(la#ij( istim tim inGorma#ijama. $. – Primeri pravilnih imena identiGikatora s( iP IImoEeIimeP imeI(3. . .A Kako pisati P)t*on programe . – 5stale o)nake ( imen( identiGikatora mog( da se sastoje od slova 3velike ili male A.ni#ode o)nake6 ili donja #rta 3TVT6. 5tvorite svoj i)a8rani editorP npr Komodo Fdit. !. Primeri :neva/e'ih: imena identiGikatora s( (stvariPovo Ee na)isano sa ra:macima P moEeimeP8a=b(Ic3 i .M99 ili . Promenljive s( samo delovi memorije rač(nara gde Ii skladi*tite neke inGorma#ije.ime $ 9S2aroo)9< 0nEi3a $ 9La3rlEaE Pitona96 3.& ?ipovi podataka Promenljive mog( imati vrednosti ra)ličiti0 tipova koje )ovemo tipovi podataka 3data t/pes6.6 5snove 888 9JimeK Ee na)isao J0nEi3aK9!/ormat. $. 58ratite pa>nj( na malo i ( prvoj o)na#i i veliko slovo 9 ( dr(goj.. – 9mena identiGikatora s( osetljiva na veličin( slova.ada Eemo videti kako da koristite promenljive )ajedno sa literalnim konstantama.ovoIEeI)odInavodnicima. kasnijim poglavljimaP videEemo kako da kreirate sopstvene tipove podataka koristeEi klase 3#lass6. Napomena za / jektno /rijentisane pro%ramere P/t0on je strogo o8jektno orijentisan ( smisl( da je sve o8jekatP (klj(č(j(Ei 8rojeveP stringove i G(nk#ije. . Promenljive s( primeri identiGikatora. . Na primerP moEeime i moEeNme nisu iste promenljive. 5snovni tipovi s( 8rojevi i stringoviP o kojima smo veE govorili. 2. Postoje neka pravila koje morate da sledite pri imenovanj( identiGikatora: – Prva o)naka ( imen( identiGikatora mora da 8(de slovo a)8(ke 3velike ili male A. . .

i6 s $ 999Ovo Ee strin3 + vise liniEa! Ovo Ee dr+3a liniEa!999 )rint. Napomena za pro%ramere na statičnim jezi!ima Promenljive se koriste samo da 8i im dodeli vrednost. AaljeP mi smo prika)ali vrednost promenljive i kori*Eenjem )rint G(nk#ije kojaP *to nije i)nena<(j(EeP samo prika)(je vrednost promenljive na ekran(. 5va linija se )ove nared8a 3statement6P jer se ( njoj ka>e da ne*to tre8a da se (radiP ( ovom sl(čaj(P dodeliti promenljivojP koja se )ove iP vrednost '.14. .i6 i $ i * = )rint .9Po:drav Svima.)ython3 var!)y O > Ovo Ee strin3 + vise liniEa! Ovo Ee dr+3a liniEa! Kako to G(nk#ioni*e: Fvo kako ovaj program radi.. $. .96. Pokrenite interpreter sa komandnim )ython3 imeI)ro3rama!)y da pokrenete program. 9mpli#itnoP P/t0on o0ra8r(je da koristimo jedn( i)jav( po linijiP*to čini na* kod lak*e čitljivim.1B PrimerC Kori'7enje promenljivi* i literalni* konstanti 9me programa: var!)y i $ O )rint.i6 je eGektivno isto kao i i $ O. 2' . Zatim smo ga prika)ali i očekivanoP do8ijamo vrednost 6 . Primer logičke linije je i)java pop(t )rint. P/t0on impli#itno pretpostavlja da svaka 9i*i-ka lini&a odgovara logi-no& lini&i. Ako >elite da navedete vi*e od jednog logičkog reda na jednoj Gi)ičkoj linijiP onda morate da i)ričito :ka>ete: to P/t0on1(P koristeEi tačk(1)are) 3e6 koji poka)(je na kraj logičke linijeJi)jave. Nije potre8no da se vr*i deGini#ija tipa podatakaP niti ikakva deklara#ija. Na primer: i $ O )rint. Zatim smo dodali 1 na vrednosti koja se nala)i ( i i sač(vali ga na)ad ( promenljiv( i. Prvo smo dodelili literaln( konstant( vrednosti ' promenljivoj i pomoE( operatora dodele 3 d 6.s6 9)la): .1 Logička i :i)ička linija 4i)ička linija je ono *to vidite kada pi*ete program. "ogička linija je ono *to Python vidi kao jedn( nared8(.6 5snove $. Ako je to prika)ano na jednoj liniji 3kako ga vidite ( editor(6P onda to tako<e odgovara i Gi)ičkoj liniji.lično tomeP mi smo dodelili literaln( konstant( koja jeP ni*ta dr(go nego stringP promenljivoj s P a )atim je prika)ali na ekran(.

stvariP nikada nisam koristioP ili čak video tačk(1)are) ( nekom P/t0on program(. Primetite Eedan ra:ma0 na )ocet0+ D liniEe )rint. )rint.i6 PonekadP postoji impli#itna pretpostavka gde Ii ne morate da koristite o8rn(t( kos( #rt(.9PonavlEam< vrednost Ee 9 < i6 Kada pokrenete ovoP do8iEete sledeE( gre*k(: 26 . Postoji jedna sit(a#ija ( kojoj je ovaj kon#ept stvarno koristan: ako imate d(gačk( linij( kodaP mo>ete je ra)8iti na vi*e Gi)ički0 linija koristeEi o8rn(t( kos( #rt( 3f6.i6.lično tomeP )rint\ . a isto se mo>e napisati kao i $ O.2 Uvlačenje . ZapravoP razma!i na početku -inija su važni . Bo>ete to videti ( ak#iji kada 8(demo pisali programe koristeEi liste ( kasnijim poglavljima. Ho je sl(čaj kada logička linija ima početn( )agrad(P početn( (glast( )agrad( ili početn( vitičast( )agrad(P ali ne i krajnj(. 2edna stvar koj( tre8a )apamtiti je da pogre*no (vlačenje dovodi do gre*aka.. 9deja je da nikada ne tre8a da koristite tačk(1)are).i6 Be<(timP ja preporučujem da se dr>imo pisanja maksima-no jedne -o%ičke -inije na svaku pojedinačnu )izičku -iniju.14.i6 je isto kao i )rint.a)ma#i na početk( 3ra)ma#i i ta8ovi6 koji se nala)e na početk( logičke linije se koriste da se odredi nivo indenta#ije logičke linijeP *to seP kako se ispostaviloP koristi da se odredi gr(pisanje 38lokova6 nared8i. Na primer: i $ O )rint. . )rint. ili čak i $ O.6 5snove )rint. IideEemo primere )a*to s( 8lokovi va>ni ( kasnijim poglavljima. 5vo se na)iva eksp-i!itno spajanje -inija: s $ 9Ovo Ee strin3! \ Ovo Ee nastava0 strin3-a!9 )rint.s6 5vo daje i)la): Ovo Ee strin3! Ovo Ee nastava0 strin3-a! .vaki takav sk(p komandi se na)iva -ok. . .9Vrednost Ee 9 < i6 D @res0a.a)mak je va>an ( P/t0on1(.i6. Ho )nači da komande koje id( )ajednoP moraju da imaj( isti nivo (vlačenja. . 5vo se )ove indenta!ija 3(vlačenje6. Ho se )ove imp-i!itno spajanje -inija.

#ako da uvučete Koristite samo ra)make )a (vlačenjeP ako koristite ta8oveP 8(dite sig(rn da je pode*en na veličin( od $ ra)maka. Pokreni /rom II/+t+reII im)ort braces da sa)nate vi*e. Primetite Eedan ra:ma0 na )ocet0+ M NndentationError: +ne5)ected indent 58ratite pa>nj( da postoji jedan ra)mak na početk( dr(gog reda.l(čajevi ( kojima mo>ete da koristite nove 8lokove 8iEe detaljno opisani ( kasnijim poglavljimaP kao *to je kontrola protoka. .. Kre*ka na koj( (ka)(je P/t0on nam govori da je sintaksa programa pogre*naP odnosno program nije ispravno napisan.e%ime .11 .ada kada smo pro*li kro) mnoge dosadne detaljeP mo>emo da pre<emo na mnogo interesantnije stvari pop(t nared8i kontrole tokova 3#ontrol Glo@ statements6. .2hites)ace!)y.6 5snove Cile .6P ( s(protnomP va* program Ee poka)ati gre*ke.. Napomena za pro%ramere statički0 jezika P/t0on Ee (vek koristiti (vlačenje )a 8lokove i nikada neEe koristiti vitičast( )agrad(. $. B(dite sig(rni da ste do8ro na(čili ono *to ste pročitali ( ovom poglavlj(. 2 .verite se da koristite isti 8roj mesta )a (vlačenje 3$ ra)maka prvi 8lokP & dr(gi itd. Ao8ri editori kao *to je Komodo Fdit Ee a(tomatski da (vlače potre8ne delove programaP (mesto vas.9Val+e is 9< i6 D @res0a. =ta to )nači )a vas? Znači da ne mo/ete *apo-eti nove blokove naredbi proi*vol&no 3osim )a podra)(mevani glavni 8lok koji ste koristili sve do sadaP naravno6.< line A )rint.

kratko Eemo da pojasnimo operatere i nji0ov( (potre8(: 9majte na (m( da mo>ete da proverite i)ra)e date ( primerima koristeEi interaktivni prompt. 1-o%ičko #S8:8 nad itovima2 logičko K. 33 1stepen2 IraEa D stepenovan sa / 3 PP A daje Q= 3tj. 9la9 P 3 daje 9lalala9 .(A daje (> . -O!( daje negativan 8roj i O7 . == 88 = daje O . Pomeranje (levo od 2 8ita daje 1--. 2ednostavan primer i)ra)a je 2 [ ! . . ++ 1!e-o rojna vrednost rezu-tata pode-e2 IraEa #eo 8roj od re)(ltata deljenja A 44 3 daje = . 9a9 * 9b9 daje 9ab9.i 16 ( RR ( daje Q . 66 1pomeranje udesno2 Pomera 8itove datog 8roja (desno )a 8roj 8itova navedeni0 ( dr(gom 8roj(. )perator je G(nk#ionalnost koja radi ne*toP i mo>e 8iti predstavljen sim8olimaP kao *to je [ ili pose8nim rečima 3o)nakama6. 4 1modu-o2 Aaje ostatak podele dva 8roja Q % 3 daje ( . 9)ra) se mo>e ra)lo>iti na operatore i operande. 3 1množenje2 mno>enje dva 8roja ili vraEa string ponovljen dat 8roj p(ta.*to predstavlja de#imalni 8roj & . 3 P 3 P 3 P 3 6 + 1de-jenje2 Podeli D sa / A 4 3 daje =!3333333333333333 . Na primerP da testirate i)ra) 2 [ ! P koristite interaktivni P/t0on prompt: 888 ( * 3 O 888 3 P O =O 888 . 1p-us2 Aodaje dva o8jekta 3 * O daje Q . 7 1-o%ičko 8 nad itovima2 logičko 9 nad 8rojevima koji s( predstavljeni 8itovima 3slično kao i pomeranje 8itova i) gornjeg primeraP samo *to se ovde vr*i logička opera#ija nad tim 8itovima6 O S 3 daje = .( 8itovima 38inarni o8lik6.vaki 8roj je )ast(pljen ( memoriji rač(nara kao sk(p 8itova ili 8inarna #iGraP odnosno sk(p .5peratori i Fkspresije . 5peratorima s( potre8ni neki podat#i da 8i i)vr*ili nek( radnj( nad njima i takvi poda#i se )ov( operandi.9"9 nad 8itovima 8rojeva 2& . 1 3min(s6 5d()ima jedan 8roj od dr(gogP ako prvi operand nije na)načen pretpostavlja se da je n(la. 11 je predstavljen ( 8itovima sa 1-11 *to kada pomeraimo ( desno )a 1 8it daje 1-1 koji je de#imalni 8roj '. &. 55 1pomeranje u-evo2 Pomera 8itove od datog 8roja (levo )a 8roj pre#i)irani0 8itova.1 4peratori . 2 predstavlja 1. 9 1-o%ičko 8:8 nad itovima2 logičko 9"9 nad 8itovima 8rojeva O T 3 daje U . -(O!O % (!(O daje =!O . 3. ovom sl(čaj(P 2 i ! s( operandi. "peratori i <kspresije IeEin( nared8i 3logički0 linija6 koje 8(dete pisali Ee sadr>ati ekspresi&e 3matematičke i)ra)e6. ( P 3 daje > .

5 $$ y vraEa Tr+e .1. Ho se )ove eval(a#ija ( kratkom spoj(. Ako s( o8a operanda 8rojeviP oni s( prvo konvert(j( ( )ajednički tip. 5 $$ y vraEa Tr+e .5peratori i Fkspresije O M 3 daje > < 1-o%ička inverzija itova2 "ogička inver)ija D je 1 3D [16 VO daje -> . 5= 1manje i-i jednako2 Poredi da li je D manje ili jednako / 5 $ 3. y $ 9st'9. y $ Tr+e. 58ratite pa>nj( na velika slova ( imenima vrednosti. &. and 1>u-ovo 82 5 and y vraEa Calse ako je D Calse P inače vraEa vrednost / 5 $ Calse. . 5 and y vraEa Calse po*to je D Calse! . or 1>u-ovo 8:82 Ako je D Tr+e P vraEa Tr+eP inače vraEa vrednost / 5 $ Tr+e. . . y $ 9str9. 5 .. 5 R$ y vraEa Tr+e.o8ičajeno je da se tra>i neka matematička opera#ija nad promenljivomP a )atim da se :vrati: vrednost re)(ltata te opera#ije na)ad ( promenljiv(P pa postoji preči#a )a takve i)ra)e: Bo>ete napisati: a $ ( a $ a P 3 kao: a $ ( a P$ 3 Primetimo da :var $ var o)eraciEa i:ra:: postaje :var o)eraciEa $ i:ra::. 6 1ve$e od2 Poredi da li je D veEi od / O 8 3 vraEa Tr+e . != 1nije jednako2 Poredi da li o8jekti nis( jednaki 5 $ (. 5 $ Tr+e. O R 3 daje Calse a 3 R O daje Tr+e. == 1da -i je jednako2 Poredi da li s( o8jekti jednaki 5 $ (. not 1 u-ovo N(2 Ako je D Tr+e P on vraEa Calse . Pore<enja mog( 8iti prod(>ena proi)voljno: 3 R O R U Ee dati Tr+e . 5 $ 9str9.$ y vraEa Tr+e . Ako je D Calse P vraEa Tr+e .2 Koje eval#acije imaj# proritet? Ako ste imali i)ra) kao *to je ( * 3 P A P da li se vr*i prvo sa8iranje ili mno>enje? Na*a 2+ . 5 8$ y vraEa Tr+e . 5 $$ y vraEa Calse . y $ Calse. ovom sl(čaj(P P/t0on neEe (op*te proveravati vrednost /P jer )na da i)ra) sa leve strane TandT ima vrednost Calse *to a(tomatski )nači da Ee #eo i)ra) da 8(de Calse ne)avisno od dr(gi0 vrednosti. 5 or y vraEa Tr+e . y $ >. y $ 3. Fval(a#ija kratkog spoja va>i i ( sl(čaj( opera#ije or. not 5 vraEa Calse . s(protnomP (vek vraEa Calse.1 Preči#e )a 3ate3atike opera#ije i dodavanja vrednosti . y $ 3. 6= 1ve$e i-i jednako2 Poredi da li je D veEi ili jednako / 5 $ A. 5 $ 9str9.vi operatori koji (pore<(j( vrednosti vraEaj( vrednosti Tr+e ili Calse . 5 1manje od2 Proverava da li je D manje od /. y $ (.

!- . "ogičko 3nad 8itovima6 K. Postoji dodatna prednost kori*Eenja )agrada 1 one nam poma>( da se promeni redosled i)vr*avanja eval(a#ije. &.@ ' .3 Promena redosleda i%vr'avanja eval#acije Aa 8i i)ra)e (činili lak*e čitljivimP mo>emo koristiti )agrade.( * 36 P A .eGeren#a atri8(ta ?Binde?C s(8skrip#ija ?Binde?D:inde?EC . Ho )nači da Ee ( datom i)ra)(P P/t0on prvo i)vr*iti operatore i ekspresije koji se nala)e ni>e ( ta8eliP pre nego *to Ee i)vr*iti one *to s( navedeni i)nad nji0 ( ta8eli. Pogledajte Promena redosleda eval(a#ije )a detalje.3 P A6 je deGinitivno lak*e ra)(meti nego ( * 3 P A jer ovako napisanoP )a0teva )nanje redosleda i)vr*avanja operatora.( * . 7 "ogičko 9 nad 8itovima 55@ 66 Pomeranja . Na primerP ( * . -am da "am8da i)ra) or B(lova 9"9 and B(lova 9 not ? B(lova NF in@ not in Hest pripadnosti is@ is not Hest identiteta 5@ 5=@ 6@ 6=@ !=@ == Pore<enja 9 "ogičko 3nad 8itovima6 9"9 .ledeEa ta8ela pre()eta sa P/t0on reGeren#e man(alP ovde je prilo>ena radi kompletnostiP jer je ipak daleko pametnije koristiti )agrade )a gr(pisanje operatora i operanda na >eljeni način kako 8i se ekspli#itno naveo prednost i)vr*avanja.5peratori i Fkspresije matematika i) vi*i0 ra)reda osnovne *koleP nam govori da tre8a da se prvo (radi mno>enje. Hako gr(pisani čine na* program lak*e čitljiv. Na primerP ako >elite da dodavanje 8(de i)vr*eno pre mno>anja ( na*em primer(P onda mo>ete napisati ovako . Na primerP [ i 1 imaj( ist( prednost prvenstva i)vr*avanja. 5perateri koji imaj( isto prvenstvo s( navedeni ( istom red( ( gornjoj ta8eli. Kao i ( svem( dr(gomP )agrade tre8a (mereno koristiti 3ne preter(jte6 i ne 8i tre8alo da i0 8(de s(vi*ni0P kao ( .?@ '? Po)itivanP negativan <? "ogičko NF nad 8itovima 33 .tepenovanje ?Aatri ut .ečenje liste )1ar%ument AAA2 Po)iv G(nk#ije 1ekspresija@ AAA2 Prika)ivanje ili dodela vrednosti t(ple1ima 3prika)ivanje vrednostiP ili dodela vrednosti vi*e promenljivi0 ( isto vreme6 Bekspresija@ AAAC prika) liste Fk-ju!:datum@ AAAG prika) rečnika 5peratori na koje nismo jo* nai*li Ee 8iti o8ja*njeni ( narednim poglavljima. Ho )nači da operator mno>enja ima veEi prioritet od operatora sa8iranja. . .a8iranje i od()imanje 3@ +@ ++@ 4 Bno>enjeP deljenjeP #elo8rojno deljenje i 5statak .3 P A66 .5.ledeEa ta8ela predstavlja prvenstvo opera#ija ( P/t0on1(P od najni>eg prioriteta 3najkasnije se i)vr*ava6 do najvi*eg prioriteta 3najranije se i)vr*ava6.

)ython3 e0s)resiEe!)y Povrsina Ee =7 Obim Ee =A Kako to G(nk#ioni*e: A(>ina i *irina pravo(gaonika se č(vaj( ( promenljivim istog imena. 5vo je primer kako P/t0on mo>e da (čini >ivot lak*i )a programera. Ho )nači da s( operatori sa istim prvenstvom i)vr*avanja eval(iraj( 3i)vr*avaj( se6 sa leve na desn( stran(.b $ c6 . Asocijativnost 9dodela vrednosti.9Povrsina Ee9< )ovrsina6 )rint. %(vamo re)(ltat i)ra)a d+:ina P sirina ( promenljivoj )ovrsina P a )atim je prika>emo pomoE( )rint G(nk#ije.9Obim Ee9< ( P . .5peratori i Fkspresije &. Bi i0 koristimo )a i)rač(navanje povr*ine i o8ima pravo(gaonika () pomoE i)ra)a.$ . 9ako nismo naveli ra)mak i)me<( T Povrsina EeT i promenljive )ovrsina P P/t0on je to (radio )a nasP tako da smo do8ili čist i lep i)la)P a i program je mnogo čitljiviji na ovaj način 3jer ne moramo da 8rinemo o ra)mak( ( stringovima koje koristimoP prilikom prika)a6. dr(gom sl(čaj(P mi smo direktno koristiti vrednost i)ra)a ( P . Hako<eP primetite kako P/t0on Tlepo *tampaT i)la). Na primerP ( * 3 * A se i)vr*ava kao .e%ime Iideli smo kako da koristimo operatoreP operanade i i)ra)e 1 a to s( osnovni gradivni 8lokovi 8ilo kojeg programa.d+:ina * sirina66 9)la): . Primer 3sač(vati kao e0s)resiEe!)y6: d+:ina $ O sirina $ ( )ovrsina $ d+:ina P sirina )rint." 0%ra%i 9ekspresije.d+:ina * sirina6 ( G(nk#iji )a prika) 3print6. Neki operateri pop(t dodele vrednosti 3d6P imaj( s desna na levo aso#ijativnost tj a $ b $ c tretira se kao a $ . 5peratori se o8ično aso#iraj( 3dodelj(je im se vrednost6 sa leva na desno. sledeEem poglavlj( mi Eemo videti kako da iskoristimo to ( na*im programima koristeEi nared8e 3statements6. !1 . . &.( * 36 * A . &.

9&e< on Ee mal0o veci ne3o taE!96 D Hos Eedan blo0 D Wo:ete raditi sta vam Ee volEa + ovom blo0+ else: )rint.Ali nisi osvoEio ni0a0v+ na3rad+.3lavnom.6 @otovo :6 !2 . =ta ako ste >eleli da promenite tok i)vr*avanja programa? Na primerP >elite da program donosi neke odl(ke i radi ra)ličite stvari ( )avisnosti od ra)ličiti0 sit(a#ijaP kao *to je prika) reči TAo8ro j(troT ili TAo8ro veče:P ( )avisnosti od do8a dana? Kao *to ste mo>da pogodiliP to se posti>e kori*Eenjem komandi kontrole protoka.& Kontrola protoka / =ontrola protoka .in)+t.9. programima koje smo videli do sadaP (vek je postojao ni) nared8iP koje se verno i)vr*avaj( od strane P/t0on1a ( tačnom poretk( od vr0a nani>e. blo0+ 9)la): .)ython3 i/!)y Po3odi broE: (3 Cestitamo< )o3odio si 3a! .9&e< on Ee mal0o manEi ne3o taE96 D Xa bi se i:vrsio ovaE blo0 moralo Ee biti )o3adEanEe 8 broE! )rint.999@otovo :69996 D OvaE red ce se +ve0 i:vrsavati )osle i/ D )rovere< Eer Ee + . Postoje tri komande )a kontrol( tokova ( P/t0on1( 1 i/ P /or i 2hile .696 D &ovi blo0 se D :avrsava ovde eli/ )o3adEanEe R broE: )rint.9Cestitamo< )o3odio si 3a!96 D &ovi blo0 )ocinEe ovde )rint.)ython3 i/!)y Po3odi broE: (( &e< on Ee mal0o veci ne3o taE! @otovo :6 .Ali nisi osvoEio ni0a0v+ na3rad+.1 0> komanda i/ komanda se koristi da proverite (slov: ako je (slov istinaP mi pokreEemo 8lok nared8i 3na)van i9 blok6P ina-e Eemo o8raditi sledeEi 8lok nared8i 3na)van else blok6. Ar(ga kla()(la je op#ionalna 3)nači da else18lok ni&e obave*an6.9Po3odi broE: 966 i/ )o3adEanEe $$ broE: )rint.)ython3 i/!)y Po3odi broE: O7 &e< on Ee mal0o manEi ne3o taE @otovo :6 . @. Primer 3sač(vati kao i/!)y 6: broE $ (3 )o3adEanEe $ int.

999@otovo :69996 . Zatim smo proverili da li je pretpostavka manja od i)a8ranog 8rojaP i ako je takoP mi o8avestimo korisnika da mora da pogodi 8roj koji je malo veEi od toga. 5nda pitamo )a pretpostavk( korisnika kori*Eenjem in)+t. Nadam se da ste )alepili )a pravilo :doslednog (vlačenjs:.6 vraEa program(P ono *to smo (k(#aliP kao string. 2hile nared8a mo>e imati op#ionalan else deo. 4(nk#ije s( samo vi*ekratne komade programa 3tj. ovom program(P ()imamo naga<anja od strane korisnika i proverimo da li je to 8roj koji smo m( )adali. @.2 1*ile nared8a 2hile nared8a vam omog(Eava da se konstantno i)vr*ava neki 8lok komandiP dokle god (slov 3)8og koga se @0ile i po)iva6 je Tr+e 3tačan6.. Ho je ra)log )a*to je toliko va>no (vlačenje 3ra)mak6 ( P/t0on1(.. BoraEete da 8(dete pa>ljivi oko svi0 ovi0 stvari ( početk(P ali posle malo prakse Ia* rad Ee postati prijatan sa njimaP i sve Ee postati prilično TprirodnoT )a vas. Nakon togaP P/t0on vidi kraj programa i jednostavno ga )avr*i. 5no *to smo ovde koristi je eli/ kla()(la koja )apravo kom8in(je dve ve)ane i/ else-i/ else nared8e ( jedn( kom8inovan( i/-eli/-else . Ako s( jednakiP mi prika)(jemo por(k( o (spe*nom pogotk(. . Primetite da koristimo nivoe (vlačenja da ka>emo P/t0on1( koje i)jave pripadaj( kojem 8lok(. 2este li? 58ratite pa>nj( da komanda i/ sadr>i dvotačk( na kraj( 1 mi time ka>emo P/t0on1( da sledi neki 8lok nared8i. Binimalna validna iG nared8a: i/ Tr+e : )rint .. Primer 3sač(vati kao 2hile!)y 6: !! . Napomena za *+*. ZapravoP int je klasaP ali sve *to tre8a da )nate je da mo>ete da ga koristite )a konvertovanje stringa ( #eo 8roj 3pod pretpostavkom da je string sadr>i va>eEi #eo 8roj kao tekstP npr T6TP T1'T itd.6.& Kontrola protoka Kako to G(nk#ioni*e: . . Ii Eete pročitati vi*e o njima ( sledeEem poglavlj(. Bo>ete koristiti i/!!eli/!!else nared8e da (radi ist( stvar 3iP ( nekim sl(čajevimaP koristite rečnik 3di#tionar/6 da to (radite 8r)o6.ve s( to prilično jednostavne stvari 3i)nena<(j(Ee jednostavne )a neke od vas koji dola)e i) MJM[[ sveta6. Bi postavljamo string 3rečeni#(6 ( in)+t G(nk#ij(P koja je prika)(je na ekran( i čeka (nos od korisnika. Bi postavljamo vrednost promenljive broE na 8ilo koji #eo 8roj koji mi >elimoP re#imo 2!.Ho nam čini program lak*im i smanj(je količin( nepotre8nog (vlačenja. ovom sl(čaj(P to je glavni 8lok 3gde je i)vo<enje programa i počelo6P i sledeEa nared8a je )rint. Bi onda konvert(jemo taj string ( #eo 8roj pomoE( int a )atim ga sač(vamo ( promenljivoj )o3adEanEe . eli/ i else nared8e moraj( imati i dvotačk( na kraj( logičke linije praEen( odgovaraj(Eim 8lokom nared8i 3() pravilno (vlačenjeP naravno6.6 G(nk#ije. 9ako je ovo vrlo jednostavan programP ja sam istakao mnogo stvari koje Ii tre8a da primetite. delovi programa koji mo>emo koristiti na vi*e ra)ličiti0 mesta ( samom tom program(6. Kada smo (k(#ali ne*to i pritisnite enter tasterP in)+t. pro%ramere Nema s2itch komande ( P/t0on1(. Bo>ete imati jo* i/ komandi (n(tar iG18lokaP sačinjen( od i/ nared8eP i tako dalje 1 to se )ove (gnje><enje i/ komandi. AaljeP mi smo (poredili pogodak od korisnika sa 8rojem koji smo i)a8rali. 9Xa< tacno Ee!9 6 Nakon *to je P/t0on )avr*io i)vr*avanje i/ komande )ajedno sa pridr(>enom eli/ i else kla()(lamaP on prela)i na sledeE( komand( ( 8lok( koji je sadr>ao i/ nared8(. 2hile nared8a je primer onoga *to se )ove ponavl&a&u'a komanda 3looping statement6. Zapamtite da eli/ i else delovi koda s( op#ioni.

Bi smo pomerili in)+t i i/ komande (n(tar 2hile petlje i podesili promenljiv( radim na Tr+e pre @0ile petlje. Ako je (slov tačanP ponovo Ee se i)vr*iti @0ile18lokP ( s(protnom Eemo nastaviti da i)vr*avamo op#ioni else18lokP a )atim prela)imo na sledeE( komand(.9&e< broE Ee malo manEi od tvo3!96 else: )rint.in)+t. ovom program(P jo* (vek se igramo igr( poga<anja 8rojaP ali prednost je ( tome *to korisnik mo>e da nastavi poga<anje sve dok ne pogodi 1 nema potre8e da stalno pokreEe program )a svako poga<anjeP kao *to je 8io program ( pret0odnom odeljk( . PrvoP mi smo proverili da li promenljiva radim je )aista Tr+e P a )atim nastavili da i)vr*avamo odgovaraj(Ei $hile blok.311Hr(eP -14alse6.9Po3odi broE: 966 i/ )o3odi $$ broE: )rint.9&e< broE Ee malo veci od tvo3!96 else: )rint.9FraE!96 9)la): .9Cestitam< )o3odio si!96 radim $ Calse D Ovo ce )re0in+ti 2hile )etlE+ i )reci na ne0i D red )osle nEe eli/ )o3odi R broE: )rint. else18lok se i)vr*ava kada (slov )a 2hile petlj( postane Calse 1 to mo>e 8iti čak i prvi p(t kada se stanje (slova proverava.9Yhile )etlEa Ee 3otova!96 D Ovde mo:ete da radite sta Vam Ee volEa )rint. 5vaj primer naj8olje demonstrira kori*Eenje 2hile nared8e.)ython3 2hile!)y Po3odi broE: O7 &e< broE Ee malo manEi od tvo3! Po3odi broE: (( &e< broE Ee malo veci od tvo3! Po3odi broE: (3 Cestitam< )o3odio si! Yhile )etlEa Ee 3otova! FraE! Kako to G(nk#ioni*e: . Nakon i)vr*avanja #elog tog 8lokaP (slov se ponovo proveravaP a to je ( ovom sl(čaj( radim promenljiva. Ako postoji else kla()(la )a 2hile1petlj(P ona Ee se (vek i)vr*avati osim ako i) @0ile petlje ne :iskočimo: sa brea0 komandom. Tr+e i Calse se na)ivaj( B(love vrednosti 3po B(lovoj alge8ri6 i mo>ete i0 smatrati ekvivalentima vrednosti 1 i .& Kontrola protoka broE $ (3 radim $ Tr+e 2hile radim: )o3odi $ int. !$ .

6 generi*e ni) 8rojevaP ali Ee on generisati samo jedan 8roj ( jednom tren(tk(P kada od njega Gor1petlja to 8(de )a0tevala )a sledeEi prola) kro) ni) komandi. Na primerP ran3e.& Kontrola protoka Napomena za *+*.)ython3 /or!)y = ( 3 A PetlEa /or Ee 3otova! Kako to G(nk#ioni*e: .. Ako >elite da odma0 vidite p(n( sekven#( 8rojevaP koristite list. Primer 3sač(vati kao /or!)y 6: /or i in ran3e. /or petlja )atim ponavlja svoje komande ( ovom opseg( 1 )a /or i in ran3e.=<O<(6 daje nam ?=<3B 3tj. Na primerP ran3e. "iste s( o8ja*njene ( gpoglavlj( o str(kt(ri podatakah. Zapamtite da /or!!in petlje rade )a svak( sekven#(. 9majte na (m( da ran3e.9PetlEa /or Ee 3otova!96 9)la): . pro%ramere Zapamtite da mo>ete imati else kla()(l( )a 2hile petlje. Ako mi postavimo treEi 8roj ( ran3e G(nk#ij(P onda on postaje korak 8rojanja. Bi generi*emo ni) 8rojeva pomoE( (gra<ene ran3e G(nk#ije.ran3e.=<O6 daje nam sekven#( ?=< (< 3< AB . @. Zapamtite da opseg koji >elimoda do8ijemoP se prote>e D) dr(gog 8rojaP odnosno da ne sadrži taj dr(gi 8roj. 2ava programeri Ee primetiti da je slična /or !' . 1P 1[26.66. ovom program(P mi smo prika)ali ni) 3sekvencu6 8rojeva. Bi Eemo videti ne*to vi*e o sekven#ama 3neki predmeti ( nekom ni)(6 detaljno ( kasnijim poglavljima. MS programeri Ee primetiti da /or1 petlja ( P/t0on1( je slična /oreach petlji ( MS.=< O6: )rint.=<O6 ekvivalentno je /or i in ?=< (< 3< AB P *to je dodeljivanje svakog 8roja 3ili o8jekta6 ( ni)(P promenljivoj iP i to jednog ( jednom tren(tk(P a )atim i)vr*ava 8lok nared8i )a svak( vrednost i . Ali kada smo ga deGinisaliP (vek se i)vr*ava jednom po*to se /or1petlja )avr*iP osim ako ij nismo prekin(li sa brea0 nared8om. Zapamtite da else deo nije o8ave)an. Napomena za *+*. ovom sl(čaj(P mi ( 8lok( i)java imamo komand( koja samo ispi*e vrednost promenljive.+Hava+*I pro%ramere P/t0on /or petlja je radikalno dr(gačija od MJM[[ /or petlje. Podra)(mevanoP ran3e 8roji 3kreira sekven#(6 sa korakom vrednosti od 1. . 5vde imamo list( 8rojeva koje generi*e (gra<ena ran3e G(nk#ijaP ali generalno mo>emo koristiti 8ilo koji ni) 8ilo koje vrste o8jekataQ Bi Eemo istra>iti ov( idej( detaljno ( kasnijim poglavljima. 5no *to mi ovde radimo je to da )adajemo dva 8roja ( ran3e G(nk#ij(P koja nam vraEa ni) 8rojeva koji počinj( od prvog 8rojaP ali do dr(gog 8roja 3)nači da dr(gi 8roj nije (klj(čen ( ni)6.3 >or petlja /or!!in komanda je jo* jedna komanda )a petlj( koja prola*i kro) ni) predmetaP odnosno prola)e kro) svak( stavk( ( ni)(. 5no *to tre8a da )nate )a sada je to da je sekven#a samo kolek#ija 3neki06 stavki ( 3nekom6 odre<enom raspored(.i6 else: )rint..

X+:ina strin3a Ee (A U0+caE bilo sta: i:la: FraE Kako to G(nk#ioni*e: . Napravili smo i pose8an (slov da 8i se )a(stavio program na taj način *to korisnik jednostavno (k(#a Ti:la:T . @. Ia>na napomena je da ako se prekine /or ili 2hile petlja sa komandom brea0P ako postojiP )a odgovaraj(E( petlj(P elseP else18lok se N(J( i)vr*iti. /.la) koji sam koristio ( ovom primer( je mini pesma koj( sam napisao i na)vao S$aroop:s Poetic Python 3ovde je napisana ( original(6: :Programming is G(n ?0en t0e @ork is done iG /o( @anna make /o(r @ork also G(n: !6 .9X+:ina strin3a Ee9< len.int i : NntArray6 ( 2avi 1.& Kontrola protoka . MJM[[P ako >elite da pi*ete /or .s66 )rint. .'. i**6 P to 8i smo ( P/t0on1( napisati kao /or i in ran3e.9FraE96 9)la): .%.)ython3 brea0!)y U0+caE bilo sta: Pro3ramiranEe Ee :abavno X+:ina strin3a Ee (A U0+caE bilo sta: Fada se :avrsi )osao X+:ina strin3a Ee (7 U0+caE bilo sta: a0o :elite da vas )osao b+de :abavan X+:ina strin3a Ee 3> U0+caE bilo sta: 0oristi Python. Zapamtite da brea0 nared8a mo>e da se koristi isto tako i sa /or1petljom. i R O. Kao *to mo>ete da viditeP /or1petlja je jednostavnijaP vi*e i)ra>ajna i manje sklona gre*kama ( P/t0on1(.1 S8aroop(ova pes3a o P6t'on(u .int i $ 7. 8reak komanda brea0 komanda se koristi da 8i se prekinulo i)vr*avanje neke petljeP odnosno komanda momentalno )a(stavi i)vr*enje komande petljeP čak i ako (slov )a petlj( nije postao Calse ili prola)ak kro) sekven#( stvari nije potp(no )avr*en. ovom program(P mi konstantno tra>imo od korisnika da (k(#a ne*toP a )atim prika)(jemo d(>in( (k(#anog stringa. A(>ina (la)ne niske mo>e se sa)nati pomoE( (gra<ene len G(nk#ije.9U0+caE bilo sta: 96 i/ s $$ 9i:la:9: brea0 )rint. Primer 3sač(vati kao brea0!)y 6: 2hile Tr+e: s $ in)+t. Bi )a(stavljamo program sa brea0 komandom koja Ee program :i*baciti: i) petljeP i )atim dola)imo do kraja programa.7<O6 .

9Previse Ee 0rat0o!96 contin+e )rint. sledeEem poglavlj( Eemo videti kako da kreiramo i koristimo G(nk#ije.9Nn)+t Ee :adovolEavaE+ce d+:ine!96 D Wo:ete :adavati dr+3e 0omande :a ne0i rad ovde 9)la): .)ython3 contin+e!)y U0+caE nesto: a Previse Ee 0rat0o! U0+caE nesto: =( Previse Ee 0rat0o! U0+caE nesto: abc Nn)+t Ee :adovolEavaE+ce d+:ine! U0+caE nesto: i:la: Kako to G(nk#ioni*e: . . 5vo s( neke od najče*Ee kori*Eeni0 komandi ( P/t0on1( i samim timP (po)najte se do8ro sa njimaP jer s( od s(*tinskog )načaja )a pisanje programa. 9majte na (m( da contin+e komanda isto mo>e da radi i (n(tar /or1petlje.$ . AakleP mi koristimo (gra<en( len G(nk#ij( da 8i do8ili d(>in( stringa i ako je d(>ina manja od !P preskočimo ostatak komandi (n(tar 8loka pomoE( contin+e nared8e.e%ime Iideli smo kako da koristimo tri i)jave kontrole programa 1 i/ P 2hile i /or )ajedno sa svojim pridr(>enom brea0 i contin+e nared8ama. Primer 3sač(vati kao contin+e!)y 6: 2hile Tr+e: s $ in)+t. .& Kontrola protoka (se P/t0onQ: @." contin#e komanda contin+e komanda se koristi da ka>emo P/t0on1( da preskoči ostatak nared8i ( tek(Eem 8lok( (n(tar petlje i da nastavi sa sledeEim i)vr*avanjem te iste petlje.s6 R 3: )rint. s(protnomP ostale nared8e ( petlji se i)vr*avaj(P radeEi 8ilo kakv( vrst( o8rade koj( mi >elimo da (radimo. ovom program(P tra>imo (nos od korisnikaP aliP mi >elimo da o8radimo (la)ni string samo ako je najmanje ! karaktera d(gačak.9U0+caE nesto: 96 i/ s $$ 9i:la:9: brea0 i/ len. @. ! .

Kada po)ivamo G(nk#ij(P mi joj dodelj(jemo vrednosti parametara na isti način.)ython3 /+n0ciEa=!)y Po:drav Svima. D blo0 0oEi )ri)ada /+n0ciEi D )o:iva /+n0ciE+ D o)et )o:iva /+n0ciE+ A. Kako to G(nk#ioni*e: Bi deGini*emo G(nk#ij( koja se )ove 0a:iLdravo koristeEi sintaks( kao *to je o8ja*njeno ( pret0odnom pas(s(. 5vo je po)nato kao po*ivan&e G(nk#ije. Napomena )a kori*Eenje terminologije 1 imena data ( deGini#iji G(nk#ije se )ov( parametri dok vrednosti koje *aljemo ( G(nk#ij( prilikom njenog po)ivaP se na)ivaj( argumenti.6 0a:iLdravo.a< b6: i/ a 8 b: !& . 4(nk#ije deGini*emo pomoE( klj(čne reči de/.96 D FraE /+n0ciEe 0a:iLdravo. 5vi parametri s( slični kao i promenljiveP osim *to s( vrednosti ovi0 varija8li deGinisane kada smo po)vali G(nk#ij( i posed(j( veE dodeljene vrednosti kada G(nk#ija radi.+ 4(nk#ije 1 !unk#ije 4(nk#ije s( delovi programa koji se mog( koristiti na vi*e ra)ličiti0 mesta (n(tar samog tog programa. Primer 3sač(vati kao /+n0I)aram!)y 6: de/ )ri0a:iWa0s.1 Parametri >#nkcije 4(nk#ija mo>e da :()ima: parametreP koji nis( ni*ta dr(go nego vrednosti koje prosle<(jemo toj G(nk#ijiP tako da G(nk#ija mo>e da uradi ne*to nad poda#ima 3ili 8ilo *ta *to po>elimo6 (potre8om ti0 vrednosti.6 9)la): . Po:drav Svima. Bi smo veE koristili mnoge (gra<ene G(nk#ije kao *to s( len i ran3e . Primetimo da mo>emo po)vati ist( G(nk#ij( dva p(ta *to )nači da ne morate ponovo da pi*ete ist( kod.6: )rint. Parametri ( G(nk#ijama s( samo (la) )a G(nk#ij(P tako da joj mo>emo :dati: ra)ličite vrednostiP )a koje Ee nam G(nk#ija vratiti odgovaraj(Ee re)(ltate. Posle ove reči je identi9ikaciono ime G(nk#ijeP i)a koga slede )agrade koje mog( okr(>ivati neka imena promenljivi0P a na kraj( stoji dvotačkaP kojom se )avr*ava linija. Kon#ept G(nk#ija je verovatno na&va/ni&i kamen temelja# svakog va>nog soGtvera 3( 8ilo kom programskom je)ik(6P pa Eemo istra>iti ra)ličite aspekte G(nk#ija ( ovom poglavlj(. Primer Ee poka)ati da je sve toP ( s(*tiniP veoma jednostavno: Primer 3sač(vati kao /+n0ciEa=!)y 6: de/ 0a:iLdravo. 5va G(nk#ija ne ()ima parametre i )ato ne postoje promenljive deklarisane ( )agradama. 5ne nam omog(Eavaj( da damo ime 8lok( komandiP *to nam daljeP omog(Eava da pokrenemo taj 8lok komandi koristeEi to ime koje smo joj dodeliliP 8ilo gde ( svom program( i 8ilo koliki 8roj p(ta. AeGinisanje parametara se vr*i tako *to i0 navodimo ( )agradama ( deGini#iji G(nk#ijeP i odvajaj( se )are)ima.9Po:drav Svima. 9spod sledi 8lok nared8i koje s( deo ove G(nk#ije.

. Bi smo sa)nali veEi 8roj koristeEi jednostavne i/!!else komandeP a )atim i prika)ali veEi 8roj.b< 9Ee ma0simalno96 )ri0a:iWa0s.56 )rint.a< 9Ee ma0simalno96 eli/ a $$ b: )rint.)ython3 /+n0I)aram!)y A Ee ma0simalno U Ee ma0simalno Kako to G(nk#ioni*e: 5vde smo deGinisali G(nk#ij( koja se )ove )ri0a:iWa0s koja koristi dva parametraP koji se )ov( a i b . dr(gom sl(čaj(P mi )ovemo G(nk#ij( sa varija8lama kao arg(mentima.+ 4(nk#ije )rint. koriste se samo ( toj G(nk#iji. 4(nk#ija )ri0a:iWa0s G(nk#ioni*e na isti način ( o8a sl(čaja. )ri0a:iWa0s. Primer 3sač(vati kao /+n0Ilo0al!)y 6: 5 $ O7 de/ /+n0. Prvi p(t kada smo po)vali G(nk#ij( )ri0a:iWa0s P mi smo direktno postavili 8rojeve kao arg(mente.95 Ee9< 56 5 $ ( )rint.56: )rint.ve promenljive del(j( (n(tar 8loka ( kom s( deGinisane počev*i od tačke deGinisanja imena te promenljive 3varija8le6.2 Lokalne promenljive Kada deGini*ete promenljiv( (n(tar 8loka G(nk#ijeP ta promenljiva nije pove)ana na 8ilo koji način sa dr(gim varija8lama sa istim imenima koje koristimo van te G(nk#ije 1 odnosno imena ti0 promenljivi0 s( lokalnog karaktera 1 tj.5< y6 Ee se t(mačiti tako da Ee vrednost arg(menta 5 8iti dodeljena parametr( aP dok Ee vrednost arg(menta y 8iti dodeljena parametr( b .a<9Ee Eedna0o sa9< b6 else: )rint. D salEemo variEable /+n0ciEi D dire0tno salEemo /+n0ciEi 0onstantne vrednosti A. 5vo se )ove scope 3delovanje6 promenljive. .9Promenili smo lo0aln+ vrednost 5 na9< 56 /+n0.3< A6 5 $ O y $ U )ri0a:iWa0s.95 Ee Eos +ve09< 56 9)la): !+ .5< y6 9)la): .

9me 5 je lokalno )a na*( G(nk#ij(. KoristeEi 3lobal komand( postaje dovoljno jasno da je promenljiva deGinisana ( spolja*njem 8lok(.)ython3 /+n0I3lobal!)y 5 Ee O7 PromenEena 3lobalna vrednost )romenlEive 5 na ( Vrednost )romenlEive 5 sada Ee ( Kako to G(nk#ioni*e: 3lobal nared8a se koristi da 8i se naglasilo da je 5 glo8alna promenljiva 1 dakleP kada smo dodelili $- . AakleP kada smo promenili vrednost 51a ( G(nk#ijiP vrednost 51a deGinisanog ( glavnom 8lok( ostaje nepromenjena.9PromenEena 3lobalna vrednost )romenlEive 5 na9< 56 /+n0. Nemog(Ee je dodeliti vrednost promenljivoj koja je deGinisana i)van G(nk#ije 8e) 3lobal nared8e.+ 4(nk#ije . nije ( 8ilo kakvom delokr(g(od neki0 stvari kao *to s( G(nk#ija ili klasa6P onda morate da ka>ete P/t0on1( da to ime nije lokalnoP veE da je globalno. Zatim smo dodelili vrednost 2 )a promenljiv( 5 . Ii mo>ete da koristite vrednosti ti0 promenljivi0 deGinisani0 i)van G(nk#ije 3pod pretpostavkom da ne postoji promenljiva sa istim imenom (n(tar G(nk#ije6.3 Kori'7enje glo8alni* promenljivi* Ako >elite da dodelite vrednost imen( promenljiveP koje je deGinisano na najvi*em nivo( programa 3tj.6: 3lobal 5 )rint.)ython3 /+n0Iloc0al!)y 5 Ee O7 Promenili smo lo0aln+ vrednost 5 na ( 5 Ee Eos +ve0 O7 Kako to G(nk#ioni*e: Prvi p(t smo prika)ali vrednost koja ima ime . sa prvom linijom (n(tar tela G(nk#ije.6 )rint. P/t0on je koristio vrednost parametra deGinisan ( glavnom 8lok( programaP i)nad deGini#ije G(nk#ije.a poslednjom komandom )rintP mi smo prika)ali vrednost 51aP i ona je ista kao *to je deGinisano ( glavnom 8lok( i)nad po)iva G(nk#ijeP čime se potvr<(je da nije 8ilo (ti#aja na njen( vrednostP od lokalne vrednosti koja je )adata ( okvir( pret0odnog po)iva G(nk#ije. . Be<(timP to ne tre8a raditi i to tre8a i)8egavati ( *irokom l(k(P jer 8i 8ilo nejasno čitao#ima programaP i i)a)valo 8i konG()ij( oko toga gde je ta promenljiva ( stvari deGinisana.95 Ee9< 56 5 $ ( )rint. Bi to posti>emo kori*Eenjem komande 3lobal. A.9Vrednost )romenlEive 5 sada Ee9< 56 9)la): . Primer 3sač(vati kao /+n0I3lobal!)y 6: 5 $ O7 de/ /+n0.

Ho Eemo postiEi () pomoE podra)(mevani0 vrednosti arg(menata. Bo>ete da odredite podra)(mevane vrednosti arg(menata )a parametre dodavanjem imen( parametra (n(tar deGini#ije G(nk#ije operator dodele 3 d 6P a potom sledi podra)(mevana vrednost. Primer 3sač(vati kao /+n0I)odra:!)y 6: de/ 0a:i.amo onim parametrima koji s( na kraj( liste parametara mo>emo davati podra)(mevane vrednosti arg(menataP odnosnoP ne mo>emo imati parametar sa podra)(mevanom vredno*E( arg(menata koji se nala)i ispred parametra 8e) podra)(mevane vrednosti arg(menta ( listi parametara prilikom deGinisanj( G(nk#ije.)ython3 /+n0I)odra:!)y Po:drav SvimaSvimaSvimaSvimaSvima Kako to G(nk#ioni*e: 4(nk#ija sa na)ivom 0a:i se koristi )a prika) stringa onoliko p(ta koliko navodimo.9Svima9< O6 9)la): . . prvoj (potre8i G(nk#ije 0a:i P mi joj prosle<(jemo samo string i ona prika)(je string jednom. Na primerP de/ /+n0. Poenta je da koristimo ime 3klj(čn( reč6 (mesto po)i#ije 3koj( smo koristili do sad6 da odredimo neki arg(ment )a potre8e G(nk#ije. Za sadaP samo )apamtite ovo. $1 . Bo>ete da navedete vi*e od jedne glo8alne promenljive koristeEi ist( 3lobal nared8( npr 3lobal 5< y< : .)or+0a P )+ta6 0a:i. . 9majte na (m( da podra)(mevana vrednost arg(menta mora da 8(de konstanta.9Po:drav96 0a:i. Ako mi ne navedemo vrednostP onda po deGa(lt(P string Ee se prika)ati samo jednom. Ho je )ato *to se vrednosti dodelj(j( parametrima na osnov( nji0ovog polo>aja. A.)or+0a< )+ta $ =6: )rint. Važno .a< b$O6 je ispravnoP dok de/ /+n0.a$O< b6 ni&e. nekim G(nk#ijama Eete >eleti da neki parametri 8(d( opcionalni i da koriste podra)(mevane vrednosti ( sl(čaj( da korisnik ne >eli da prosledi vrednosti )a nji0. HačnijeP podra)(mevana vrednost tre8a da 8(de nepromenljiva 1 ovo je detaljnije o8ja*njeno ( kasnijim poglavljima." Arg#menti de>inisani pomo7# klj#čni* reči Ako imate neke G(nk#ije sa mnogo parametara i >elite da deGini*ete samo neke od nji0P onda mo>ete da date vrednosti )a takve parametre tako *to Eete i0 imenovati 3dati im ime prilikom deGinisanja G(nk#ije61 *to se )ove deGinisanje kl&u-nih re-i arg(menata. A. Bi smo ovo postigli navo<enjem podra)(mevane vrednosti arg(menta 1 )a parametar )+ta . dr(goj (potre8i G(nk#ije 0a:i P mi prosle<(jemo kako stringP tako i arg(ment vrednosti 'P koji G(nk#iji govori da >elimo da por(ka ( string( tre8a da 8(de prika*ana ' p(ta. Podra%#mevane vrednosti arg#menata .+ 4(nk#ije nek( vrednost promenljivoj 5 (n(tar G(nk#ijeP ta promena se odra>ava i kada koristimo vrednost 5 ( glavnom 8lok(.

+ 4(nk#ije .c$O7< a$=776 P mi koristimo klj(čne reči arg(menata )a sve navedene vrednosti. Ar(ga je da mo>emo dati samo vrednosti oni0 parametara kojima >elimo da damoP pod (slovom da ostali parametri imaj( podra)(mevane vrednosti arg(menata. A. dr(goj (potre8i /+n0. . Primetite da smo naveli vrednost )a parametar c pre dr(gi0 P iako smo deGinisali prvo a pa c (n(tar deGini#ije G(nk#ije. . .a< b $ O< c $ =76: )rint.c$O7< a $ =776 9)la): a a a )ython3 /+n0I0lE+c!)y Ee 3 <a b Ee U i c Ee =7 Ee (O <a b Ee O i c Ee (A Ee =77 <a b Ee O i c Ee O7 Kako to G(nk#ioni*e: 4(nk#ija na)vana /+n0 ima jedan parametar 8e) vrednosti podra)(mevanog arg(mentaP i dva parametra sa vrednostima podra)(mevani0 arg(menata. Promenljiva b do8ija podra)(mevan( vrednost ' .$ DarArgs parametri Ponekad Eete mo>da >eleti da deGini*e G(nk#ij( koja mo>e da pre()me bilo ko&i 8roj parametaraP ovo se mo>e postiEi pomoE( )ve)da 3asteriksa6 3sač(vajte kao total!)y 6: de/ total.(O< c$(A6 P promenljiva a do8ija vrednost 2' )8og polo>aja arg(menta.9a Ee9< a< 9<a b Ee9< b< 9i c Ee9< c6 /+n0.total. Primer 3sač(vati kao /+n0I0lE+c!)y 6: de/ /+n0.iniciEal$O< PbroEevi< PP0lE+cnereci6: broEanEe $ iniciEal /or broE in broEevi: broEanEe *$ broE /or rec in 0lE+cnereci: broEanEe *$0lE+cnereci?recB ret+rn broEanEe )rint.(O< c $ (A6 /+n0. Zatim parametar c do8ija vrednost 2$ )8og njegovog imenovanjaP odnosno klj(čne reči arg(menta.3< U6 P parametar a do8ija vrednost ! P parametar b do8ija vrednost i c do8ija podra)(mevan( vrednost 1. ovom sl(čaj( postoje dve prednosti 1 jedna je da kori*Eenje G(nk#ija mnogo lak*eP jer ne moramo da 8rinemo o redosled( i po)i#iji arg(menata. treEoj (potre8i /+n0..3<U6 /+n0.=7< =< (< 3< )ovrce $ O7< voce $ =7766 9)la): .)ython3 total!)y =>> $2 . prvoj (potre8iP /+n0.

iniciEal$O< P< e0straIbroE6 .=7< =< (< 36 Ty)eError: total. Bi Eemo o8jasniti t(ple i rečnike ( kasnijem poglavlj(. BiP isto takoP op#iono mo>emo da vratimo neku vrednost i) G(nk#ije.samoI0lE+cneIreci!)y.)ython3 samoI0lE+cneIreci!)y >> Tracebac0 . A. A. 58ratite pa>nj( na kori*Eenje o)nake *$ koja je preči#a operatoraP tako da (mesto da pi*emo 5 $ 5 * y P mo>emo pisati 5 *$ y . .& Parametri samo sa klj#čnim rečima Ako >elimo da deGini*emo odre<ene parametre koji 8i 8ili dost(pni samo preko klj(čni0 rečiP ali ne i preko nji0ove po)i#ije arg(menataP oni mog( 8iti deGinisani posle parametra sa )ve)dom 3sač(vajte kao samoI0lE+cneIreci!)y 6: de/ total.< line Z< in Rmod+le8 total.6 missin3 = re[+ired 0ey2ord-only ar3+ment: 9e0straIbroE9 Kako to G(nk#ioni*e: AeGinisanje parametra posle parametara sa )ve)di#omP re)(ltira ( arg(ment( samo sa klj(čnim rečima. Ako ovakvim arg(mentima nismo dodelili podra)(mevan( vrednost prilikom po)ivanja G(nk#ijeP G(nk#ija Ee i)8a#iti gre*k( da joj nismo ispor(čili arg(ment sa klj(čnim rečimaP kao *to se vidi ( gornjem primer(.=7< =< (< 3< e0straIbroE$O76 total.most recent call last6: Cile .+ 4(nk#ije Kako to G(nk#ioni*e: Kada smo deGinisali parametre sa )ve)di#amaP kao *to s( na primer P)aram P onda svi arg(menti od te po)i#ije pa do kraja se prik(pljaj( kao t(ple koji Ee se )vati TparamT.lično tomeP kada smo deGinisali parametar sa d(plom )ve)di#om kao *to je PP)aram P onda svi klj(čni arg(menti od te tačke do kraja se prik(pljaj( kao rečnik 3di#tionar/6 koji se )ove TparamT.@ ret#rn komanda ret+rn komanda se koristi da ne*to vratimo i) G(nk#ijeP odnosno da i)a<emo i) G(nk#ije.broEanEe6 total. Primer 3sač(vati kao /+n0Iret+rn!)y 6: $! . Ako >elite da imate arg(mente koji s( samo sa klj(čnim rečimaP ali nema potre8e )a parametrom sa )ve)di#omP onda jednostavno koristite )ve)d( 8e) (potre8e 8ilo kojeg imenaP kao *to je de/ total.iniciEal$O< PbroEevi< e0straIbroE6: broEanEe $ iniciEal /or broE in broEevi: broEanEe *$ broE broEanEe *$ e0straIbroE )rint.=7< =< (< 36 D N:bac+Ee 3res0+ Eer nismo naveli vrednost :a ar3+ment 9e0straIbroE9 9)la): .

ne0aC+n0ciEa.6: )ass )ass komanda se koristi ( P/t0on1( da ka>e da je to pra)an 8lok nared8i 3( praksi: ne radi ni*taP *to mo>e 8iti korisno ( nekim sit(a#ijama6.ma0sim+m. &one je pose8an tip podataka ( P/t0on1( koji predstavlja ni*tavilo 3nema vrednosti 1 iliP dr(gim rečimaP ni*ta6.(< 366 9)la): . Ao#.A <oc(trings 9stringovi koji sl#/e kao dok#mentacija na'eg programa.B: G(nk#ionalnostP tako da mo>ete da koristite ov( (gra<en( G(nk#ij( kad god je to mog(Ee i kada je to potre8no.)ython3 /+n0Iret+rn!)y 3 Kako to G(nk#ioni*e: ma0sim+m G(nk#ija vraEa maksim(m parametaraP ( ovom sl(čaj( 8rojeva koje *aljemo ( G(nk#ij(. P/t0on ima jedn( divn( G(nk#ij( koja se )ove string dokumentaci&eP koja se o8ično na)iva svojim kraEim imenom DocStrings. 9majte na (m( da ret+rn komanda koja nema nikakv( vrednost 3napisana je kao da ne vraEa ni*ta6 je ekvivalent kao da je napisano ret+rn &one .trings vraEen i)P re#imo G(nk#ijeP ( tren(tk( dok na* program )apravo radiQ Primer 3sač(vati kao /+n0Ido0!)y 6: de/ )ri0a:Wa0sim+ma.vaka G(nk#ija impli#itno 3)načiP i ako nije napisan kod (n(tar G(nk#ije koji 8i vraEao vrednost6 sadr>i ret+rn &one komand( na kraj(P osim ako ste napisali svoj( ret+rn komand(. . ZapravoP mi čak mo>emo da do8ijemo Ao#. A.56 D 0onvert+Ee + inte3er< +0oli0o Ee to mo3+ce y $ int.celi broEevi6999 5 $ int.5< y6: 999Pri0a:+Ee vec+ vrednost dva broEa! Ta dva broEa moraE+ biti inte3eri . Bo>ete to videti pokretanjem )rint.66 gde G(nk#ija ne0aC+n0ciEa ne koristi ret+rn nared8( kao *to je: de/ ne0aC+n0ciEa.5< y6: i/ 5 8 y: ret+rn 5 eli/ 5 $$ y: ret+rn 9"roEevi s+ Eedna0i9 else: ret+rn y )rint.9B. Na primerP koristi se da o)nači da promenljiva nema nikakv( vrednost 3)nači da ima vrednost &one6 . 5na koristi jednostavane i/!!else komande da prona<e veE( vrednostP a )atim vra'a t( vrednost. Primetite Postoji veE (gra<ena G(nk#ija koja se )ove ma5 koja veE radi :naEi BAK.y6 $$ .trings s( va>no sredstvo koje 8i tre8alo da koristiteP jer nam ono poma>e da 8olje dok(ment(jemo program i čini ga lak*e ra)(mljivim.+ 4(nk#ije de/ ma0sim+m.

Ako ste koristili hel).celi broEevi6 Kako to G(nk#ioni*e: . Bi Eemo sa)nati vi*e o o8jektima ( poglavlj( o klasama. sledeEem poglavlj( Eemo videti kako se koristeP kao i kako se kreiraj( mod(li ( P/t0on1(.5< 9Ee ma0sim+m96 else: )rint. Zato ja &ako preporu-u&em da koristite Ao#.tring1( ( )ri0a:Wa0sim+ma G(nk#iji koristeEi IIdocII 3primetiti duplu don&u crticu ispred i i)a6 atri8(t 3pripadaj(Ee6 G(nk#ije.e%ime Iideli smo mnoge oso8ine G(nk#ijaP ali imajte na (m( da mi jo* (vek nismo pokrili sve nji0ove aspekte. A. A(tomati)ovani alati mog( pre()eti dok(menta#ij( )a va* program na ovaj način.)ython3 /+n0Ido0!)y O Ee ma0sim+m Pri0a:+Ee vec+ vrednost dva broEa! Ta dva broEa moraE+ biti inte3eri .y< 9Ee ma0sim+m96 )ri0a:Wa0sim+ma. Ne )a8oravite da pritisnete taster L da 8iste i)a*li i) hel)1a .3< O6 )rint.tings.+ 4(nk#ije i/ 5 8 y: )rint.trings mog( primenjivati i na mod(lima i klasamaP koje Eemo (čiti ( odgovaraj(Eim narednim poglavljima. Bo>ete to da ispro8ate na G(nk#iji i) primera 1 samo (klj(čite hel). 9majte na (m( da se Ao#.1B . Zapamtite da P/t0on tretira sve kao o8jekat a to (klj(č(je i G(nk#ije. . <vrsto se savetu&e da pratite ov( konven#ij( )a sve va*e Ao#. Zatim dr(ga linija je pra)naP propraEene detaljnim o8ja*njenjem počev od treEeg reda. . svakom sl(čaj(P mi smo pokrili veEin( onoga *to Eete koristiti ( ve)i sa P/t0on G(nk#ijijama svakodnevno.)ri0a:Wa0sim+ma6 ( va* program.6 ( P/t0on1(P onda ste veE videli kori*Eenje Ao#. )ydoc komanda koja dola)i sa instala#ijom P/t0on1a radi slično hel). Konven#ija koja je (svojena )a Ao#.)ri0a:Wa0sim+ma!IIdocII6 9)la): .trings (n(tar svi0 va*i0 va>ni0 G(nk#ija.6 komandi koja koristi Ao#.tring na prvoj logičkoj liniji (n(tar G(nk#ije je DocString )a t( G(nk#ij(.trings )a 8ilo koje ne1trivijalne G(nk#ije koje pi*ete.trings1aQ 5no *to G(nk#ija pomoEi radi je samo da i*čita IIdocII atri8(t tra>ene G(nk#ijeP a )atim ga prika)(je na lep način )a vas. Bo>emo prist(piti Ao#. $' .tring je da je to string i) vi*e linijaP gde prva linija počinje sa velikim slovom a )avr*ava sa tačkom.

ovom sl(čaj(P to je jedan od (gra<eni0 mod(laP a samim tim i P/t0on )na gde da ga na<e. Ar(ga metoda je da se napi*e mod(l na nativnom je)ik( na kojem je i pisan P/t0on interpreter. Ako to nije 8io kompajliran mod(l tj. 9majte na (m( da se ini#ijali)a#ija mod(la vr*i samo prvi p(t kada smo (ve)li mod(l ( program.9Ar3+menti 0omandne liniEe s+: 96 /or i in sys!ar3v: )rint.Bod(li 14 .)ython3 0oristitiIsys!)y mi smo ar3+menti Ar3+menti 0omandne liniEe s+: 0oristitiIsys!)y mi smo ar3+menti P\T#O&PAT# Ee ?9C:\\)y9< 9C:\\YN&XOYS\\system3(\\)ython33!:i)9< 9C:\\Python33\\X11s9< 9C:\\Python33\\lib9< 9C:\\Python339< 9C:\\Python33\\lib\\site-)ac0a3es9B Kako to G(nk#ioni*e: PrvoP mi smo uve*li sys mod(l pomoE( im)ort nared8e. Na primerP mo>ete da napi*ete mod(l ( M programskom je)ik( i kada ga kompajlirateP on mo>e da se koristi ( va*em P/t0on kod(P kada koristite standardni P/t0on interpreter. . mod(l napisan ( P/t0on1(P tada Ee P/t0on1ov interpreter tra>iti taj mod(l ( direktorij(mima navedenim ( sys!)ath promenljivoj. $6 . Kada P/t0on i)vr*i im)ort sys komand(P on ( stvari tra>i sys mod(l. s(*tiniP to )a nas )nači da govorimo P/t0on1( da >elimo da koristimo ovaj mod(l.i6 )rint. ar3v promenljivoj ( sys mod(l( se prist(pa tako *to koristimo o)nak( tačka odnosno sys!ar3v . Prvo Eemo videti kako da koristite mod(le standardni0 8i8lioteka. Primer 3sač(vati kao 0oristitiIsys!)y 6: im)ort sys )rint.9\n\nP\T#O&PAT# Ee9< sys!)ath< 9\n96 9)la): . sys mod(l sadr>i G(nk#ionalnosti ve)ane )a P/t0on1 ov interpreter i njegov( okolin(P odnosno sistem. Bod(l mo>e da 8(de kori3'en i od strane nekog dr(gog programaP kako 8i taj program koristio G(nk#ionalnosti i) mod(la.1. Postoje ra)ličite metode pisanja mod(laP ali najjednostavniji način je da napravite datotek( sa eksten)ijom !)y koja 8i sadr>ala G(nk#ije i promenljive koje 8i tre8ale na*em program(. . Ako je mod(l prona<enP komande koje se nala)e ( tel( tog mod(la se pokreE( i mod(l postaje dostupan )a kori*Eenje. =ta ako 8i ste >eleli da ponovo koristite ni) G(nk#ija ( dr(gim programima koje ste napisali? Kao *to ste mo>da pogodiliP odgovor je ( mod(lima.oduli Ii ste videli kako mo>ete vi*e p(ta koristiti svoj kod ( va*em program( kada samo jednom deGini*ete G(nk#ij(. Hako<eP to je način na koji koristimo P/t0on1ov( standardn( 8i8liotek(.

Hako<eP ovi 8ajt1kompajlirani Gajlovi s( ne)avisni od platGorme. Primer: /rom math im)ort s[rt )rint.p)c >ajlovi . => 66 $ .Fvadratni 0oren i: => Ee. 2edan od načina je stvaranje ba&t kompa&liranih Gajlova sa eksten)ijom !)ycP koji s( neki srednji o8lik ( koji P/t0on pretvara neki program 3seEate li se (vodnog dela knjige o način( na koji P/t0on radi?6. Ako P/t0on nema do)vole da kreira Gajlove ( tom Golder(P onda !)yc Gajl neEe 8iti kreiran. Primetite da je prvi string ( sys!)ath pra)an 1 ovaj pra)an string (ka)(je da je tren(tni direktorij(m tako<e deo sys!)ath koji je isti kao i P\T#O&PAT# promenljiva okr(>enja. < s[rt. 9majte na (m( da tren(tni direktorij(m je direktorij(m i) koga je pokren(t program. P/t0on č(va arg(mente komandne linije ( sys!ar3v promenljivoj )a nas da i0 po potre8i koristimo. Primetite da P/t0on počinje 8rojanje od -P a ne od 1. Primetiti 5vi !)yc Gajlovi se o8ično kreirani ( istom direktorij(m( kao i odgovaraj(Ei !)y Gajlovi. ZapamtiteP ime skripte koja se tren(tno i)vr*ava je (vek prvi arg(ment ( sys!ar3v listi. s(protnomP moraEete da postavite mod(l ( jedan od direktorij(ma navedeni0 ( sys!)ath .2 >rom . (ve)ena i) nekog dr(gog mod(la6P a i program Ee 8iti čitljiviji. 1B. 5vaj !)yc Gajl je koristan kada (vo)ite taj mod(l sledeEi p(t i) dr(gog programa 1 sve to Ee se odvijati mnogo 8r>eP jer je veEi deo potre8ne o8rade prilikom (vo)a mod(la (ra<en.os!3etc2d. sys!)ath promenljiva sadr>i spisak imena direktorij(ma i) koji0 se (vo)e mod(li. Ako koristite neki 9AF program )a pisanje i pokretanje P/t0on programaP na<ite način da dodelite arg(mente komandne linije pri pokretanj( Ia*eg programa 3gledajte ( menijima 9AF1a6. import komanda Ako 8i ste >eleli da direktno (ve)ete ar3v promenljiv( ( program i) pret0odnog primera 3da 8i se i)8eglo da k(#ate sys! svaki p(t kada je po)ivate6P onda mo>ete da koristite nared8( /rom sys im)ort ar3v . 1B.vo) mod(la je relativno sk(pa stvarP pa P/t0on radi neke trikove da 8i se #ela stvar i)vr*avala 8r>e. Pokreni im)ort os. 5vdeP kad smo i)vr*iti )ython3 0oristitiIsys!)y mi smo ar3+menti P mi pokreEemo mod(l 0oristitiIsys!)y sa )ython3 komandomP a ostale stvari koje smo napisali s( arg(menti koje prosle<(jemo program(.1. ..1 Kompajlirani . sys!ar3v promenljiva je lista stringova 3liste s( detaljno o8ja*njene ( kasnijem poglavlj(6. KonkretnoP sys!ar3v sadr>i list( argumenata komandne lini&eP odnosno arg(menata koje smo postavili )a svoj program koristeEi komandn( linij( 3pogledati primerP (koliko se do sada niste s(sretali sa pokretanjem programa i) komandne linije6.Bod(li Ho jasno (ka)(je da je ovo ime promenljive deo sys mod(la.66 da 8i sa)nao tren(tni direktorij(m va*eg programa. Ho )nači da mo>ete direktno (vo)iti mod(le koji se nala)e ( tek(Eem direktorij(m(. AakleP ( ovom sl(čaj( Eemo imati T0oristitiIsys!)yT kao sys!ar3v?7B P TmiT kao sys!ar3v?=B P TsmoT kao sys!ar3v?(B i Tar3+mentiT kao sys!ar3v?3B . . )rint. 2o* jedna prednost ovog prist(pa je da se ime ne kosi sa nekom dr(gom ar3v promenljivom koj( 8i koristili ( na*em program(. . . prin#ip(P trebalo bi da i*begavate ovakv( komand( i (mesto nje koristite im)ort komand(P jer Ee va* program i)8eEi s(ko8e imena 3(koliko se pojavi jo* jedna promenljiva sa istim imenom 1 npr.

)ython3 888 im)ort 0oristitiIime Pro3ram se )o0rece i: dr+3o3 )ro3rama 888 3ne )a8oravite da promenite direktorij(m ( onaj ( kom Iam se nala)i ovaj mod(lQ6 Kako to G(nk#ioni*e: .6 $& . Ar(gi mod(l 3sač(vajte kao moEmod+lIdemo!)y 6: im)ort moEmod+l moEmod+l!0a:iLdravo.6: )rint. Kao *to mo>ete da viditeP ne postoji ni*ta pose8no niti spe#ijalno (n(tar njega ( odnos( na na*e dosada*nje P/t0on programe. Ovo 3ovori moEmod+l!96 IIversionII $ 97!=9 5vo gore je primer modula.ledeEa *to Eete videti je kako da koristite ovaj mod(l ( na*im dr(gim P/t0on programima. Zapamtite da mod(l tre8a 8iti sme*teni ( istom direktorij(m( kao i program ( koji ga (vo)imoP ili ( jednom od direktorij(ma navedeni0 ( sys!)ath .9Ldravo. Ii samo tre8a da proverite da li ima !)y eksten)ij(. Kao *to je pomen(to ranijeP kada se mod(l (vo)i po prvi p(tP njegov kod se i)vr*ava. .vaki mod(l ( P/t0on1( ima deGinisano njegovo IInameII.3 0mena mod#la .ledeEi primer 8i tre8alo da malo ra)jasni ovo. Ho se mo>e postiEi kori*Eenjem IInameII atri8(ta mod(la.)ython3 0oristitiIime!)y Pro3ram se )o0rece sam . 0%rada sopstveni* mod#la Kreiranje sopstveni0 mod(la je lakoP )apravoP to smo radili sve vremeQ Ho je )ato *to je svaki P/t0on program tako<e i mod(l.vaki mod(l ima svoje ime i nared8e ( mod(l( mog( sa)nati ime svog mod(la. . 1B. Primer 3sač(vati kao moEmod+l!)y 6: de/ 0a:iLdravo.9Pro3ram se )o0rece sam96 else: )rint.1. Primer 3sač(vati kao 0oristitiIime!)y 6: i/ IInameII $$ 9IImainII9: )rint. Bo>emo iskoristiti ovo da napravimo mod(l koji Ee se pona*ati na ra)ličite načine ( )avisnosti od toga da li se koristi sam )a se8e ili se (vo)i i) dr(gog mod(la.Bod(li 1B. 5vo je )godno )a odre<ene namene kada tre8a sa)nati da li se mod(l pokreEe samostalno ili je (ve>en ( neki program.9Pro3ram se )o0rece i: dr+3o3 )ro3rama96 9)la): . Ako je ono TIImainIIT P podra)(meva se da je mod(l pokren(t samostalno od strane korisnika pa mo>emo pred()eti odgovaraj(Ee ak#ije.

Na primerP )a neki mod(l identiGikatori (klj(č(j( G(nk#ijeP klase i promenljive deGinisane ( tom mod(l(.)ython3 moEmod+lIdemo!)y Ldravo. Ovo 3ovori moEmod+l! Ver:iEa 7!= Kako to G(nk#ioni*e: Primetite da koristimo isti način o)načavanja pomoE( tačaka )a prist(p članovima mod(la.6 G(nk#ij(P ona vraEa list( imena deGinisani0 ( tom 3navedenom6 mod(l(.Bod(li )rint.9Ver:iEa9< IIversionII6 9)la) moEmod+lIdemo(!)y je isti kao i)la) moEmod+lIdemo!)y . AakleP (vek se prepor(č(je da koristite im)ort komand( iako ona mo>e (činiti va* program malko d(>im.ta#k5verGlo@ ( kojoj se navode primeri )a svaki od prin#ipa. Bog(Enost da se to desi je vrlo velikaP )ato *to je (o8ičajena praksa da se )a svaki mod(l proglasi neki 8roj koji predstavlja njegov( ver)ij(P koristeEi (pravo ovo ime." E#nkcija dir Bo>ete da koristite (gra<en( dir G(nk#ij( da i)listate identiGikatore koje je deGinisao o8jekat. 1B.1. Fvo je ver)ija koja koristi /rom!!im)ort sintaks( 3sač(vajte kao moEmod+lIdemo(!)y 6: /rom moEmod+l im)ort 0a:iLdravo< IIversionII 0a:iLdravo. Pokrenite im)ort this da na(čite vi*e i pogledajte ov( disk(sij( na sajt( .sys6 ?9IIdis)layhoo0II9< 9IIdocII9< 9IIe5ce)thoo0II9< $+ . &en PKt0on'a 2edan od vodeEi0 prin#ipa P/t0on1a je da je :Fkspli#itno 8olje nego 9mpli#itno:.9Ver:iEa9< moEmod+l!IIversionII6 9)la): . Kada navedemo ime mod(la ( dir. Ako m( ne imen(jemo nijedan arg(mentP vraEa list( imena deGinisani0 ( tek(Eem mod(l(. Hako<e mo>ete da koristite: /rom moEmod+l im)ort P 5vo Ee (vesti sva javna imena kao *to s( 0a:iLdravo ali neEe (vo)iti IIversionII jer počinje sa d(plom donjom #rtom. Primer: .6 )rint.)ython3 888 im)ort sys D daEe list+ atrib+ta< + ovom sl+caE+< :a sys mod+l 888 dir. P/t0on ima do8r( oso8in( koja je ponavljanje (potre8e isti0 metoda o)načavanjaP *to m( i daje karakterističan :P/t0oni#: oseEaj prilikom programiranjaP jer ne moramo da (čimo neke nove načine da radimo ra)ličite stvari. Primetimo daP ako je veE IIversionII ime deGinisano ( mod(l( koji (vo)i moEmod+lP do*lo 8i do s(ko8a i)me<( ti0 imena.

Bod(li 9IIloaderII9<9IInameII9< 9II)ac0a3eII9< 9IIstderrII9< 9IIstdinII9< 9IIstdo+tII9< 9IclearIty)eIcache9< 9Ic+rrentI/rames9< 9I3et/rame9< 9a)iIversion9< 9ar3v9< 9b+iltinImod+leInames9< 9 byteorder9< 9callItracin39< 9callstats9< 9co)yri3ht9< 9dis)layhoo09< 9dllhandle9 < 9dontI2riteIbytecode9< 9e5cIin/o9< 9e5ce)thoo09< 9e5ecI)re/i59< 9e5ec+table9< 9e5it9< 9/la3s9< 9/loatIin/o9< 93etchec0interval9< 93etde/a+ltencodin39< 93et/il esystemencodin39< 93et)ro/ile9< 93etrec+rsionlimit9< 93etre/co+nt9< 93etsi:eo/9< 93ettrace9< 93et2indo2sversion9< 9he5version9< 9intern9< 9ma5si:e9< 9ma5+nicode 9< 9metaI)ath9< 9mod+les9< 9)ath9< 9)athIhoo0s9< 9)athIim)orterIcache9< 9)lat/or m9< 9)re/i59< 9)s=9< 9)s(9< 9setchec0interval9< 9set)ro/ile9< 9setrec+rsionlimit 9< 9settrace9< 9stderr9< 9stdin9< 9stdo+t9< 9s+bversion9< 9version9< 9versionIin /o9< 92arno)tions9< 92inver9B 888 dir. '- . 4(nk#ije i glo8alne promenljive o8ično id( (n(tar mod(la. Po deGa(lt(P vraEa list( atri8(ta )a tren(tni mod(l.6 ?9IIb+iltinsII9< 9IIdocII9< 9IInameII9< 9II)ac0a3eII9< 9sys9B 888 Kako to G(nk#ioni*e: PrvoP vidimo kori*Eenje dir G(nk#ije na (ve)en sys mod(l.$ Pakovanje Ao sadaP verovatno ste počeli da ra)mi*ljate oko 0ijerar0ije i načina organi)ovanja svoji0 programa. #ilj( da prka>emo dir ( ak#ijiP mi smo deGinisali nov( promenljiv( a i dodeliti joj vrednostP a )atim proverili dir i vidimo da sad postoji dodatna vrednost ( listi sa istim imenom kao i nova promenljiva.e#imo da >elite da kreirate paket pod na)ivom TsvetT koji ( se8i ima pod1pakete sa na)ivima TA)ijiTP TAGrikaT itdP i ovi0 s(8 paketi redom sadr>e mod(le pop(t T9ndijkTP TBadagaskarTP itd.6 D daEe list+ atrib+ta :a te0+ci mod+l ?9IIb+iltinsII9< 9IIdocII9< 9IInameII9< 9II)ac0a3eII9< 9sys9B 888 a $ O D 0reira nov+ variabl+ 9a9 888 dir. 9majte na (m( da je dir. Bi smo (klonili promenljiv(Jatri8(t tek(Eeg mod(la pomoE( del komande i promen( ponovo primeE(jemo ( i)la)( dir G(nk#ije. Promenljive o8ično id( (n(tar G(nk#ija.str6 )a atri8(te klase stringova.6 G(nk#ij( mo>ete primeniti na bilo ko&i o8jekat. 1B. Pakovanja s( samo Golderi mod(la sa pose8nom IIinitII!)y datotekom koja (ka)(je P/t0on1( da je ova Gas#ikla pose8naP jer sadr>i P/t0on mod(le. =ta ako ste >eleli da organi)(jete mod(le? Ho je mesto gde pakovanja 3pa#kages6 dola)e ( prvi plan. Na primerP pokrenite dir. .6 ?9IIb+iltinsII9< 9IIdocII9< 9IInameII9< 9II)ac0a3eII9< 9a9< 9sys9B 888 del a D +0lanEa4brise ime 888 dir. Napomena o del 1 ova komanda se koristi )a brisan&e promenljivi0Jimena promenljivi0P i posle i)vr*enja komandeP ( ovom sl(čaj( del a P vi*e ne mo>ete da prist(pite promenljivaoj a 1 to je kao da nikad nije ni postojala (op*te.9)rint96 da se (po)nate sa atri8(tima prika)aP ili dir. . AaljeP mi koristimo dir G(nk#ij( 8e) (no*enja parametre ( nj(.1. Primetimo da je ( listi mod(l koji smo (ve)li 3 sys 6P tj on je tako<e deo ovog spiska. Bo>emo videti ogroman spisak atri8(ta koje mod(l sadr>i.

mada3as0ar4 . 1B.IIinitII!)y .a/ri0a4 .Rne0i /older 0oEi se nala:i +n+tar sys!)ath84 .indiEa4 .e%ime Ba* kao *to s( G(nk#ije delovi programa koji se mog( vi*e p(ta primenjivati (n(tar tog programaP tako s( i mod(li programi koji se mog( vi*e p(ta (potre8ljavati (n(tar dr(gi0 programa. '1 . sledeEem poglavlj( Eemo (čiti o nekim )animljivim kon#eptima koji se )ov( str(kt(re podataka. Ii Eete videti mnoge primere ovoga ( standardnim 8i8liotekama. Pakovanja s( ni*ta dr(go do 0ijerar0ija )a organi)ovanje mod(la.IIinitII!)y .tandardna 8i8lioteka koja dola)i () P/t0on je primer takvog sk(pa paketa i mod(la. Iideli smo ( ovom poglavlj(P kako se koriste mod(li i kako se stvaraj( sopstveni mod(li.)ro3ram!)y .a:iEa4 .Bod(li 5vo je kako 8i vi tre8ali da napravite str(kt(r( direktorij(ma: .svet4 . .1.IIinitII!)y .& . .IIinitII!)y .dr+3iPro3ram!)y Pakovanje je samo konven#ija o 0ijerar0ijskom organi)ovanj( mod(la.IIinitII!)y .

Bi Eemo videti kako se koristi svaki od nji0 i kako Ee nam oni (činiti >ivot mnogo lak*im.11 .pisak stavki tre8a da 8(de ( (glastim )agradamaP tako da P/t0on ra)(me da m( vi govorita da je ( pitanj( lista. 11. Po*to mo>emo dodavati i (klanjati stavkeP mi ka>emo da je lista promenl&iv 3m(ta8le6 tip podatakaP odnosno ovaj tip mo>e 8iti menjan. 58ratite pa>nj( na (potre8( tačke kao o)nake )a prist(p metodama nekog o8jekata.stvar< end $ 9< 96 )rint. Na primerP P/t0on posed(je a))end metod )a klas( listP koja vam omog(Eava da dodate stavk( na kraj( liste.9WoE s)isa0 :a 0+)ovin+ Ee sad9< s)isa00+)ovine6 '2 . Kada koristimo promenljiv( i i kada joj dodelimo vrednostP re#imo dodamo joj #elo8rojno 'P mo>ete misliti o tome kao o stvaranj( o jekta 3tj. 11.s)isa00+)ovine6< 9stvari da 0+)im!96 )rint.tr(kt(re podataka 11 Strukture podataka .1 Liste "iste s( str(kt(re podataka koje sadr>e kolek#ij( neki0 predmeta ( nekom odre<enom raspored(P odnosno vi mo>ete da č(vate ni* stavki (n(tar liste.int6 da 8i ovo malo 8olje ra)(meli. Primer 3sač(vati kao 0oristitiIliste!)y 6: D Ovo Ee moE s)isa0 :a 0+)ovin+ s)isa00+)ovine $ ?9Eab+0a9< 9man3o9< 9sar3are)a9< 9banana9B )rint. Postoje četiri (gra<ene str(kt(re podataka ( P/t0on1( 1 listeP t(pleP rečni#i 3di#tionar/6 i sk(povi 3setovi6.9Te stvari s+:9< end $ 9 96 /or stvar in s)isa00+)ovine: )rint. "ista je primer kori*Eenja o8jekata i klasa. Kada ste napravili list(P mo>ete da dodateP (klonite ili tra>ite stavke (n(tar liste. tipa6 int 3#elo8rojne vrednosti6. Klasa tako<e mo>e imati metodeP odnosno G(nk#ije deGinisane samo )a kori*Eenje ( toj klasi. Poljima se tako<e prist(pa o)nakom sa tačkomP na primerP moEalista!)olEe . Bo>ete to lako se8i predstaviti ako )amislite spisak )a k(povin(P gde imate list( stavki )a k(povin(P osim *to Eete verovatno imate svak( stavk( ( pose8nom red( ( toj va*oj listi )a k(povin(P dok se ( P/t0on1( stavlja )are) i)me<( nji0.9ne0a stvar96 Ee dodati string 9ne0a stvar9 ( list( moEalista . instan#e6 i kojk je k-ase 3tj. Ii mo>ete koristiti te G(nk#ionalnosti samo kada imate o8jekat te klase.tr(kt(re podataka s( ( osnovi samo to 1 strukture koje mog( da dr>e neke podatke na ok(p(. .1 Br)o predstavljanje o+jekata i klasa 9ako samP generalnoP odlagao o8ja*njavanje o8jekata i klasa do sadaP ipak je malo o8ja*njenje potre8noP tako da mo>ete 8olje da ra)(mete liste. Klasa mo>e imati po-ja 3Gield6P koja nis( ni*ta dr(go nego promenljive deGinisane )a kori*Eenje samo ( toj klasi. .9Ha imam9< len.9\nHa ta0odEe treba da 0+)im i )irinac!96 s)isa00+)ovine!a))end. Bi Eemo istra>iti ov( tem( detaljnije ( kasnijem poglavlj(. Bo>ete koristiti ove promenljiveJimena samo ( sl(čaj( kada imate neki o8jekat i) te klase. Na primerP moEalista!a))end.9)irinac96 )rint. Ar(gim rečimaP oni se koriste )a skladi*tenje kolek#ije srodni0 podataka. s(*tiniP mo>ete pročitati hel).1.

tr(kt(re podataka )rint. Bi Eemo napisati koj( stavk( sa liste >elimo da (klonimo i del komanda to odradi )a nas. Zatim smo proverili da li je stavka )aista dodata ( list(P prika)ivanjem sadr>aja liste jednostavnim prosle<ivanjem liste ( )rint nared8( koja ja lepo prika>e. 5 spe#ijalnostima sekven#i Eemo govoriti ( kasnijem del(.11 . Ho je (pravo onoP na *ta mislimo kada ka>emo da s( liste promenl&ive a da s( stringovi nepromenl&ivi.9Prva stvar 0oE+ c+ 0+)iti Ee9< s)isa00+)ovine?7B6 starastvar $ s)isa00+)ovine?7B del s)isa00+)ovine?7B )rint.9F+)io sam9< starastvar6 )rint. Bi smo to postigli pomoE( del komande. AaljeP kad smo )avr*ite k(povin( stavke ( prodavni#iP >elimo da je (klonimo i) liste. Bi smo odredili da >elimo da (kloni prv( stavk( sa liste i time koristimo del s)isa00+)ovine?7B 3seEate se toga da P/t0on počinje 8rojanje od -6. AaljeP mi smo dodali stavk( na listi koristeEi a))end metod ( list( predmetaP kao *to je veE ra)matrano ranije. .)ython3 0oristitiIliste!)y Ha imam A stvari da 0+)im! Te stvari s+: Eab+0a< man3o< sar3are)a< banana< Ha ta0odEe treba da 0+)im i )irinac! WoE s)isa0 :a 0+)ovin+ Ee sad ?9Eab+0a9< 9man3o9< 9sar3are)a9< 9banana9< 9)irinac9B Sada c+ da sortiram moE s)isa0! Sortirana lista Ee ?9banana9< 9Eab+0a9< 9man3o9< 9)irinac9< 9sar3are)a9B Prva stvar 0oE+ c+ 0+)iti Ee banana F+)io sam banana WoE s)isa0 :a 0+)ovin+ Ee sada ?9Eab+0a9< 9man3o9< 9)irinac9< 9sar3are)a9B Kako to G(nk#ioni*e: Promenljiva s)isa00+)ovine je *oping lista )a nekoga ko Ee da ide ( prodavni#(.9WoE s)isa0 :a 0+)ovin+ Ee sada9< s)isa00+)ovine6 9)la): . 5nda smo sortirali list( pomoE( sort metode liste. Ao sadaP mora da ste s0vatili da je lista tako<e ni) 3sekven#a6. Hako<e smo koristili /or!!in petlj( da 8i smo prela)ili preko stavke na listi. s)isa00+)ovineP mi č(vamo ni) imena stavki )a k(pitiP ali )apamtite da mo/ete dodati bilo kakav ob&ekat ( list(P (klj(č(j(Ei 8rojeveP pa čak i dr(ge liste. Ia>no je da se s0vati da ovaj metod (tiče na sam( list( i ne vraEa 3ret(rn6 modiGikovan( list( 1 veE t( list( )aista i menjaQ 1 ovo se 8itno ra)lik(je od načina rada sa stringovima.9Sada c+ da sortiram moE s)isa0!96 s)isa00+)ovine!sort. Ako >elite da )nate sve metode deGinisane o8jektom listeP pogledajte hel).6 )rint. 58ratite pa>nj( da koristimo end klj(čn( reč arg(menta )a )rint G(nk#ij(P *to joj (ka)(je na to da >elimo da se i)la)na linija )avr*ava sa ra)makom (mesto (o8ičajenog novog reda.list6 )a detalje.9Sortirana lista Ee9< s)isa00+)ovine6 )rint. '! .

9)iton9< 9slon9< 9)in3vin96 D :a)amtite da s+ :a3rade o)cionalne )rint.9)iton9< 9slon9< 9)in3vin96 PoslednEa :ivotinEa doneta i: staro3 :oolos0o3 vrta Ee )in3vin "roE :ivotinEa + novom :oolos0om vrt+ Ee O Kako to G(nk#ioni*e: Promenljiva :oo se odnosi na t(pl( neki0 stavki.9"roE :ivotinEa + :oolos0om vrt+ Ee9< len.)ython3 0oristitiIt+)le!)y "roE :ivotinEa + :oolos0om vrt+ Ee 3 "roE 0ave:a + novom :oolos0om vrt+ Ee 3 Sve :ivotinEe + novom :oolos0om vrt+ s+ . 5vo se )ove operator indeksiran&a. Bi sada selimo ove >ivotinje ( novi )oolo*ki vrtP jer se stari )oo vrt )atvara. Bi prist(pamo treEoj stavki ( noviI:oo navodeEi noviI:oo?(BP a da 8i smo prist(pili treEoj stavki ( okvir( treEe stavke ( noviI:oo t(pli navodimo noviI:oo?(B?(B .noviI:oo6=*len. H(ple se o8ično koriste ( sl(čajevima kada nared8a ili korisnički1deGinisana G(nk#ija mo>e 8e)8edno da pretpostavi da kolek#ija vrednostiP odnosnoP da se t(ple kori*Eeni0 vrednosti neEe promeniti. 5vo je prilično jednostavna kada s0vatite poent(.11 . Na primerP )rint.:oo66 noviI:oo $ 9maEmin9< 90amila9< :oo )rint. Bo>emo prist(piti stavkama (n(tar t(ple navodeEi polo>aj te stavke ( par( (glasti0 )agrada 8a* kao *to smo (radili )a liste. Iidimo da len G(nk#ija mo>e da se koristi da 8i se do8ila d(>ina t(ple.noviI:oo66 )rint.=<(<36 i '$ .9"roE 0ave:a + novom :oolos0om vrt+ Ee9< len. Aa se vratimo ( realnostP imajte na (m( da t(ple (n(tar neke dr(ge t(ple ne g(8e svoj identitet 3tj i dalje s( 1 t(pleP a ne pojedinačni o8jekti koji s( sačinjavali star( t(pl(6.9"roE :ivotinEa + novom :oolos0om vrt+ Ee9< len.2 ?#ple H(ple se koriste )a dr>anje vi*e o8jekata )ajednoP na jednom mest(. AakleP noviI:oo t(pla sadr>i neke >ivotinje koje s( veE t(P )ajedno sa >ivotinjama koje smo doveli i) starog )oolo*kog vrta.noviI:oo?(B66 9)la): .9LivotinEe 0oEe s+ donete i: staro3 :oolos0o3 vrta s+9< noviI:oo?(B6 )rint.9PoslednEa :ivotinEa doneta i: staro3 :oolos0o3 vrta Ee9< noviI:oo?(B?(B6 )rint.tr(kt(re podataka 11.9)iton9< 9slon9< 9)in3vin966 LivotinEe 0oEe s+ donete i: staro3 :oolos0o3 vrta s+ . &a%rada L12L 9ako s( )agrade op#ioni element t(pleP (vek 8i tre8alo da i0 navodimo da 8i postalo očigledno da je to t(plaP pogotovo )ato da 8i se i)8egavala dvosmislenost. Bislite o njima kao da s( slične listamaP ali 8e) mnogi0 G(nk#ionalnosti koje klasa lista pr(>a. 5vo tako<e (ka)(je na to da je tako<e i t(pla sekven#a.9maEmin9< 90amila9< . 2edna od glavni0 karakteristika t(ple je da s( one nepromen-jive kao i stringoviP odnosno ne mo>ete da modiGik(je podatke. Primer 3sač(vati kao 0oristitiIt+)le!)y 6: :oo $ . H(ple se deGini*( tako *to navodimo stavke ra)dvojene )are)ima (n(tar op#ioni0 )agrada 36.9Sve :ivotinEe + novom :oolos0om vrt+ s+9< noviI:oo6 )rint.

Ako >elite da do8ijete odre<eni poredakP onda Eete morati da i0 sortirate pre nego *to i0 8(dete koristili. . Borate je navesti koristeEi )are) posle prve 3i jedine6 stavkeP tako da P/t0on mo>e ra)likovati t(ple i par )agrada koje okr(>(j( o8jekat ( nekom i)ra)(P odnosno morate da odredite sin3lica $ . 11. .< ab?9troler9B6 D brisanEe )ara 0lE+c-vrednost del ab?9troler9B )rint. Zapamtite da mo>ete da koristite samo nepromenljive o8jekte 3kao stringove6 )a klj(čeve ( rečnik(P ali mo>ete da koristite 8ilo nepromenljive ili promenljive o8jekate )a vrednosti ( rečnik(.ečni#i koje Eete koristiti s( instan#eJo8jekti (n(tar dict klase. Zapamtite da klj(č1vrednost parovi ( rečnik( nis( ra)vrstani ni na koji način.3 . . =to se P/t0on1a tičeP oni s( samo o8jekti koji se č(vaj( (n(tar dr(gog o8jektaP i to je sve. moEa)ra:na $ . 5vo ( s(*tini )nači da tre8a da koristite samo jednostavne o8jekte )a klj(čeve ( rečnik(.tr(kt(re podataka )rint. Be<(timP )a t(ple sa samo jednom stavkom to nije tako jednostavno.( < 6 P ako >elite t(pl( koja sadr>i samo stavk( 2 . Mup-e sa N i-i sa D stavkom Pra)na t(pla se konstr(i*e sa pra)nim )agradamaP kao *to je npr. Napomena za Per.11 .9\nNmamo J7K 0onta0ata + adresar+\n9!/ormat.ečnik 9<ictionar).ab666 /or ime< adresa in ab!items. Parovi klj(čeva i vrednosti se deGini*( ( rečnik( pomoE( nota#ije d $ J0lE+c= : vrednost=< 0lE+c( : vrednost( K .len. Primer 3sač(vati kao 0oristitiIrecni0!)y 6: D 9ab9 Ee s0racenica :a 9a9-address 9b9-boo0 ab $ J9Pandimen:ionalni9 : 9)d]ma!cme9< 9me3a9 : 9mno]hoo!moo9< 93i3a9 : 90o0os]0o0oda!lom9< 9troler9 : 93on3])on3!)et9K )rint.pro%ramere "iste (n(tar liste ne g(8e svoje oso8ineP odnosnoP liste neEe 8iti :i)ravnane: kao ( Perl(.=<(<36 6 s( dve ra)ličite stvari 1 prvi prika)(je tri 8rojaP dok dr(ga prika)(je t(ple 3koji sadr>i tri 8roja6..9Fonta0tiraE J7K na J=K9!/ormat.6: )rint.Trolova adresa Ee. 9sto va>i i )a t(ple (n(tar t(pleP ili t(pla (n(tar listeP ili list( (n(tar t(pleP itd.ime< adresa66 D XodavanEe )ara 0lE+c-vrednost ab?9@eniEe9B $ 9)o)ara]lebac!voda9 '' .6 . 9majte na (m( da klj(č mora 8iti jedinstven 8a* kao *to se ne mo>e sa)nati tačna inGorma#ija ako imate dve oso8e sa totalno istim imenom.ečnik je sličan adresar(P ( kom mo>ete naEi adrese ili detalje o kontakt( oso8e )naj(Ei samo njegovoJnjeno imeP odnosno pove)(jemo k-juč 3ime6 sa vrednostima 3detalji6. 58ratite pa>nj( da s( klj(č1vrednost parovi ra)dvojeni dvotačkomP a me<(so8no s( odvojeni )are)imaP a sve ovo je )atvoren ( par vitičasti0 )agrada.

Za list( metodama dict klaseP pogledajte hel). 11. 58ratite pa>nj( na jednostavn( sintaks(.ve tri vrste pomen(ti0 sekven#i 1 listeP t(ple i stringoviP tako<e imaj( opera#ij( ise!anja 3sli#ing6 koja nam omog(Eava da pre()memo parče 3isečak6 ni)aP odnosno deo sekven#e. Nema potre8e da se )na vrednost koja odgovara klj(č( )a ov( opera#ij( 8risanja.tr(kt(re podataka i/ 9@eniEe9 in ab: )rint. in i not in ekspresije6 i opera!ija indeksiranjaP koje nam omog(Eavaj( da direktno prist(pimo odre<enoj stavki (n(tar neke sekven#e. Bo>emo da proverimo da li postoji par klj(č1vrednost ( nekom rečnik( koristeEi in nared8(. Bi pre()memo ovaj par i dodelimo ga varija8lama ime i adresa odgovaraj(Eim navedenim redosledom. Bo>emo o8risati par klj(č1vrednost koristeEi na*eg starog prijatelja 1 del komand(. Za svaki taj par koristimo /or!!in petlj( i onda prika)(jemo ove vrednosti ( /or1 8lok(.9\nAdresa 3eniEa Ee9< ab?9@eniEe9B6 9)la): . . Bo>emo dodati nove parove klj(č1vrednost jednostavno pomoE( operatora indeksiranja koji prist(pa klj(č( i dodelj(je m( vrednostP kao *to smo (radili )a Kenija ( navedenom primer(. Primer 3sač(vati kao se0venca!)y 6: '6 . (ekvence "isteP t(ple i stringovi s( primeri sekven#iP ali *ta s( sekven#e 3ni)ovi6 i *ta je to tako pose8no ( ve)i sa njima? Klavne karakteristike sekven#i s( testovi č-anstvaP 3tj. Ar%umenti k-jučni0 reči i rečni!i 2edno dr(go ra)mi*ljanjeP ako ste koristili arg(mente klj(čni0 reči ( svojim G(nk#ijamaP onda ste veE koristili rečnikeQ .11 .amo ra)mislite o tome 1 to je par klj(č1vrednost koji ste deGinisali ( listi parametara pri deGini#iji G(nk#ije i kada prist(pate promenljivoj ( okvir( va*e G(nk#ijeP navodite samo klj(č koji prist(pa rečnik( 3*to se )ove simbol tabela ( terminologiji di)ajna kompajlera6. Bi smo jednostavno naveli rečnik i klj(č kao vrednost )a operator indeksiranja )a par koji >elimo da se (kloni i navodimo ga ( del komandi. Zatim smo prist(pili parovima klj(č1vrednost navo<enjem klj(ča pomoE( operatora indeksiranja kao *to je o8ja*njeno ( kontekst( liste i t(ple.dict6 . AaljeP mi smo prist(pili svakom par( klj(č1vrednost (n(tar rečnika kori*Eenjem items metode rečnika koji nam vraEa list( t(pli gde svaka t(pla sadr>i par stavki 1 klj(č praEen vrednosti.)ython3 0oristitiIrecni0!)y Trolova adresa Ee 3on3])on3!)et Nmamo 3 0onta0ata + adresar+ Fonta0tiraE Pandimen:ionalni na )d]ma!cme Fonta0tiraE me3a na mno]hoo!moo Fonta0tiraE 3i3a na 0o0os]0o0oda!lom Adresa 3eniEa Ee )o)ara]lebac!voda Kako to G(nk#ioni*e: Bi stvaramo rečnik ab koristeEi nota#ij( koj( smo veE ra)motrili.

Kada god ste naveli 8roj ( sekven#i ( (glastim )agradamaP kao *to ' = do 3 s+9< lista0+)ovine?=:3B6 ( do 0raEa s+9< lista0+)ovine?(:B6 = do -= s+9< lista0+)ovine?=:-=B6 )ocet0a do 0raEa s+9< lista0+)ovine?:B6 = do 3 s+9< ime?=:3B6 ( do 0raEa s+9< ime?(:B6 = do -= s+9< ime?=:-=B6 )ocet0a do 0raEa s+9< ime?:B6 .)ython3 se0venca!)y Stvar 7 Ee Eab+0a Stvar = Ee man3o Stvar ( Ee sar3are)a Stvar 3 Ee banana Stvar -= Ee banana Stvar -( Ee sar3are)a Lna0 7 Ee s Stvari od = do 3 s+ ?9man3o9< 9sar3are)a9B Stvari od ( do 0raEa s+ ?9sar3are)a9< 9banana9B Stvari od = do -= s+ ?9man3o9< 9sar3are)a9B Stvari od )ocet0a do 0raEa s+ ?9Eab+0a9< 9man3o9< 9sar3are)a9< 9banana9B Lna0ovi od = do 3 s+ 2a Lna0ovi od ( do 0raEa s+ aroo) Lna0ovi od = do -= s+ 2aroo Lna0ovi od )ocet0a do 0raEa s+ s2aroo) Kako to G(nk#ioni*e: PrvoP vidimo kako se koriste indeksi da se do8ij( pojedinačne stavke i) sekven#e.11 .9Stvar -= Ee9< lista0+)ovine?-=B6 )rint.9Stvari od D secenEe strin3a )rint.9Lna0ovi od )rint.9Lna0ovi od 9)la): .9Stvar = Ee9< lista0+)ovine?=B6 )rint.9Stvari od )rint.9Stvari od )rint. 5vo se tako<e na)iva i operaci&a subskripci&e.9Lna0 7 Ee9< ime?7B6 D secenEe liste )rint.9Lna0ovi od )rint.9Lna0ovi od )rint.9Stvar ( Ee9< lista0+)ovine?(B6 )rint.9Stvar 3 Ee9< lista0+)ovine?3B6 )rint.tr(kt(re podataka lista0+)ovine $ ?9Eab+0a9< 9man3o9< 9sar3are)a9< 9banana9B ime $ 9s2aroo)9 D O)eraciEa inde0siranEa ili S+bscri)tion )rint.9Stvar 7 Ee9< lista0+)ovine?7B6 )rint.9Stvar -( Ee9< lista0+)ovine?-(B6 )rint.9Stvari od )rint.

Zapamtite da P/t0on počinje sa 8rojanjem 8rojeva od -. Hako<e mo>ete da radite odse#anje sa negativnim 8rojevima.11 . Prvi 8roj 3pre dvotačke6 ( opera#iji ise#anjaP se odnosi na po)i#ij( odakle isečak počinjeP a dr(gi 8roj 3posle dvotačke6 poka)(je gde Ee se )a(staviti sečenje. Na primerP lista0+)ovine?:-=B daje deo ni)a koji isklj(č(je poslednj( stavk( ( ni)(P ali sadr>i sve ostale..tr(kt(re podataka je prika)ano goreP P/t0on vam dostavlja stavk( koja odgovara toj po)i#iji ( sekven#i 3ni)(6. Hako lista0+)ovine?=:3B daje parče ni)a sa početkom ( po)i#iji 1P (klj(č(je polo>aj 2P ali se )a(stavlja na po)i#iji ! i samim tim nam se vraEa par-e od dve stavke. 888 bri $ set. 5pera#ija ise#anja se (potre8ljava navo<enjem imena sekven#e )a kojim sledi op#ioni par 8rojeva ra)dvojeni0 dvotačkom ( (glastim )agradama. Naj8olja stvar ( sekven#ama je taP da mo>ete prist(piti t(pleimaP listama i stringovima na identičan načinQ 11. Ako prvi 8roj nije navedenP P/t0on Ee početi ise#anje od početka ni)a. AakleP lista0+)ovine?7B je prva stavkaP a lista0+)ovine?3B četvrta stavka ( lista0+)ovine ni)(. Negativni 8rojevi se koriste da o)nače po)i#ije od kraja ni)a. . Kada je korak veličine !P do8ijamo stavke sa po)i#ija -P !P itd. 9majte na (m( da je ovo veoma slično opera#iji indeksiranja koj( ste koristili do sada. Ako je dr(gi 8roj i)ostavljenP P/t0on Ee se )a(staviti na kraj( ni)a.etovi 3sk(povi6 s( nesre<ene )8irke jednostavni0 o8jekata. Hako<e mo>e da se navede i treEi arg(ment prilikom opera#ije ise#anjaP *to predstavlja vrednost koraka pri sečenj( 3po podra)(mevanom pode*avanj(P korak je veličine 16: 888 lista0+)ovine $ ?9Eab+0a9< 9man3o9< 9sar3are)a9< 9banana9B 888 lista0+)ovine?::=B ?9Eab+0a9< 9man3o9< 9sar3are)a9< 9banana9B 888 lista0+)ovine?::(B ?9Eab+0a9< 9sar3are)a9B 888 lista0+)ovine?::3B ?9Eab+0a9< 9banana9B 888 lista0+)ovine?::-=B ?9banana9< 9sar3are)a9< 9man3o9< 9Eab+0a9B Primetite da kada je vrednost koraka 2P do8ijamo stavke sa po)i#ija -P 2P . 5ni se koriste (koliko je postojanje o8jekata ( kolek#iji va>nijj od reda ( kom se nala)e ili od toga koliko p(ta se o8jekat pojavlj(je ( kolek#iji. Pro8ajte ra)ličite kom8ina#ije ti0 spe#iGika#ija opera#ije sečenja. AakleP lista0+)ovine?-=B se odnosi na poslednj( stavk( ( ni)(P a lista0+)ovine?-(B na predposlednj( stavk( ( ni)(.lično tomeP lista0+)ovine?:B vraEa kopij( #ele sekven#e.. 9majte na (m( da deo koji do8ijamo po-in&e na startnoj po)i#iji i da 'e se *avr3iti ispred krajnjeg navedenog polo>ajaP odnosno početna po)i#ija je (klj(čenaP ali krajnja po)i#ija Ee da 8(de isklj(čena i) odsečenog dela ni)a. 9ndeks mo>e 8iti negativan 8rojP ( kom sl(čaj(P po)i#ija o8jekta se i)rač(nava od kraja ni)a. Zapamtite: 8rojevi s( neo8ave)ni ali dvotačka je o8ave)na.?9bra:il9< 9r+siEa9< 9indiEa9B6 '& ." (et 9sk#p. Koriste P/t0on interpreter tj promptP tako da momentalno mo>ete da vidite re)(ltate. . Kori*Eenjem setovaP mo>ete vr*iti test članstvaP da li je podsk(p dr(gog setaP naEi )ajedničke elemente i)me<( dva setaP i tako dalje.

Ali postoje i i)()e#iQ KeneralnoP ne tre8a da se 8rinete o tomeP ali postoji n(spojave koje nastaj( prilikom (potre8e reGeren#i )a koje tre8a da 8(dete o8a)rivi: Primer 3sač(vati kao re/erence!)y 6: )rint.11 .9Fo)iranEe )omoc+ )+no3 isecanEa96 moEalista $ lista0+)ovine?:B D )ravimo 0o)iE+ ta0o sto isecamo sve D obEe0te i: Eedne liste del moEalista?7B D +0lanEamo )rvi obEe0at )rint.6 888 bri0!add. del lista0+)ovine?7B D F+)ili smo )rv+ stvar< )a Ee brisemo i: liste )rint.e>erence Kada napravite neki o8jekat i dodelite ga nekoj promenljivojP promenljiva ima neki odnos 3reGeren#(6 prema tom o8jekt( i ne predstavlja sam taj o8jekatQ Ho jestP ime promenljive (ka)(je na deo memorije rač(nara gde je (skladi*ten taj o8jekat.9lista0+)ovine Ee9< lista0+)ovine6 )rint.bri06 J9bra:il9< 9indiEa9K Kako to G(nk#ioni*e: Primer je prilično samoo8ja*njiv jer o8(0vata osnovne teorije o sk(povima i) matematike koj( ste (čili ( *koli.90ina96 888 bri0!iss+)erset.i lista0+)ovine i moEalista6 )ri0a:+E+ isti D re:+ltat D be: obEe0ta 9Eab+0a9< cime )otvrdE+Eemo da one re/eris+ na isti D obEe0at )rint.lista0+)ovine6.9moEalista Ee9< moEalista6 '+ .9lista0+)ovine Ee9< lista0+)ovine6 )rint.tr(kt(re podataka 888 9indiEa9 in bri Tr+e 888 9+sa9 in bri Calse 888 bri0 $ bri!co)y.bri6 Tr+e 888 bri!remove. Ho se )ove i)gradnja 3deGinisanje1 indin%6 imena o8jekta.9Hednostavno dodavanEe vrednosti96 lista0+)ovine $ ?9Eab+0a9< 9man3o9< 9sar3are)a9< 9banana9B moEalista $ lista0+)ovine D moEalista Ee samo dr+3o ime 0oEe se odnosi D na isti obEe0at .9r+siEa96 888 bri S bri0 D ili bri!intersection.$ . 11.9moEalista Ee9< moEalista6 D obratite )a:nE+ da obe . Bo>ete da mislite o tome kao o preči#ama na glavnom ekran( rač(nara 1 mo>ete da napravite preči#(P i)8ri*eteP kopirateP ali program na koji se odnosi preči#a i dalje ostaje.

92ar96 .tringovi koje koristite ( programima s( o8jekti koji pripadaj( klasi str .ra:ma0!Eoin.11 . =ta vi*e 8i tre8ali da )nate? PaP da li ste )nali da s( stringovi tako<e o8jekti i imaj( metode koji mog( da rade sveP od provere delova stringa pa da menjanja i (klanjanja ra)maka i)me<( reči (n(tar stringa? .9Xa< strin3 sadr:i slova . Neke korisne metode ove klase s( poka)ane ( sledeEem primer(. Napomena za Per. Ako samo dodelite dr(go ime varija8leP o8a imena Ee se :odnositi: na isti o8jekat i to 8i moglo da 8(de pro8lem ako niste dovoljno pa>ljivi.$ -=: )rint.9Xa< strin3 )ocinEe sa .a. Zapamtite da ako >elite da napravite kopij( liste ili neke slične vrste sekven#i ili kompleksni0 o8jekata 3ne mislimo na jednostavne ob&ekte kao *to s( npr #eli 8rojevi6P onda morate da koristite opera#ij( ise#anja kako 8i napravi kopij( originalnog o8jekta.& Di'e o stringovima IeE smo veE ra)matrali stringove ( pojedinostima ranije. Primer 3sač(vati kao strImetode!)y 6: ime $ 9S2aroo)9 D ovo Ee )rvi strin3 obEe0t i/ ime!starts2ith. 11.96 i/ 9a9 in ime: )rint.9S2a96: )rint.)ython3 re/erence!)y Hednostavno dodavanEe vrednosti lista0+)ovine Ee ?9man3o9< 9sar3are)a9< 9banana9B moEalista Ee ?9man3o9< 9sar3are)a9< 9banana9B Fo)iranEe )omoc+ )+no3 isecanEa lista0+)ovine Ee ?9man3o9< 9sar3are)a9< 9banana9B moEalista Ee ?9sar3are)a9< 9banana9B Kako to G(nk#ioni*e: IeEina stvari je o8ja*njenja ( komentarima (n(tar programa.)ython3 strImetode!)y 6- .tr(kt(re podataka D sada )rimetite da s+ liste ra:licite.9Xa< strin3 + sebi ima slovo .96 i/ ime!/ind.2ar.pro%ramere Zapamtite da nared8a dodele imena )a liste ne kreira kopij( iste. Za kompletn( list( takvi0 metodaP pogledajte hel).str6 .moEalista66 9)la): . 9)la): . Borate da koristite opera#ij( odse#anja da napravite kopij( liste.S2a.96 ra:ma0 $ 9IPI9 moEalista $ ?9bra:il9< 9'+siEa9< 9NndiEa9< 9Fina9B )rint.

bra:ilIPI'+siEaIPINndiEaIPIFina Kako to G(nk#ioni*e: 5vde vidimo dosta metoda stringova ( ak#iji. /ind metod se koristi )a lo#iranje polo>aja datog s(8stringa (n(tar stringaP /ind vraEa 11 ako je ne(spe*an ( pronala>enj( s(8stringa.a.11 . str klasa ima koristan metod da Eoin 3spoji6 stavke i) ni)a sa stringom kojim mi to >elimoP koji sl(>i kao ra)dvajanje i)me<( svake stavke ( redosled( i vraEa nam veEi ni) generisan od toga.ada kada imamo p(no osnovni0 )nanja o P/t0on1(P sledeEe *to Eemo ra)matrati je kako da osmislimo i napi*emo neki koristan P/t0on program. in operator koristimo )a prover( da li je dati string deo proveravanog stringa.tr(kt(re podataka Xa< strin3 )ocinEe sa .2ar. 61 .e%ime 9spitivali smo detaljnoP ra)ličite str(kt(re podataka (gra<ene ( P/t0on. starts2ith metod se koristi da sa)na da li string počinje sa datim stringom. Xa< strin3 sadr:i slova . 11. . Xa< strin3 + sebi ima slovo .@ .S2a. 5ve str(kt(re podataka Ee 8iti od s(*tinskog )načaja )a pisanje programa neke ra)(mne veličine.

Na primerP kako da odreditmo ko&e datoteke tre8a da 8(d( o8(0vaEene? 8ako Ee se one č(vati? #de Ee se one č(vati? Nakon do8re anali)e pro8lemaP mi mo>emo da počnemo da dizajniramo na* program. ovom sl(čaj(P 2A sam napravio sledeE( list(P kako 8i0 J! to >eleo da i)vedem.2 . • 4ajlovi se 8ekap(j( ( :i) Gajl. .e'enje Kako je di)ajn na*eg programa sad prilično sta8ilanP mo>emo početi pisati kod koji je rea-iza!ija na*eg re*enja. 9majte na (m( da mo>ete da koristite 8ilo koji program )a ar0iviranje ako >eliteP i ako )nate komande ( njem(P dokle god se ( tom program( mo>e raditi i i) komandne linije. Korisni#i ?indo@s1a mog( da je instaliraj( sa internet strane Kn(?in!2 projekta i dodati C:\Pro3ram Ciles\@n+Yin3(\bin ( sistemsk( promenljiv( okr(>enja PAH7P slično kao *to smo (radili )a prepo)navanje komandi ( P/t0on1( . 9deja je da na(čite kako da samostalno pi*ete skripte ( P/t0on1(. .12 . Neop0odno je i)vr*iti mal( ana-izu.e*avanje pro8lema 12 >e0avanje pro+le3a 9spitivali smo ra)ličite delove P/t0on je)ikaP a sada Eemo da pogledamo kako da sve ove delove (klopimo ( projektovanje i pisanje programa koji rade ne*to korisno. 9ako je ovo prilično jednostavan pro8lemP ne postoji dovoljno inGorma#ija )a nas da počnemo sa njegovim re*avanjem.niD distri8(#iji.1 Pro8lem Pro8lem koji >elimo da re*imo je : Ja /elim program ko&i kreira re*ervnu kopi&u svih mo&ih va/nih datoteka:.9B D Primetite da smo 0oristili d+)le navodni0e +n+tar strin3a< :bo3 imena D 0oEa sadr:e ra:ma0e D (! "ac0-+) ce biti sac+van + 3lavnom bac0-+) dire0toriE+m+ cilEniIdir $ 9X:\\'esto9 D La)amtite da )romenite ovo< +nesite lo0aciE+ D 0oEa vama od3ovara na vasem rac+nar+ 62 . 12. • Bi koristimo standardn( :i) komand( koja je podra)(mevano dost(pna ( 8ilo kojoj standardnooj "in(DJ.C:\Xoc+ments and Settin3s\P+re\Xes0to)\V7!7\. 12.ač(vaj kao bac0+)Iver=!)y : im)ort os im)ort time D =! CaElovi i /olderi 0oEe :elimo da bac0-+)-+Eemo se s)eci/irani + D listi i:vor $ ?9C:\\)y9< 9. • Bekap se mora č(vati ( glavnom 8ekap direktorij(m(. • 4ajlovi i direktorij(mi koji Ee da 8(d( 8ekapovani s( navedeni ( listi. Ako Ii (radite di)ajnP ne morate doEi do takvog re*enjaP jer svako ima neki svoj način o8avljanja nekog posla i re*avanja pro8lemaP tako da je ra)ličitost re*avanja sasvim ( red(. • Na)iv :i) ar0ive je tren(tni dat(m i vreme. Bi pravimo spisak stvari o tome kako na* program tre8a da radi.

. -[ se koristi da o)nači da 6! . Zatim Eemo napraviti string :i)I0omanda koji sadr>i komand( koj( >elimo i)vr*iti. Ako Iam gornji program ne radiP (pi*ite )rint. Na)iv )ip ar0ive koj( Eemo stvoriti je tren(tni dat(m i vreme koje smo generisali pomoE( time!str/time. Bi kreiramo ime #iljne )ip datoteke koristeEi operator sa8iranja koji koncetri3e stringove odnosno spaja dva stringa )ajedno i vraEa nov. Miljni direktorij(m je mesto gde č(vamo ove re)ervne kopija i to je navedeno ( cilEniIdir varija8li. Bo>ete da proverite da li ova komanda radi tako *to Eete je pokren(ti ( *el( 3"in(D terminal ili A5.ada (radite #op/Jpaste i)la)a :i)I0omanda ( terminal Ia*eg operativnog sistema i proverite da li ispravno radi sama.e*avanje pro8lema D 3! CaElovi se bac0-+)-+E+ + :i) /aEl D A! Nme :i) arhive Ee tren+tni dat+m i vreme cilE $ cilEniIdir * os!se) * time!str/time.!/ormat.:i) -[r J7K J=K.)ython bac0+)Iver=!)y Us)esno smo i:vrsili bac0-+) + X:\'esto\(7=37A7U(=O=O>!:i) .i:vor66 D Po0rece bac0-+) i/ os!system.9Us)esno smo i:vrsili bac0-+) +9< cilE6 else: )rint.F9.9"ACF-UP &NHE USPEO.A taj direktorij(m )a Ias6. Ako ova komanda :(radi posao:P onda proverite svoj P/t0on programP jer mora da se tačno pod(dara program( navedenom i)nad.:i)I0omanda6 neposredno pre po)iva komande os!system a )atim i pokrenite program. Kako to G(nk#ioni*e: Primetite kako smo pretvarali na* di*a&n ( program 1 korak1po1korak. Bi omog(Eavamo kori*Eenje os i time mod(la tako *to Eemo i0 prvo importovati. Kompletan spisak takvi0 spe#iGika#ija mo>e se naEi ( .niD1(P T\\T na ?indo@s1( i T:T na Ba#5. %m spe#iGika#ija Ee 8iti )amenjena sa mese#om predstavljenim kao de#imalni 8roj i)me<( -1 i 12 i tako dalje. 3tako<e proverite da li direktorij(m ( koji vr*ite 8ekap postoji 1 ovaj program NF K. time!str/time.:i)I0omanda6 $$ 7: )rint. %\ o)naka Ee 8iti )amenjena godinom.cilE< 9 9!Eoin.eGeren#e i (p(tstava P/t0on1a.6 komande.12 .9%\%m%d%#%W%S96 * 9!:i)9 D O! Foristimo :i) 0omand+ da )osalEemo /aElove + :i) arhiv+ :i)I0omanda $ .6 G(nk#ija pre()ima arg(menteP slične onaima koje smo koristili ( navedenom program(.96 9)la): . Ako ta komanda ne (speP proverite (p(tstvo )a )ip komand( o tome *ta 8i mogao da 8(de pro8lem. Hako<e Ee imati !:i) eksten)ij( i č(vaEe se ( cilEniIdir direktorij(m(. 58ratite pa>nj( na kori*Eenje os!se) promenljive 1 to daje separator direktorij(ma prema va*em operativnom sistem(P odnosno 8iEe T4T na "in(D1( i . Kori*Eenje os!se) (mesto ovi0 )nakova direktno Ee (činiti na* program prenosiv 3porta8l6 i moEi Ee da radi na svim ovim sistemima.ada smo ( Ga)i testiranjaP gde smo proveravali da na* program radi ispravno. Zatim smo naveli Gajlove i direktorij(me )a koje pravimo re)ervne kopije ( listi i:vor. Ako se program ne pona*a kako oček(jemoP onda moramo da i)vr*imo de a%ovanje programaP odnosno da (klonimo gre3ke 38agove6 ( program(.1(. :i) nared8a koja se koriste ima neke op#ije i parametre koje smo joj dali. prompt6.

C:\Xoc+ments and Settin3s\5inE+re\Xes0to)\V7!7\. Na primerP mo>da postoji pro8lemP ako niste osmislili program pravilnoP ili ako ste napravili gre*k( pri k(#anj( kodaP itd. Be<(timP mo>emo napraviti neke male i)mene na njojP kako 8i mogla da radi 8olje ( svakodnevnoj (potre8i. Prva prednost je ( tome *to 8i se va*e kopije č(vale sortirane na 0ijerar0ijski način i )ato 8i nam 8ilo mnogo lak*e da se sna<emo ( njima.mesto d(pli0 o8rn(ti0 kosi0 #rta 3ff6P tako<e mo>ete koristiti ra@ string. 12. Ar(ga prednost je ( tome *to s( imena Gajlova mnogo kraEa. Be<(timP ne koristite 9C:\Xoc+ments9 jer 8i to Ia* 5. HreEa prednost odvajanja direktorij(maP je da Ee nam pomoEi da proverite da li ste napravili re)ervn( kopij( )a taj danP jer Ee direktorij(m 3koji ima na)iv koji je tren(tni dat(m6 8iti kreiran samo ako ste napravili re)ervn( kopij( )a taj dan.0odno tomeP s vremena na vremeP moraEete da se vraEate ( Ga)( projektovanja ili Eete morati da de8ag(jete svoj program.ada kada imamo skript( koja radi re)ervne kopijeP mo>emo je koristiti kad god >elimo da imamo re)ervne kopije datoteka.e*avanje pro8lema )ip komanda radi ti0o 3ne pravi i)la) ( terminal(6. -r odre<(je da komanda radi rek(rsivno )a direktorij(me tj tre8a da sadr>i sve poddirektorij(me i datoteke.ač(vaj kao bac0+)Iver(!)y : im)ort os im)ort time D =! CaElovi i /olderi 0oEe :elimo da bac0-+)-+Eemo se s)eci/irani + D listi i:vor $ ?9C:\\)y9< 9. 5vo se )ove Ga)a održavanja soGtvera. 5vo se )ove operativna Ga)a ili dostavna 3dep-oKment6 Ga)a ( ra)voj( soGtvera.9B D Primetite da smo 0oristili d+)le navodni0e +n+tar strin3a< :bo3 imena D 0oEe sadr:e ra:ma0e D (! "ac0-+) ce biti sac+van + 3lavnom bac0-+) dire0toriE+m+ cilEniIdir $ 9X:\\'esto9 D La)amtite da )romenite ovo< +nesite lo0aciE+ D 0oEa vama od3ovara na vasem rac+nar+ 6$ . . Na primerP koristite 9C:\\Xoc+ments9 ili r9C:\Xoc+ments9 . prot(mačio kao nepo)nat( sekven#( \X . Ho je toP mi smo napravili skript( koja pravi re)ervn( kopij( na*i0 va>ni0 GajlovaQ Napomena za korisnike operativno% sistema OindoPs .niD korisni#ima se savet(je da koriste metod( )a i)vr*avanje programa kao *to je opisano ranijeP tako da mog( pokren(ti 8ekap skript( 8ilo kada i 8ilo gde. "in(DJ.12 . 5p#ije koje s( dalje navedene s( ime )ip ar0ive i potom sledi spisak Gajlova i direktorij(ma )a 8ekap. . 2edna od i)mena koja 8i mi koristila je 8olji me0ani)am imenovanje datoteka 1 koristeEi tren(tno vreme kao ime Gajla (n(tar direktorij(ma sa imenom koji je tren(tni datumP koji je direktorij(m ( okvir( glavnog 8ekap direktorij(ma.3 <r#ga ver%ija Prva ver)ija na*e skripte radi.ako je komanda (spe*no i)vr*enaP ( s(protnom vraEa 8roj gre*ke. 5nda smo konačno pokrenuli komand( koristeEi os!system G(nk#ij( koja pokreEe komand( kao da je pokren(ti i) sistemaP odnosno ( *el( 1 ona vraEa . )avisnosti od is0oda komandeP mi smo prika)ali odgovaraj(E( por(k( da li je 8ekap (speo ili ne. Kornji program radi ispravnoP ali 3kao i o8ično6 prvi programi ne rade (vek onako kako ste očekivali. . . Bi konvert(jemo list( i:vor ( string koristeEi Eoin metod stringova koji smo veE videli kako se koristi. Ave op#ije se kom8in(j( i skraEeno pi*( kako -[r .

9"ACF-UP &NHE USPEO.96 9)la): . .:i) -[r J7K J=K. 12.danas6 D Freira dire0toriE+m )rint.9Us)esno smo i:vrsili bac0-+) +9< cilE6 else: )rint.e*avanje pro8lema D 3! CaElovi se bac0-+)-+E+ + :i) /aEl D A! Tren+tni dat+m Ee ime )oddire0toriE+ma + 3lavnom dire0toriE+m+ danas $ cilEniIdir * os!se) * time!str/time.cilE< 9 9!Eoin.danas6: os!m0dir.)ython3 bac0+)Iver(!)y Us)esno smo 0reirali dire0toriE+m X:\'esto\(7=37A7Q Us)esno smo i:vrsili bac0-+) + X:\'esto\(7=37A7Q\=3=>OQ!:i) Kako to G(nk#ioni*e: IeEi deo na*eg programa ostaje isti.i:vor66 D Po0rece bac0-+) i/ os!system. Pažnja! .ledeEi program ne radiP tako da ne 8riniteP (radite gaP jer Eete i)v(Ei jedn( po(k( i) primera. 2edine promene s( toP da smo proverili da li postoji direktorij(m sa imenom dana*njeg dana (n(tar glavnog 8ekap direktorij(ma pomoE( G(nk#ije os!)ath!e5ists.9%#%W%S96 D FreiranEe )oddire0toriE+ma +0oli0o on ne )ostoEi i/ not os!)ath!e5ists. Ho se mo>e lako postiEi dodavanjem korisnikovog komentara ( ime )ip ar0ive.12 .ač(vaj kao bac0+)Iver3!)y : im)ort os im)ort time 6' .9Us)esno smo 0reirali dire0toriE+m9< danas6 D Nme :i) arhive cilE $ danas * os!se) * sada * 9!:i)9 D O! Foristimo :i) 0omand+ da )osalEemo /aElove + :i) arhiv+ :i)I0omanda $ .:i)I0omanda6 $$ 7: )rint.9%\%m%d96 D Tren+tno vreme Ee ime :i) arhive sada $ time!str/time. ?re7a ver%ija Ar(ga ver)ija radi prilično do8ro kad radima 8ekap dosta GajlovaP ali kada postoji mnogo re)ervni0 kopijaP te*ko je ra)likovati gde s(Jod čega s( 8ekap1oviQ Na primerP mo>da sam napravio neke velike promene ( program( ili pre)enta#ijiP pa )ato >elim da mi ime )ip ar0ive govori koje s( to promeneJver)ije programa.!/ormat. Ako ne postojiP mi ga kreiramo pomoE( os!m0dir G(nk#ije.

< line (( cilE $ danas * os!se) * sada * 9I9 * M Synta5Error: invalid synta5 Kako ovo 3ne6radi: 66 .!/ormat.0omentar6 $$ 7: D )roverava da li Ee 0omentar +net cilE $ danas * os!se) * sada * 9!:i)9 else: cilE $ danas * os!se) * sada * 9I9 * 0omentar!re)lace.9"ACF-UP &NHE USPEO.9%#%W%S96 D Tra:i od 0orisni0a da +nese 0omentar< 0oEi bi se )rimenio + imen+ :i) D arhive 0omentar $ in)+t.danas6 D Freira dire0toriE+m )rint.)ython3 bac0+)Iver3!)y Cile .12 .i:vor66 D Po0rece bac0-+) i/ os!system.9Us)esno smo 0reirali dire0toriE+m9< danas6 D O! Foristimo :i) 0omand+ da )osalEemo /aElove + :i) arhiv+ :i)I0omanda $ .e*avanje pro8lema D =! CaElovi i /olderi 0oEe :elimo da bac0-+)-+Eemo se s)eci/irani + D listi i:vor $ ?9C:\\)y9< 9.danas6: os!m0dir.9%\%m%d96 D Tren+tno vreme Ee ime :i) arhive sada $ time!str/time.9Us)esno smo i:vrsili bac0-+) +9< cilE6 else: )rint.bac0+)Iver3!)y.:i) -[r J7K J=K.96 9)la): .9B D Primetite da smo 0oristili d+)le navodni0e +n+tar strin3a< :bo3 imena D 0oEe sadr:e ra:ma0e D (! "ac0-+) ce biti sac+van + 3lavnom bac0-+) dire0toriE+m+ cilEniIdir $ 9X:\\'esto9 D La)amtite da )romenite ovo< +nesite lo0aciE+ D 0oEa vama od3ovara na vasem rac+nar+ D 3! CaElovi se bac0-+)-+E+ + :i) /aEl D A! Tren+tni dat+m Ee ime )oddire0toriE+ma + 3lavnom dire0toriE+m+ danas $ cilEniIdir * os!se) * time!str/time.9Prilo:ite 0omentar bac0-+)-a --8 96 i/ len.C:\Xoc+ments and Settin3s\5inE+re\Xes0to)\V7!7\.9 9< 9I96 * 9!:i)9 D FreiranEe )oddire0toriE+ma +0oli0o on ne )ostoEi i/ not os!)ath!e5ists.:i)I0omanda6 $$ 7: )rint.cilE< 9 9!Eoin.

danas6 D Freira dire0toriE+m )rint.9Prilo:ite 0omentar bac0-+)-a --8 96 i/ len.ač(vaj kao bac0+)IverA!)y : im)ort os im)ort time D =! CaElovi i /olderi 0oEe :elimo da bac0-+)-+Eemo se s)eci/irani + D listi i:vor $ ?9C:\\)y9< 9. .9Us)esno smo 0reirali dire0toriE+m9< danas6 6 .danas6: os!m0dir.C:\Xoc+ments and Settin3s\5inE+re\Xes0to)\V7!7\.9%\%m%d96 D Tren+tno vreme Ee ime :i) arhive sada $ time!str/time. Pa>ljivim posmatranjem na*eg programaP vidimo da je jedna logička linija podeljena na dve Gi)ičke linijeP a mi nismo pre#i)irali da ove dve Gi)ičke linije id( )ajedno. Kada pa>ljivo osmotrimo gre*k( koj( nam je i)8a#io P/t0onP tako<e vidimo da nam je poka)ao mesto gde je otkrio gre*k(. AakleP Giksirajmo ov( gre*k( (n(tar na*eg programa. Hako da mo>emo da )apočnemo da debagu&emo na* programP tj da počnemo da ispravljamo gre*aka od te linije pa nadalje 3ako postoje jo* neke6." !etvrta ver%ija . s(*tiniP P/t0on je na*ao operator dodavanja 3 [ 6 8e) operanda ( tom logičkom red(P pa )8og toga ne )na kako da nastavi i)vr*avanje programa.e*avanje pro8lema /vaj pro%ram ne radi! P/t0on nam govori da postoji gre*ka ( sintaksiP *to )nači da skripta nema str(kt(r( koj( P/t0on oček(je. 5ve korek#ije programaP kada nai<emo na gre*ke se na)iva )iksiranje a%ova.12 .9B D Primetite da smo 0oristili d+)le navodni0e +n+tar strin3a< :bo3 imena D 0oEe sadr:e ra:ma0e D (! "ac0-+) ce biti sac+van + 3lavnom bac0-+) dire0toriE+m+ cilEniIdir $ 9X:\\'esto9 D La)amtite da )romenite ovo< +nesite lo0aciE+ D 0oEa vama od3ovara na vasem rac+nar+ D 3! CaElovi se bac0-+)-+E+ + :i) /aEl D A! Tren+tni dat+m Ee ime )oddire0toriE+ma + 3lavnom dire0toriE+m+ danas $ cilEniIdir * os!se) * time!str/time.9%#%W%S96 D Tra:i od 0orisni0a da +nese 0omentar< 0oEi bi se )rimenio + imen+ :i) D arhive 0omentar $ in)+t. Zapamtite da mo>emo navesti da je nastavak logičke linije ( sledeEoj Gi)ičkoj liniji (potre8om kose #rte na kraj( Gi)ičke linije.0omentar6 $$ 7: D )roverava da li Ee 0omentar +net cilE $ danas * os!se) * sada * 9!:i)9 else: cilE $ danas * os!se) * sada * 9I9 * \ 0omentar!re)lace. 12.9 9< 9I96 * 9!:i)9 D FreiranEe )oddire0toriE+ma +0oli0o on ne )ostoEi i/ not os!)ath!e5ists.

!/ormat. Be<(timP ja sam koristio os!system način stvaranja 8ekapa ( gore navedenim primerima čisto i) pedago*ki0 ra)logaP jer je primer dovoljno jednostavan da se ra)(meP i :radi: solidno da 8i 8io i koristan. .cilE< 9 9!Eoin.9"ACF-UP &NHE USPEO. Bo>emo da sa)namo ova imena i) sys!ar3v listeP pa i0 mo>emo da dodamo ( na*( i:vor list( pomoE( e5tend metodeP koja je metoda list klase. Be<(timP ako je korisnik (neo neki komentarP onda taj komentar dodajemo ( ime )ip ar0ive neposredno pre !:i) eksten)ije. Bi tra>imo od korisnika da (nese neki komentar 8ekapa koristeEi in)+t G(nk#ij(P a )atim proverimo da li je korisnik )aista (neo ne*toP tako *to sa)namo d(>in( (nosa pomoE( len G(nk#ije.:i) -[r J7K J=K. 5vi mod(li s( deo standardne 8i8lioteke i dost(pni s( )a vas da i0 koristite 8e) spoljni0 )avisnosti prema )ip program( koji mora 8iti instaliran na va*em rač(nar(. Na primerP mo>ete (klj(čiti sintaks( programa gde mo>ete da i)a8erete komand( -v da ovaj program počne da prika)(je por(ke na ekran( 3verbosity6.koliko korisnik pritisne samo taster enter 8e) ikakvog (nosa 3mo>da je to 8io samo (o8ičajeni 8ekap ili nis( napravljene nikakve pose8ne promene6P onda program radi na isti način kao *to je radio ranije.$ Di'e prilago-avanja programa %etvrta ver)ija je sasvim )adovoljavaj(Ea skripta )a rad veEine korisnikaP ali (vek postoji prostor )a po8olj*anja.:i)I0omanda6 $$ 7: )rint.)ython3 bac0+)IverA!)y Prilo:ite 0omentar bac0-+)-a --8 Us)esno smo i:vrsili bac0-+) + X:\'esto\(7=37A7Q\=O7>7O!:i) Kako to G(nk#ioni*e: 5vaj program sada radiQ Pro<imo kro) stvarna po8olj*anja koje smo napravili ( ver)iji !.)ython3 bac0+)IverA!)y Prilo:ite 0omentar bac0-+)-a --8 dodat novi )rimer Us)esno smo i:vrsili bac0-+) + X:\'esto\(7=37A7Q\=O73(ZIdodatInoviI)rimer!:i) .i:vor66 D Po0rece bac0-+) i/ os!system.9Us)esno smo i:vrsili bac0-+) +9< cilE6 else: )rint.96 9)la): .12 . Bo>ete li pok(*ati da napi*ete pet( ver)ij( programa koja koristi )ipGile mod(l (mesto po)ivanja os!system 1a? 6& . Najva>nije (napre<enje 8i 8ilo da ne koristite os!system )a kreiranje ar0iveP veE kori*Eenjem :i)/ile ili tar/ile (gra<eni0 mod(la )a kreiranje ovi0 ar0iva.e*avanje pro8lema D O! Foristimo :i) 0omand+ da )osalEemo /aElove + :i) arhiv+ :i)I0omanda $ . 12. Primetite da smo )amenili ra)make ( komentar( sa donjom #rti#om 1 to radimo )ato *to je kori*Eenje Gajlova 8e) ra)maka ( imenima mnogo lak*e. Ar(go mog(Ee (napre<enje 8i 8ilo da omog(Eite dodavanje Gajlova i direktorij(ma koje >elimo da 8ekap(jemoP tako *to 8i i0 prosle<ivali skripti preko komandne linije.

5dr>avanje 3. ZapamtiteP so)tver se uz%aja@ a ne iz%raQuje.12 . 6+ . 5ve Ga)e se mog( sa>eti na sledeEi način: 1.napre<ivanje6 Prepor(čen način pisanja programa je post(pak kro) koji smo prola)ili ( kreiranj( 8ekap skripte: . Napraviti 3implementa#ija1reali)a#ija6 $. Kako 3di)ajn6 !. 12. . Hada dodajete neke nove G(nk#ije koje >elite a )atim se ponavlja Napravi 1 Hestiraj 1 Koristi 1 5dr>avaj #ikl(s onoliko p(ta koliko je potre8no 3)a kvalitetne programe 8eskonačno d(go6.@ .e*avanje pro8lema 12. Kori*Eenje da se osig(ra da sve radi kao *to je i očekivano. =ta 3Anali)a6 2. sledeEem poglavlj( Eemo ra)matrati o8jektno orijentisano programiranje. Bo>da Ee vam sve to 8iti od koristi prilikom stvaralja nekog Ia*eg sopstvenog programaP kao *to smo mi činili ( ovom poglavlj(P tako da vam postane konGoran rad ( P/t0on1(P kao i ( re*avanj( pro8lema. Kori*Eenje 35pera#ionali)a#ija ili Aeplo/ment6 6. Počnite sa implementa#ijom jednostavne ver)ije.& Proces ra%voja so>tvera Ao sada smo pro*li kro) ra)ne )aze ( pro#es( pisanja soGtvera. Hestiranje i otklanjanje gre*aka. Hest 3testiranje i otklanjanje gre*aka6 '.e%ime Iideli smo kako da kreirate sopstvene programeJP/t0on skripte kro) ra)ne Ga)e koji s( (klj(čene ( pisanje takvi0 programa.raditi anali)( i di)ajn.

5vo se dosta ra)lik(je od M[[ i 2ave 3pre ver)ije 1. Klase i o8jekti s( dva glavna aspekta o8jektno orijentisanog programiranja. Polja i metode te klase s( navedeni ( (v(čenim 8lokovima. #-asa stvara nov( vrstu 3tip6P gde je o jekat instanca klase. 5va terminologija je va>no jer nam poma>e da se napravimo ra)lik( i)me<( G(nk#ija i promenljivi0 koje s( ne)avisne i oni0 koji pripadaj( klasi ili o8jekt(.ar3=< ar3(6 P ovo Ee #e ( P/t0on1( a(tomatski konvertovati ( WoEaFlasa!metod.int6 )a vi*e detalja o klasi. Postoji jo* jedan način organi)ovanja programa a to je da kom8in(jemo podatke i G(nk#ionalnosti i od svega toga napravimo ne*to *to se )ove o8jekat. . 58jekti mog( da skladi*te podatke koristeEi o8ične promenljive koje pripada&u tom o8jekt(. Zato seP navedenim redom na)ivaj( promen-jive instan!e i promen-jive k-ase. - . Postoje mnoge prednosti kori*Eenja standardnog imena 1 svaki čitala# va*eg programa Ee ga odma0 prepo)natiP pa čak i spe#ijali)ovani 9AF 39ntegrated Aevelopment Fnvironments6 mo>e da vam pomogne ako koristite sel/ . MS i 2ava 1. Pogledajte hel). Polja mog( 8iti dve vrste 1 oni mog( da pripadaj( svakoj instan#iJo8jekt( neke klase ili mog( da pripadaj( samoj klasi. Klasa se kreira pomoE( klj(čne reči class.1 sel> Betode klase imaj( samo jedn( spe#iGičn( ra)lik( od o8ični0 G(nk#ija 1 oni moraj( da imaj( dodatno prvo ime koje mora da se doda na početak liste parametaraP ali joj mi ne dode-jujemo nikakv( vrednosti 3)a ovaj parametar6 kada po)ivamo metod i) na*eg programaP veE Ee m( vrednost o8e)8editi sam P/t0on. Promenljive koje pripadaj( o8jekt( ili klasi se na)ivaj( po-ja 3Gields6. Ho se )ove proceduralno ori&entisan način programiranja. KolektivnoP polja i metode nama mog( 8iti o)načeni kao atri uti te klase.moEobEe0t< ar3=< ar3(6P i to je ono *ta je spe#ijalno ( sel/ 1(. svim programima koje smo pisali do sadaP di)ajnirali smo na*e programe sa G(nk#ijamaP odnosno 8lokovima komandi koje o8ra<(j( podatke.+Hava+*I pro%ramere sel/ ( P/t0on1( je ekvivalentno this poka)ivač( ( M[[ i this reGeren#i ( 2avi i MS. Napomena za *. Ho se )ove )b&ektno ori&entisano programiran&e. 58jekti tako<e mog( da imaj( G(nk#ionalnostiP () pomoE G(nk#ija koje pripada&u klasi.ing i unbo. 5va pose8na promenljiva odnosi se na sam ta& o8jekatP i po o8ičaj(P daje joj se ime sel/ . veEin( sl(čajeva mo>ete koristiti pro#ed(ralni način programiranjaP ali prilikom pisanja veliki0 programa ili re*avanj( neki0 pro8lema je 8olje koristiti o8jektno orijentisan( te0nik( programiranja. Analogija je da mo>ete da imate promenljive tipa int *to )načiP ( prevod(P da varija8la koja č(va #elo8rojn( vrednost jeP ( stvari instan#a 3o8jekat6 (n(tar int klase. Hakve G(nk#ije se na)ivaj( metode klase..1! 58jektno orijentisano programiranje 13 "+jektno orijentisano progra3iranje . .'6P gde s( #eli 8rojevi primitivni nativni tipovi. Napomena za pro%ramere statički0 jezika 9majte na (m( da se čak i #eli 8rojevi 3integeri6 tretiraj( kao o8jekti 3od int klase6. Kada po)ovete metod ovog o8jekta kao moEobEe0t!metod.' programeri Ee videti ovo kao veoma sličan kon#ept( bo. Primer Ee sve ovo da ra)jasni.e#imo da imate klas( WoEaFlasa i instan#( ove klase koja se )ove moEobEe0t . 13.ig(rno se pitate kako P/t0on daje vrednost )a sel/ i )a*to mi ne tre8a da dodelj(jemo vrednost )a nj(. . Bada mo>ete dati 8ilo koje ime )a ovaj parametarP preporu-u&e se da koristite ime sel/ 1 svako dr(go ime je deGinitivno neodo8reno.ing.

6 9)la): . .1! 58jektno orijentisano programiranje Ho tako<e )nači da ako imate metod koji ne ()ima nikakve arg(menteP onda Eete jo* (vek imati jedan arg(ment 1 sel/ .6 )rint. je prika)ana ( sledeEem primer( 3sač(vajte kao 13.6 D OvaE 0rata0 )rimer mo:e biti na)isan i 0ao 1icnost.9Ldravo< 0a0o siG96 1 $ 1icnost. . ovom sl(čaj(P imamo pra)an 8lok koji smo deGinisali pomoE( )ass nared8e.)ython3 metod!)y Ldravo< 0a0o siG Kako to G(nk#ioni*e: 5vde vidimo sel/ ( ak#iji. class 1icnost: )ass D )ra:an blo0 1 $ 1icnost.sel/6: )rint.ledeEe *to smo (radili je da smo kreirali o8jekatJinstan#( ove klase koristeEi ime klase praEeno )agradama 3Bi Eemo na(čiti vi*e o ovome način( ( sledeEem odeljk(6.2 Klase Najjednostavnija mog(Ea klasa naEEednostavniEa0lasa!)y 6.ada Eemo videti primer 3sač(vajte kao metod!)y 6.6!0a:iLdravo. . 5vo je praEeno (v(čenim 8lokom nared8i koje čine telo klase. 13.3 3etode o8jekata IeE smo o8jasnili da klaseJo8jekti mog( da imaj( metodeP 8a* kao i G(nk#ijeP osim *to imamo ekstra sel/ promenljiv(. Primetimo da 0a:iLdravo metoda :neprima: parametreP ali i dalje 1 . Primetite da je adresa memorije rač(naraP ( kojoj se č(va va* o8jekatP je tako<e prika)ana. Adresa Ee imati nek( dr(g( vrednost na Ia*em rač(nar(P jer P/t0on mo>e da skladi*ti o8jekat gde na<e prostora )a njega.6 1!0a:iLdravo.)ython3 naEEednostavniEa0lasa!)y RIImainII!1icnost obEect at 7577CA(=X78 Kako to G(nk#ioni*e: Bi stvaramo nov( klas( koristeEi class nared8( i ime klase. Ho nam govori da imamo instan#( od 1icnost klase ( IImainII mod(l(. class 1icnost: de/ 0a:iLdravo. Za prover( radaP mi smo potvrdili tip promenljiveP jednostavno ga prika)(j(Ei na ekran(.16 9)la): .

H( nema nikakvi0 pro8lemaP jer o)naka sa tačkom sel/!ime )nači da postoji ne*to *to se )ove : ime: i da je to ne*to deo o8jekta pod na)ivom :sel/: a dr(go ime je lokalna promenljiva.6 D OvaE 0rat0i )rimer se ta0odEe mo:e na)isati 0ao 1icnost. Promenl&ive klase s( deljive 1 mog( 8iti dost(pne svim instan#ama te klase. 13." Promenljive klasa i o8jekata IeE smo ra)govarali o G(nk#ionalnim delovima klasa i o8jekata 3tj. Zatim smo kreirali novo polje koje se tako<e )ove ime. metodama6P sada Eemo (čiti o nji0ovom del( podataka. Aeo sa poda#imaP odnosno poljaP nije ni*ta dr(go nego o8ične varija8le koje s( ve*ane sa spe#iGika#ijama imena 3namespa!es6 )a klase i o8jekte. Po*to smo ekspli#itno (ka)ali na koje ime smo misliliP ne postoji konG()ija.sel/6: )rint. 13. Primetite d(pl( donj( #rti#( i na početk( i na kraj( imena metoda. 5vo je pose8an )načaj ove metode. Postoji samo jedan 2 . IIinitII metod se pokreEe ( tren(tk( kada se o8jekat klase ini#ijali)(je. Zato se )ov( name spaces. Primer 3sač(vati kao 0lasaIinit!)y 6: class 1icnost: de/ IIinitII.9S2aroo)96 1!0a:iLdravo. Ho )nači da ova imena va>e samo (n(tar ovi0 klasa i o8jekata.9S2aroo)96!0a:iLdravo. . 0nit metod Postoji mnogo ra)ličiti0 imena metoda koja imaj( pose8an )načaj P/t0on1ovim klasama. 58ratite pa>nj( da s( to dve ra)ličite promenljive iako s( o8e na)vane TimeT.ada smo ( mog(Enosti da koristimo polje sel/!ime ( na*im metodamaP na primer( se prika)alo ( 0a:iLdravo metod(.6 9)la): .1! 58jektno orijentisano programiranje ima sel/ ( deGini#iji G(nk#ije.)ython3 0lasaIinit!)y Ldravo< Ea se :ovem S2aroo) Kako to G(nk#ioni*e: 5vde smo deGinisali IIinitII metod koji kao parametar ()ima ime 3)ajedno sa (o8ičajenim sel/ 6.9Ldravo< Ea se :ovem9< sel/!ime6 1 $ 1icnost. Betod je koristan )a o8avljanje 8ilo kakve inici&ali*aci&e koj( >elite da (radite sa svojim o8jektom. Postoje dve vrste pol&a 1promenljive klase i promenljive o8jekata koji s( klasiGikovani ( )avisnosti od toga da li pripadaj( klasi ili o8jekt(P odnosno da li klasa ili o8jekat posedu&e t( varija8l(.sel/< ime6: sel/!ime $ ime de/ 0a:iLdravo. Najva>nije je primetiti da mi nismo direktno po)vali IIinitII metodP veE smo postavili arg(mente (n(tar )agrada nakon imena klaseP prilikom kreiranja nove instan#e klase. Bi Eemo sada videti )načaj IIinitII metode.

sel/!ime66 'obot!)o)+laciEa -$ = i/ 'obot!)o)+laciEa $$ 7: )rint.sel/< ime6: 999NniciEali:aciEa )odata0a999 sel/!ime $ ime )rint.9!/ormat.sel/!ime66 de/ 0oli0o.sel/!ime66 D 0ada Ee 0reirana licnost robota D )ovecava se )o)+laciEa 'obot!)o)+laciEa *$ = de/ IIdelII. Promenl&ive ob&ekta s( ( vlasni*tv( svakog individua-no% o8jektaJinstan#e klase.9'(-X(96 ! .sel/6: 999Umirem!999 )rint.'obot!)o)+laciEa66 0oli0o $ staticmethod.9J7K Ee bio )oslednEi!9!/ormat. .NniciEali:+Eem J7K69!/ormat.sel/6: 999'obot vas )o:dravlEa! Xa< oni mo3+ i to.sel/!ime66 else: )rint.9Po:dravlEam Vas< moE @os)odar+< mo:ete me :vati J7K !9!/ormat. ovom sl(čaj(P svaki o8jekat ima svoj primerak poljaP odnosno one ne dele i ne odnose se na 8ilo koji način prema polj( sa istim imenom ( nekoj dr(goj instan#i.9Nmamo J7:dK robota9!/ormat.6: 999Pri0a:+Ee tren+tn+ )o)+laciE+!999 )rint.1! 58jektno orijentisano programiranje primerak promenljive klase i kada neki o8jekat napravi promen( na promenljivoj klaseP ta promena Ee 8iti vidljiva svim dr(gim o8jektima te klase.0oli0o6 droid= $ 'obot.999 )rint.9.'obot!)o)+laciEa66 de/ 0a:iLdravo. Primer Ee ovo lako o8jasniti 3sač(vajte kao obEvar!)y 6: class 'obot: 999PredstavlEa robota sa imenom!999 D variEabla 0lase< broEi 0olicin+ robota )o)+laciEa $ 7 de/ IIinitII.9C+n0cionalno Ee Eos J7:dK robota9!/ormat.9J7K Ee +nisten.

)ython3 obEvar!)y . Promenljiva ime pripada o8jekt( 3dodelimo je o8jekt( koristeEi sel/6 i stoga je promenljiva o8jekta. C-3P7 Ee bio )oslednEi! Nmamo 7 robota Kako to G(nk#ioni*e: 5vo je d(gačak primer ali poma>e da poka>emo prirod( varija8li klase i o8jekata.6 )rint.6 )rint. Bogli smo tako<e isto postiEi koristeEi dekoratere : $ .. Z8og togaP mi smo promenljiv( klase )o)+laciEa po)ivali kao 'obot!)o)+laciEa a ne kao sel/!)o)+laciEa.6 'obot!0oli0o.\n'oboti mo3+ da rade nesto ovde!\n.6 del droid= del droid( 'obot!0oli0o.6 'obot!0oli0o.9C-3P796 droid(!0a:iLdravo.NniciEali:+Eem C-3P76 Po:dravlEam Vas< moE @os)odar+< mo:ete me :vati C-3P7 ! Nmamo ( robota 'oboti mo3+ da rade nesto ovde! 'oboti s+ :avrsili svoE rad! #aEde da ih +nistimo! '(-X( Ee +nisten.'oboti s+ :avrsili svoE rad! #aEde da ih +nistimo!. 5vdeP )o)+laciEa pripada 'obot klasi i stoga je to promenljiva klase.6 9)la): .1! 58jektno orijentisano programiranje droid=!0a:iLdravo.. Po*to nam ne tre8aj( takve inGorma#ijeP mi Eemo koristiti staticmethod . C+n0cionalno Ee Eos = robota C-3P7 Ee +nisten. Hako<eP imajte na (m( da Ee promenljiva o8jekta sa istim imenom kao promenljiva klaseP da sakrije promenljiv( klaseQ 0oli0o je )apravo metoda koja pripada klasiP a ne o8jekt(.NniciEali:+Eem '(-X(6 Po:dravlEam Vas< moE @os)odar+< mo:ete me :vati '(-X( ! Nmamo = robota . Bi po)ivamo promenljiv( o8jekta ime koristeEi sel/!ime o)nak( (n(tar metoda tog o8jekta. Zapamtite ov( jednostavn( ra)lik( i)me<( promenljivi0 klasa i o8jekata. Ho )nači da mo>emo da je deGini*emo kao classmethod ili staticmethodP ( )avisnosti od toga da li nam je potre8no da )namo koje je to klase deo.6 droid( $ 'obot.

. .vi članovi klase s( javni. 5vo 8i (8r)o postalo veoma gloma)no. Pove)ivanje se naj8olje mo>e )amisliti kao odre<ivanje odnosa tipova i podtipova i)me<( klasa. ' .+Hava+*I pro%ramere . .9Nmamo J7:dK robota9!/ormat. 5vo se )ove re9erenaca atributa. ovom program(P tako<e vidimo i kori*Eenje do!strin%s )a klase i metode. 13. ovom metod(P mi smo jednostavno smanjili 8roj 'obot!)o)+laciEa )a 1. Primetite da IIinitII metoda da 8i pokren(la 'obot instan#( sa koristi imenom.1! 58jektno orijentisano programiranje ]staticmethod de/ 0oli0o. Z8og togaP konven#ija je da svaka promenljiva koja se koristi samo ( okvir( klase ili o8jekta počinje sa donjom #rtomP a svi ostali na)ivi s( javni i mog( 8iti kori*Eeni od strane dr(gi0 klasaJo8jekata. Zapamtite da morate da se o8raEate varija8lama i metodama istog o8jekta samo pomoE( sel/.6: 999Pri0a:+Ee tren+tn+ )o)+laciE+!999 )rint. Zapamtite da je ovo samo konven#ija a ne oso8ina P/t0on1a 3osim preGiksa sa dvostr(kom donjom #rtom6. 2edna od glavni0 prednosti o8jektno orijentisanog programiranja je ponovna upotre a koda 3dela programa6 i jedan od načina da se ovo postigne je me0ani)am pove*ivan&a.$ Pove%ivanja90n*eritance. Bo>ete da kreirate dve ne)avisne klase )a svaki tip i o8radite i0P ali dodavanje nove )ajedničke karakteristike 8i )načilo da je moramo dodati ( o8e ne)avisne klase. Ba* kao i IIinitII metodP postoji jo* jedan pose8an IIdelII metodP koji se po)ivamo kada >elimo da o8jekat (mreP odnosno on se vi*e ne koristi i koji vraEa kompj(terskom sistem( komad memorije koji m( je o8jekat )a()imao. Bo>emo prist(piti do#strings1( klase ( program( pomoE( 'obot!IIdocII Pa do#strings1( metode kao 'obot!0a:iLdravo!IIdocII . 5ni tako<e imaj( spe#iGične karakteristike kao *to s( plataP predavanja i odmori )a nastavnike iP o)nake i #ene )a (čenike.vi članovi klase 3(klj(č(j(Ei i članove )a podatke6 s( &avni i sve metode s( virtuelne ( P/t0on1(. 2edan i)()etak: Ako koristite članove koji č(vaj( podatke sa imenima ( kojima koristite dvostruku don&u crtu kao pre9iksP na primer II)rivatnavar P P/t0onEe da iskoristi spe#ijalno )načenje )a na)ive i eGikasno Ee da je (čini privatnom promenljivom. . Ako >elite da ga vidimo ( ak#ijiP moramo da koristimo del komand(P *to je (pravo ono *to smo ovde (radili.. Hako<eP primeE(jemo da s( vrednosti sel/!ime spe#iGične )a svaki o8jekatP *to (ka)(je na prirod( promenljive o8jekta. IIdelII metod se koristi kada o8jekat nije ( (potre8i i ne )na se da li 'e=kada 'e taj metod da se pokrene. 5ni imaj( neke )ajedničke oso8ine kao *to s( imeP starost i adresa. Napomena za *. ovoj metodiP mo>emo poveEati 8roj )o)+laciEa )a 1P jer imamo jo* jednog ro8ota koji se dodaje.'obot!)o)+laciEa66 Aekorateri mo>e )amisliti kao preči#( )a po)ivanje ekspli#itne komandeP kao *to smo videli ( ovom primer(. Bolji način 8i 8io da se stvori )ajednička klasa ClanoviS0oleP i onda da stvorimo nastavničke i (čeničke klase pove*ane i) klase ClanoviS0oleP tj oni Ee postati s(81tipovi ovog tipa 3klase6P pa onda mo>emo dodavati spe#iGične karakteristike ovim pod1tipovima. Pretpostavimo da >elite da napi*ete program koji mora da vodi eviden#ij( nastavnika i (čenika na Gak(ltet(.

6 class UcitelE.NniciEali:+Eem UcitelE: J7K69!/ormat.sel/< ime< 3odine< o:na0a6: ClanoviS0ole!IIinitII.ClanoviS0ole6: 999PredstavlEa +citelEa999 de/ IIinitII.9Nme:.sel/!ime< sel/!3odine6< end $ .9.sel/6: 6 .sel/!ime66 de/ 0a:i. A klase .sel/!ime66 de/ 0a:i. Be<(timP promene (n(tar podtipova ne (tič( na dr(ge podtipove. .J7K. 5vo se )ove po-imor)izamP gde se mo>e očekivati da Ee podtip 8iti )amenjen ( svakoj sit(a#iji ( kojoj glavni tip to oček(jeP odnosno o8jekat mo>e da se tretira kao instan#a matične klase.t(dent se na)ivaj( i*vedenim klasama ili podklase.sel/6 )rint.sel/< ime< 3odine6 sel/!o:na0a $ o:na0a )rint.J=K.9.9Larada: .NniciEali:+Eem ClanoviS0ole: J7K69!/ormat.sel/< ime< 3odine6 sel/!:arada $ :arada )rint. Na primerP mo>ete da dodate novo polje 9A karti#e )a nastavnike i (čenikeP jednostavnim dodavanjem ( klas( ClanoviS0ole. Ako mi dodajemoJmenjamo nekakve G(nk#ionalnost ( klasi ClanoviS0oleP to Ee seP a(tomatski odra)iti i ( njenim podtipovima. 2o* jedna prednost je da mo>ete da se odnosite na o8jekat nastavnik ili o8jekat st(dent kao o8jekat i) klase ClanoviS0oleP *to 8i moglo da 8(de korisno ( nekim sit(a#ijamaP kao *to s( pre8rojavanje članova *kole.sel/6: 999Fa:e moEe detalEe999 )rint.NniciEali:+Eem St+dent: J7K69!/ormat.čitelj i . Hako<e primeE(jemo da mo>emo da ponovo koristimo kodove od matične klase i ne moramo da i0 ponavljamo ( ra)ličitim klasama kao *to 8i morali ( sl(čaj( smo koristili me<(so8no ne)avisne klase.sel/!:arada66 class St+dent. @odina:. .sel/< ime< 3odine6: sel/!ime $ ime sel/!3odine $ 3odine )rint.ada Eemo videti ovaj primer kako :radi: 1 pretvorimo ga ( program 3sač(vajte kao inherit!)y 6: class ClanoviS0ole: 999PredstavlEa bilo 0o3 clana s0ole999 de/ IIinitII.9!/ormat.1! 58jektno orijentisano programiranje Postoje mnoge prednosti ovakvog prist(pa.ClanoviS0ole6: 999PredstavlEa +ceni0e999 de/ IIinitII.sel/< ime< 3odine< :arada6: ClanoviS0ole!IIinitII.J7:dK.sel/6: ClanoviS0ole!0a:i. Klasa ClanoviS0ole je ( ovoj sit(a#iji po)natija po imen( osnovna klasa ili superklasa.sel/!ime66 de/ 0a:i.9.9!/ormat.

sel/!o:na0a66 + $ UcitelE. AaljeP vidimo da IIinitII metod 8a)ne klase se ekspli#itno navodi koristeEi sel/ promenljiv(P tako da mo>emo da ini#ijali)(jemo deo 8a)ne klase o8jekta. Hako<e smo videli prednosti i mane o8jektno orijentisanog programiranja. ovom poglavlj( smo istra>ivali ra)ličite aspekte klasa i o8jekataP kao i ra)ličite terminologije ( ve)i sa njima. 5vo je veoma va>no da )apamtite 1 P/t0on neEe a(tomatski da po)ove konstr(ktor 8a)ne klaseP morate da ga po)vati Ii na >eljenom mest(.& .6 sl(>i )a promen( 1 (mesto da na kraj( linije 8(de )apočet novi redP )rint.S2aroo). P/t0on je strogo o8jektno1orijentisan i ra)(mevanje ovi0 kon#epata Ee vam mnogo pomoEi na d(>e sta)e.9O:na0a: .1! 58jektno orijentisano programiranje ClanoviS0ole!0a:i.NniciEali:+Eem ClanoviS0ole: S2aroo)6 . @odina:. @odina:. Parametar end koji se koristi ( 0a:i.e%ime .NniciEali:+Eem UcitelE: @dEa! "lebetala6 .37777. O:na0a: .UO. Primetimo da mo>emo smatrati instan#e od klasa UcitelE ili St+dent kao instan#e klase ClanoviS0ole kada koristimo 0a:i metod ClanoviS0ole klase.6 G(nk#ija Ee da prika>e ra)mak.(O.)ython3 inherit!)y . Kako to G(nk#ioni*e: Aa 8iste koristili pove)ivanjeP moramo navesti ime 8a)ne klase ( t(pli i)a imena klase prilikom deGinisanja klase.9!/ormat. Nme:.9@dEa! "lebetala9< A7< 377776 s $ St+dent. 2edan od načina da se ovo s0vati je taj daP P/t0on uvek kreEe ( potrag( )a tra>enom metodom ( tren(tnom tip(P *toP ( ovom sl(čaj(P i radi. .A7.sel/6 )rint. Bi tako<e mo>emo primetiti da po)ivanje metoda 8a)ne klase se vr*i tako *to je klasno ime preGiksP praEen po)ivom metodeP a )atim dodeljivanjem sel/ promenljive )ajedno sa arg(mentima ako i0 ima.@dEa! "lebetala. Larada: .9S2aroo)9< (O< UO6 )rint.6 D )ri0a:+Ee )ra:n+ liniE+ clanovi $ ?+< sB /or clan in clanovi: clan!0a:i.NniciEali:+Eem St+dent: S2aroo)6 Nme:.J7:dK.6 D radi 0a0o :a UcitelEe< ta0o i :a St+dente 9)la): . Hako<eP o8ratite pa>nj( da se po)iva 0a:i metod podklaseP a ne metod 0a:i klase ClanoviS0ole.NniciEali:+Eem ClanoviS0ole: @dEa! "lebetala6 . 13. Ako nije mogao da prona<e metodP on počinje da pretra>(je metode koje pripadaj( 8a)noj klasiP jedan po jedanP redosledom kojim s( navedene ( t(pli ( deGini#iji klase. Napomena o terminologiji 1 ako je vi*e od jedne klase navedeno ( t(pli pove)ivanjaP onda se to na)iva m(lti pove)ivanje 3multiple inheritance6.

sledeEem poglavlj(P mi Eemo na(čiti kako da se i)8orimo sa (la)omJi)la)om i kako da prist(pite datotekama ( P/t0on1(.1! 58jektno orijentisano programiranje . & .

IeE smo videli kako mo>emo napraviti isečke i) sekven#i kori*Eenjem se0venca?a:bB počev*i od po)i#ije a pa do po)i#ije b . Bi tako<e mo>emo da prilo>imo i treEi arg(ment koji odre<(je korak 3ra)mak6 kojim se vr*i ise#anje.6 Ee vratiti ( program taj tekst koji je korisnik (neo. .6 i )rint. Bi koristimo taj tekst tako *to ga preokrenemo.daIliIEeI)alindrom. 1 .1 Fla% od korisnika .9U0+caE te0st: 96 i/ .la)J9)la) 39np(tJ5(tp(t6 1% Ula)?-)la) -nput?"utput$ PostojaEe sit(a#ije kada va* program mora da ima nekakv( interak#ij( sa korisnikom. Ho mo>emo postiEi pomoE( in)+t.9Xa< to Ee )alindrom96 else: )rint. Kada korisnik (nese ne*to i pritisne taster FnterP in)+t. Pogledajte hel).poso8nost da kreiraP čita i pi*e Gajlove je od s(*tinskog )načaja )a mnoge programe i mi Eemo istra>iti i ovaj aspekt ( ovom poglavlj(.te0st6: ret+rn te0st $$ obrn+t.te0st6: ret+rn te0st?::-=B de/ daIliIEeI)alindrom.6 G(nk#ija mo>e da ima string kao arg(ment i prika)(je ga korisnik(.te0st6 nesto $ in)+t.1$ .ač(vaj ovaj program kao 0orisni0Iin)+t!)y : de/ obrn+t. Aavanje negativnog korakaP odnosnoP 11 Ee nam vratiti tekst ( :rikver#: 3o8rn(t6.)ython3 0orisni0Iin)+t!)y U0+caE te0st: abra0adabra &e< to niEe )alindrom Kako to G(nk#ioni*e: Bi koristimo G(nk#ij( odse#anja da nam da tekst ( o8rn(tom raspored(.)ython3 0orisni0Iin)+t!)y U0+caE te0st: sir &e< to niEe )alindrom .6 G(nk#ija. Podra)(mevan korak je 1 P )8og čega nam se (vek i vraEa kontin(irani deo teksta 3onako kako je i (nesen6. Ako s( originalni tekst i o8rn(ti tekst jednakiP onda + . Posle toga čeka korisnika da (nesete ne*to i pritisnite taster Fnter. 2o* jedan čest tip (la)aJi)la)a je rad sa Gajlovima.str6 )a vi*e detalja. in)+t. Na primerP mo>ete da koristite rE+st metod da prika>ete string koji je poravnan sa desne strane na naveden( *irin(.nesto66: )rint.)ython3 0orisni0Iin)+t!)y U0+caE te0st: madam Xa< to Ee )alindrom .9&e< to niEe )alindrom96 9)la): . Na primerP Ii 8i >eleli da imate neki (nos od strane korisnikaP a )atim da prika>ete neke re)(ltate te korisnikove ak#ije. Za i)la)P mi mo>emo da koristimo ra)ličite metode str 3string6 klase.

liniEa< end $ 9 96 /!close.la)J9)la) 39np(tJ5(tp(t6 je taj tekst palindrom 3rečeni#a koja se isto čita i pi*e i od napred i od po)adi6..9)esma!t5t96 D A0o nismo naveli< )odra:+mevano Ee 9r9 D citanEe /aEla 2hile Tr+e: liniEa $ /!readline.. Na primerP :A meneP ni dogodine nema.poso8nost da čita ili pi*e ( Gajl( )avisi od re>ima koji ste odredili prilikom otvaranja datoteke. 5ndaP na kraj(P kada )avr*ite nek( manip(la#ij( sa datotekomP mo>ete po)vati close metod da ka>ete P/t0on1( da smo )avr*ili sa kori*Eenjem datoteke.)isanEe /!2rite. .6.6 D :atvara /aEl 9)la): . Bo>ete li po8olj*ati gornji program da prepo)na ovaj palindrom? Savet >2e -ita&? Koristite t(ple 3mo>ete naEi list( svih )nakova interp(nk#ije ovde: interp(nk#ija6 koja sadr>i sve nedo)voljene karaktereP )atim koristite test članstvo da (tvrdi da li )nak tre8a da se (kloni ili neP odnosno da li je )nak me<( )a8ranjenim d 3TQTPT?TP T. 1 .6 D :atvara /aEl / $ o)en.TP . Roma$i zadatak Provera da li je tekst palindrom tre8a da ignori*e )nakove interp(nk#ijeP ra)make i veličin( slova.liniEa6 $$ 7: D X+:ina od 7 :naci da smo dosti3li EOC D 0raE /aEla brea0 )rint. Kako to G(nk#ioni*e: PrvoP otvaramo datotek( pomoE( (gra<ene o)en G(nk#ije navodeEi ime Gajla i način na koji >elite &- .)ython3 0oristitiI/aElove!)y Pro3ramiranEe Ee :abava Fada Ee )osao 3otov a0o :elis da ti )oso b+de ra:bribri3a 0oristi Python.)esma6 D +)is+Ee te0st + /aEl /!close.: je palindromP ali na* tren(tni program nam ne 8i ka)ao da jeste. 999 / $ o)en.2 Eajlovi 4ajlove mo>ete otvarati i koristiti )a čitanje ili pisanje stvaranjem o8jekata /ile klase i koristeEi adekvatne njene read P readline ili 2rite metode da čitate i) ili (pis(je ( datotek(.9)esma!t5t9< 9296 D Otvara /aEl :a 929 ..6 i/ len. Primer 3sač(vati kao 0oristitiI/aElove!)y 6: )esma $ 999\ Pro3ramiranEe Ee :abava Fada Ee )osao 3otov a0o :elis da ti )oso b+de ra:bribri3a 0oristi Python.1$ .

. Hako<e mo>ete odrediti da li Ee se čitanjeP pisanjeP ili dodavanje odvijati ( tekst(alnom mod( 3 9t96 ili ( 8inarnom mod( 39b96. Bi )atim čitamo svak( linij( datoteke pomoE( readline metode (n(tar petlje. 1 .6 del lista0+)ovine D +nistava lista0+)ovine )romenlEiv+ D Ucitava na:ad i: /aEla / $ o)en.3 Pickle P/t0on posed(je standardni mod(l koji se )ove )ic0leP pomoE( koga mo>ete da (skladi*tite i-o kakav P/t0on1ov o8jekat ( Gajl( i odatle ga koristiti kasnije./6 D +citava obEe0at i: /aEla )rint. Podra)(mevanoP )rint. Po deGa(lt(P o)en. .la)J9)la) 39np(tJ5(tp(t6 da otvorite taj Gajl.o)en6 Ee vam dati vi*e detalja o njima./aElliste0+)ovine< 9rb96 sac+vanalista $ )ic0le!load. . Kada se vrati pra*an stringP to )nači da smo stigli na kraj Gajla i mi :8e>imo: i) petlje. 5nda smo konačno )atvorili datotek( sa close.lista0+)ovine< /6 D stavlEa obEe0at + /aEl /!close. Bi ne tre8a da navedete re>im jer je :pročitaj tekst Gajl: podra)(mevani re>im otvaranja. Bi smo sprečili prela)ak ( novi red navo<enjem end $ 9 9 P jer Ee linijaP koja se čita i) datotekeP veE imati )nak )a novi red na kraj(.)ython3 )ic0lovanEe!)y ?9Eab+0a9< 9man3o9< 9sar3are)a9B Kako to G(nk#ioni*e: &1 .6 Gajl Ee da 8(de 9t9ekst Gajl i otvara se ( 9r9 1 re>im( )a čitanje.adaP proverite sadr>aj )esma!t5t datoteke da 8iste potvrdili da je program )aista pisao i čitaj( i) tog Gajla.6 prika)(je tekstP ali i a(tomatski prela)i ( novi red na ekran(.1$ .sac+vanalista6 9)la): . Primer 3sač(vati kao )ic0lovanEe!)y 6: im)ort )ic0le D ime /aEla + 0om :elimo da c+vamo obEe0at /aElliste0+)ovine $ 9lista0+)ovine!data9 D lista stvari :a 0+)ovin+ lista0+)ovine $ ?9Eab+0a9< 9man3o9< 9sar3are)a9B D Sac+vaE + /aEl / $ o)en. 9mate )apravo mnogo vi*e načina na raspolaganj( i hel).e>im mo>e 8iti: čitanje 3 9r96P pisanje 39296 ili dodavanje 39a96.ledeEe *to smo (radili je da smo otvorili isti Gajl ponovo )a čitanje. na*em primer(P prvo otvorite datotek( ( re>im( (pisivanja teksta i koristimo 2rite metod )a pisanje ( datotek(P a )atim smo ij konačno )atvorili sa close. 5va metoda daje kompletn( linij( (klj(č(j(Ei )nak novog reda na kraj( linije. . 5vo se )ove per*istentno č(vanje o8jekata./aElliste0+)ovine< 92b96 )ic0le!d+m).

a)matrali smo ra)ne vrste (la)aJi)la)aP a tako<e i rad sa Gajlovima i kori*Eenja mod(la )ic0le. AaljeP mi smo pre()eli o8jekat pomoE( load G(nk#ije )ic0le mod(laP koja vraEa o8jekat. 5vaj pro#es se na)iva pickling. . sledeEem poglavlj( mi Eemo o8ra<ivati kon#ept 0vatanja gre*aka 3eD#eptions6. 1 . 5vaj pro#es se na)iva unpickling.1$ . .e%ime . &2 .la)J9)la) 39np(tJ5(tp(t6 Aa 8i memorisali neki o8jekat ( Gajl(P prvo moramo da :otvorimo: taj Gajl sa o)en ( 9b9 1 8inarnom re>im( i 929 1(pisivanje re>im(P a )atim moramo po)vati d+m) G(nk#ij( )ic0le mod(la.

.#kovanje ca e6ceptions+ima Bi mo>emo da kontroli*emo eD#eptions pomoE( komandi try!!e5ce)t.96 Tracebac0 .1' FD#eption 3:7vatanje gre*aka:6 1* <@#eption 2&vatanje gre0aka2$ 9)()e#i se javljaj( kada se pojave odre<ene i*u*etne sit(a#ije ( va*em program(.:6P pa vidite *ta se de*ava.lično tomeP *ta ako ( va*em program( postoje neke neispravne komande? Njega Ee o8ra<ivati P/t0onP i kada naleti na neispravan deo kodaP on Ee :diEi r(ke: 3 raises6 i jednostavno vam reEi da postoji %reška. 1".1 Gre'ke Zamislite jednostavn( )rint G(nk#ij(. Ho je ono *to :0vatač: gre*aka 3error handler6 )a ov( gre*k( (radi. ovom sl(čaj(P P/t0on raises 3podi>e6 sintaksn( gre*k(. .most recent call last6: Cile . Bi Eemo sada pokušati da čitamo (la) od korisnika.9Po:drav Svima. . s(*tini mi stavljamo (o8ičajene komande (n(tar tr/ 8loka i stavio sve na*e komande )a kontrol( gre*ke ( 8lok( eD#ept.9Lasto si mi +radio EOCG96 e5ce)t FeyboardNnterr+)t: )rint.9Po:drav Svima.9U0+caE nesto --8 96 e5ce)t EOCError: )rint. 888 Print. Na primerP *ta ako >elite da pročitate datotek( a datoteka ne postoji? 9li *ta ako je sl(čajno i)8ri*emo ( tren(tk( kada je program pokren(t? .9Ti si )onistio o)eraciE+!96 else: &! . 1".most recent call last6: Cile .Rstdin8. Primer 3sač(vati kao tryIe5ce)t!)y 6: try: te0st $ in)+t.9U0+caE nesto--8 96 U0+caE nesto--8 Tracebac0 . =ta ako smo pogre*no napisali )rint kao Print ? 58ratite pa>nj( na velika i mala slova ( rečima. 888 s $ in)+t.2 0%#%eci 9e6ceptions.Rstdin8.96 Po:drav Svima.a takvim sit(a#ijama se 8orimo koristeEi e?!eptions. 1".< line =< in Rmod+le8 EOCError P/t0on podi>e gre*k( koja se )ove EOCError i koja ( s(*tini )nači da je na*ao simbol kra&a datoteke 3koji predstavlja ctrl-d 6 ( tren(tk( kada se to ne oček(je.< line =< in Rmod+le8 &ameError: name 9Print9 is not de/ined 888 )rint. Primetite da je &ameError gre*ka podign(ta 3raised6 a prika)ano je i mesto gde je otkrivena gre*ka. Kada Ias program 8(de pitao )a (nos pritisnite ctrl-d 3ako koristite ?indo@s 1 ctrl .3 .

)ython3 tryIe5ce)t!)y U0+caE nesto --8 D )ritisnite ctrl -d Lasto si mi +radio EOCG . sledeEem primer( Eemo videti kako da se :(0vati: o8jekat i)()etakaP tako da mo>emo da do8ijemo neke dodatne inGorma#ije.te0st6< 36 D &e0i dr+3i rad mo:e biti de/inisan na ovom mest+< D &a +obicaEen nacin &$ . else 8lok Ee se i)vr*iti ako se nije desio i)()etakJgre*ka. 9načeP ( čem( 8i 8ila poenta try 8loka? Ako postoje gre*ke ili i)()et#i koje nismo naveliP onda Ee standardni P/t0on 0andler 8iti po)vanP i on Ee da )a(stavi i)vr*avanje programa i prika)ati por(k( o gre*ki. Kre*ka ili i)()etak koji >elite podiEi tre8a da 8(de klasa kojaP direktno ili indirektno mora 8iti i)vedena klasa i) E5ce)tion klase.sel/6 sel/!d+:ina $ d+:ina sel/!naEmanEe $ naEmanEe try: te0st $ in)+t.9Ti si +neo J7K9!/ormat.te0st66 9)la): .1' FD#eption 3:7vatanje gre*aka:6 )rint. 1". Hako<e mo>ete da imate else 8lok pove)an sa try!!e5ce)t 8lokom. Podi%anje :6ception+a Bo>ete da podignete i)()etke pomoE( raise komande daj(Ei ime gre*keJi)()etka i e5ce)tion o8jekta koji tre8a da 8(de i*ba-en. Primer 3sač(vati kao raisin3!)y 6: class N:+:eta0LaFrat0iUnos.len. e5ce)t kla()(la mo>e da o8radi jedn( odre<en( gre*k( ili i)()etakP ili malo veE( list( gre*akaJi)()etaka. 9majte na (m( da mora da postoji 8arem jedna e5ce)t kla()(la ( ve)i sa svakim try 8lokom. IeE smo to ranije videli ( ak#iji. .)ython3 tryIe5ce)t!)y U0+caE nesto --8 D )ritisnite ctrl -c Ti si )onistio o)eraciE+! . Ako nismo naveli imena gre*aka ili i)()etka ovaj 8lok Ee kontrolisati sve gre*ke i i)()etke koji se pojave.sel/< d+:ina< naEmanEe6: E5ce)tion!IIinitII.)ython3 tryIe5ce)t!)y U0+caE nesto --8 nema e5ce)tiona Ti si +neo nema e5ce)tiona Kako to G(nk#ioni*e: Bi smo stavili sve i)jave koje mog( da doved( do i)()etakaJgre*aka (n(tar try 8lokaP a )atim stavite re*enja )a odgovaraj(Ee gre*keJi)()etake ( e5ce)t kla()(l(J8lok.9U0+caE nesto --8 96 i/ len.te0st6 R 3: raise N:+:eta0LaFrat0iUnos.E5ce)tion6: 999Flasa de/inisana od strane 0orisni0a!999 de/ IIinitII.

" ?r) . 5vo je analogija parametrima i arg(mentima prilikom po)ivanja G(nk#ija.ač(vajte kao /inally!)y : im)ort time try: / $ o)en.6 &' . Vi ste )re0in+li citanEe /aEla!96 /inally: /!close..liniEa6 $$ 7: brea0 )rint.e5!d+:ina< e5!naEmanEe66 else: )rint. .9N:+:eta0LaFrat0iUnos: Unos Ee J7K 0ara0tera d+3< oce0ivano Ee naEmanEe J=K9\ !/ormat. 5n ima dva polja 1 d+:ina je d(>ina datog (la)a i naEmanEe koja predstavlja minimaln( d(>in( koj( program oček(je.9Lasto si mi +radio EOCG96 e5ce)t N:+:eta0LaFrat0iUnos as e5: )rint.(6 D Xa b+demo si3+rni da ce da radi ne0o vreme e5ce)t FeyboardNnterr+)t: )rint..)ython3 raisin3!)y U0+caE nesto --8 asd &iEedan e5ce)tion niEe )odi3n+t! Kako to G(nk#ioni*e: 5vde mi stvaramo sopstveni tip i)()etaka.1' FD#eption 3:7vatanje gre*aka:6 e5ce)t EOCError: )rint. 9majte na (m( da mo>ete da koristite e5ce)t kla()(l( )ajedno sa /inally 8lokom )a odgovaraj(Ei try 8lok.9&iEedan e5ce)tion niEe )odi3n+t!96 9)la): .liniEa< end $ 9 96 time!slee). Einall) Pretpostavimo da (čitate datotek( ( Ia* program. 5vaj novi tip i)()etaka se )ove N:+:eta0LaFrat0iUnos. okvir( ove konkretne e5ce)t kla()(leP mi koristimo polja d+:ina i naEmanEe od o8jekta eD#eption da 8i prika)ali odgovaraj(E( por(k( korisnik(.6 i/ len. . e5ce)t kla()(liP mi smo na)načili klas( gre*ke koja Ee 8iti memorisana kao promenljiva sa imenom eDP koja Ee da sadr>i odgovaraj(Ei o8jekat gre*keJi)()etka.9. Kako 8i se osig(rali da je o8jekat Gajla pravilno )atvoren ako nije nijedan i)()etak podign(t? 5vo se mo>e (raditi pomoE( /inally 8loka. 1". Borate da (gradite jedan ( dr(gogP ako >elite da koristite o8a.)ython3 raisin3!)y U0+caE nesto --8 a N:+:eta0LaFrat0iUnos: Unos Ee = 0ara0tera d+3< oce0ivano Ee naEmanEe 3 . .9)esma!t5t96 2hile Tr+e: D &as +obicaEeni nacin citanEa /aElova liniEa $ /!readline.

1' FD#eption 3:7vatanje gre*aka:6 )rint. Hako<eP videli smo kako da kreirate sopstvene vrste eD#eption i kako da se raise eD#eption. 1".)esma!t5t. .e%ime 58jasnili smo kori*Eenje try!!e5ce)t i try!!/inally komandi.$ 2it* komanda Ao8ijanje inGorma#ija ( try 8lok(P a kasnije oslo8a<anje ti0 inGorma#ija ( /inally 8lok( je najče*Ee kori*Een s#enario rada. AliP t( je i 2ith nared8a koja omog(Eava da se to (radi na jednostavniji način: .& . Kada program pokrenete i dok se on i)vr*avaP pritisnite ctrl-c da prekineteJotka>ete i)vr*avanje programa. IeEe ra)laganje na ov( tem( je i)van okvira ove knjigeP pa pogledajte PFP !$! )a sveo8(0vatno o8ja*njenje. &6 .ač(vajte kao 0oristitiI2ith!)y : 2ith o)en. =ta se de*ava i)a s#ene 1 postoji protokol koji koristi 2ith nared8(.Cistimo: Latvaramo /aEl6 Kako to G(nk#ioni*e: Bi radimo (o8ičajeno čitanje datotekaP ali smo proi)voljno (veli pa()( od 2 sek(nde nakon prika)a svake linijeP koristeEi time!slee) G(nk#ij(P tako da se program pokreEe sporije 3P/t0on jeP inačeP vrlo 8r)6. Haj protokol uvek po)iva /ile!IIenterII G(nk#ij( pre početka 8loka nared8i ispod njegaP i uvek po)iva /ile!IIe5itII nakon )avr*etka 8loka nared8i.liniEa< end $ 9 96 Kako to G(nk#ioni*e: 9)la) 8i tre8alo da 8(de isti kao i ( pret0odnom primer(.. Iidimo da je FeyboardNnterr+)t i)()etak i)8ačen i program se )avr*ava. sledeEem poglavlj(P mi Eemo istra>ivati P/t0on1ove standardne 8i8lioteke. Vi ste )re0in+li citanEe /aEla! .a)lika je ( tome *to ovde koristimo o)en G(nk#ij( sa 2ith nared8om 1 mi ostavimo da nam )atvaranje datoteke a(tomatski (radi 2ith o)en . AakleP kod koji 8i smo morali napisati ( /inally 8lok(P Ee 8iti odra<en a(tomatski od strane IIe5itII metode. .9. Be<(timP pre nego i)a<emo i) programaP Ginall/18lok kreEe da se i)vr*ava i o8jekat datoteke se (vek )atvara. Ho je ono *to nam poma>e da se i)8egne kori*Eenje ekspli#itni0 try!!/inally komandi konstantno (n(tar programa.6 as /: /or liniEa in /: )rint.)ython3 /inally!)y Pro3ramiranEe Ee :abava Fada Ee )osao 3otov a0o :elis da ti )oso b+de ra:bribri3a . 5n pre()ima o8jekat koji vraEa o)en komandaP na)ovimo ga :/ile: ( ovom sl(čaj(..Cistimo: Latvaramo /aEl696 9)la): . 1".

1 s)s mod#l sys mod(l sadr>i spe#iGične sistemske G(nk#ionalnosti. 7ajde da istra>imo nekoliko korisni0 mod(la. 1$.< '+ntimeYarnin36 else: )rint. Ia>no je da se (po)nate sa P/t0on1ovim standardnim 8i8liotekamaP jer se mnogi pro8lemi mog( 8r>e re*itiP ako ste (po)nati sa spektrom stvari koje ove 8i8lioteke mog( da pr(>e. Pretpostavimo da >elite da proverite koja ver)ija P/t0on1a se koristiP tako daP re#imoP mi >elimo da 8(demo sig(rni da koristimo najmanje ! ver)ij( programa. Be<(timP ja strogo prepor(č(jem da se vratite ovom poglavlj(P kada Iam postane 8lisko programiranje () pomoE P/t0on1a.)ython3 888 im)ort sys 888 sys!versionIin/o sys!versionIin/o.)ython(!U )roveraver:iEe!)y )roveraver:iEe!)y:>: '+ntimeYarnin3: Potreban Vam Ee Python 3!7 da bi )o0ren+li ovaE )ro3ram '+ntimeYarnin36 .)ython3 )roveraver:iEe!)y & . Pažnja Ako vam se teme ( ovom poglavlj( čine s(vi*e napredneP mo>ete da preskočite ovo poglavlje.ač(vajte kao )roveraver:iEe!)y : im)ort sys< 2arnin3s i/ sys!versionIin/o!maEor R 3: 2arnin3s!2arn. Bi Eemo istra>iti neke od najče*Ee kori*Eeni0 mod(la ( ovim 8i8liotekama. IeE smo videli da lista sys!ar3v sadr>i arg(mente komandne linije.. Bo>ete naEi kompletne podatke )a sve mod(la ( standardnim 8i8liotekama ( odeljk( :"i8rar/ .eGeren#e: (n(tar dok(menta#ije koja dola)i sa instala#ijom P/t0on1a.-: . sys mod(l nam daje takv( mog(Enost.16 . Prvi podatak je glavna ver)ija. Bi mo>emo to da proverimo i) ra)logaP kao na primerP da o8e)8edimo da program radi samo pod P/t0on !.9&astaviti normalno96 9)la): .Potreban Vam Ee Python 3!7 da bi )o0ren+li ovaE )ro3ram. .maEor$3< minor$3< micro$7< releaselevel$9/inal9< serial$76 888 sys!versionIin/o!maEor 8$ 3 Tr+e Kako to G(nk#ioni*e: sys mod(l ima t(ple versionIin/oP koja nam daje inGorma#ije o ver)iji programa. Standardne +i+lioteke P/t0on1ove standardne 8i8lioteke sadr>e veliki 8roj korisni0 mod(la i deo s( svake standardne P/t0on instala#ije.tandardne 8i8lioteke 1.

.messa3e6s9< /ilename $ lo3I/aEl< /ilemode $ 929< 6 lo33in3!deb+3.9#OWEX'NVE96< os!3etenv.os!3etenv. 1$.6 9)la): .< lo3I/aEl6 lo33in3!basicCon/i3.)ython3 0oristitiIlo3ovanEe!)y 1o3+Eem + C:\Xoc+ments and Settin3s\5l+re\test!lo3 Ako 8ismo proverili sadr>aj test!lo3 GajlaP on Ee i)gledati ovako: (7=3-7A-=7 ((:(7:A3<A7> : XE"U@ : Poceta0 )ro3rama (7=3-7A-=7 ((:(7:A3<A(= : N&CO : 'adim nesto (7=3-7A-=7 ((:(7:A3<A(= : YA'&N&@ : A sad +mirem Kako to G(nk#ioni*e: Bi koristimo tri mod(la i) standardne 8i8lioteke 1 os )a interak#ij( sa operativnim sistemomP )lat/orm mod(l )a inGorma#ije o platGormiP odnosno operativnom sistem( i lo33in3 mod(l )a logovan&e inGorma#ija.9#OWEPAT#96< 9test!lo396 else: lo3I/aEl $ os!)ath!Eoin.tandardne 8i8lioteke &astaviti normalno Kako to G(nk#ioni*e: Bi koristimo dr(gi mod(l i) standardne 8i8lioteke pod na)ivom 2arnin3s koja se koristi )a prika)ivanje (po)orenja krajnjem korisnik(.. .levelname6s : %.9Yindo2s96: lo3I/aEl $ os!)ath!Eoin.1o3+Eem +. level $ lo33in3!XE"U@< /ormat $ 9%.os!3etenv.A sad +mirem.asctime6s : %..16 ..'adim nesto.ač(vajte kao 0oristitiIlo3ovanEe!)y : im)ort os< )lat/orm< lo33in3 i/ )lat/orm!)lat/orm. && .6 lo33in3!in/o.6 lo33in3!2arnin3.2 logging mod#l =ta ako ste >eleli da imate neke por(ke koje 8i pomogle ( otklanjanj( gre*aka ili neke va>ne por(ke koje 8i se negde č(valeP tako da mo>ete da proverite kako i *ta va* program pokreEeJradi i da li radi kako ste očekivali? Kako 8i :)adr>ali negde: ove por(ke? 5vo se mo>e postiEi kori*Eenjem lo33in3 mod(la.6!starts2ith. Ako 8roj ver)ije P/t0on1a nije 8arem !P mi smo prika)ali odgovaraj(Ee (po)orenje.9#OWE96< 9test!lo396 )rint.Poceta0 )ro3rama.

hel). sledeEem poglavlj( Eemo pokriti ra)ličite aspekte P/t0on1aP *to Ee malo kompletirati na* p(t kro) P/t0on programiranje. .)lat/orm6 6.e%ime .16 .tandardne 8i8lioteke PrvoP mi proveravamo koji operativni sistem se koristi proverom vraEenog stringa i) mod(la )lat/orm!)lat/orm. Bi koristimo os!)ath!Eoin.pajanjem ova tri delaP mi smo do8ili p(n( loka#ij( datoteke. KonačnoP mi deGini*emo por(ke koje s( namenjene ili otklanjanj( gre*akaP inGorma#ijeP (po)orenja ili čak kritične por(ke.3 3od#li nedelje serije 9ma mnogo vi*e toga da se istra>i ( standardnim 8i8liotekamaP kao *to je de8agovanjeP rad sa op#ijama komandne linije P reg(lar eDpressions i tako dalje. 2ednom kada pokrenete programP mo>ete proveriti ovaj Gajl i mi Eemo )nati *ta se desilo tokom rada programaP iako inGorma#ije nis( prika)ane korisnik( programa. Naj8olji način da dodatno istra>ite standardn( 8i8liotek( je da pročitate Ao(g 7ellmann1ov( odličn( P/t0on mod(l nedelje ili isčitavanjem P/t0on dok(menta#ije. . 1$.a)log da se koristi spe#ijalna G(nk#ijaP a ne sa8iranje stringova je )ato *to Ee ova G(nk#ija da o8e)8editi loka#ij( ( odgovaraj(Eem Gormat(P koji se oček(je od strane operativnog sistema. Ako je ( pitanj( ?indo@sP mi sa)najemo primarni diskP matični Golder i na)iv Gajla gde >elimo da skladi*timo inGorma#ije. . 1$. Prepor(č(je se da pregledate dok(menta#ij( P/t0on standardne 8i8lioteke da 8i do8ili predstav( o svim mod(lima koji s( dost(pni.6 3)a vi*e inGorma#ija pogledajte im)ort )lat/orm. &+ . Bi smo konGig(risali lo33in3 mod(l da pi*e por(ke ( odre<enom Gormat( ( datotek( koj( smo naveli. ovom poglavlj( o8ra<ivali smo neke od G(nk#ionalnosti neki0 mod(la (n(tar P/t0on standardne 8i8lioteke.6 da sastavim ove tri dela i do8ijemo p(tanj( do loka#ije. . Za dr(ge platGormeP tre8a samo da )namo 7ome Golder korisnika i mi do8ijamo p(n( loka#ij( datoteke.

6 G(nk#ij(. Ako >elite da )nate o svim spe#ijalnim metodamaP pogledajte (p(tstvo.a< Rsve ostalo86 P onda samo tre8a da koristimo )ve)di#(P 8a* kao *to smo to radili ( parametrima G(nk#ije: 888 888 = 888 ?(< 888 888 888 . . .6: ret+rn.. Ako mislite o tomeP to je (pravo ono *to P/t0on radi )a list klas(Q Neke korisne pose8ne metode s( navedene ( sledeEoj ta8eli.6 888 broE3res0e ( 888 strin33res0e 9dr+3i detalE 3res0e9 Primetimo da kori*Eenje a< b $ Rne0a e0s)resiEa8 t(mači re)(ltat i)ra)a kao t(ple sa dve vrednosti.Q< a< Pb $ ?=< (< 3< AB a b 3< AB a $ O. 888 de/ daEeIdetalEeI3res0e.. . .ve *to tre8a da (radite je da koristite t(ple. Ako >elite da re)(ltati 8(d( t(mačeni kao . Na primerP ako >elite da koristite 5?0lE+cB opera#ij( indeksiranja )a Ia*( klas( 38a* kao da je koristite )a liste i t(ple6P ondaP sve *to tre8a da (radite jeP da implementirate II3etitemII.2 Pose8ne metode Postoje odre<ene metodeP kao *to s( IIinitII i IIdelII koje imaj( pose8an )načaj ( klasama.1 0granje sa t#pleima Aa li ste ikada po>eleli da mo>ete da do8ijete dve ra)ličite vrednosti i) G(nk#ije? Bo>ete.(< 9dr+3i detalE 3res0e96 888 broE3res0e< strin33res0e $ daEeIdetalEeI3res0e. 1.. . Pose8ni metodi se koriste da imitiraj( pona*anje odre<eni0 (gra<eni0 tipova. Ao sada smo o8radili veEin( ra)ličiti0 aspekata P/t0on1a koje Eete koristiti. ovom poglavlj( Eemo pokriti jo* neke aspekteP kako 8i )aokr(>ili na*e )nanje o P/t0on1(. __str__(self) 1 Po)iva se kada koristimo )rint G(nk#ij( ili str. __init__(self.6 i va* posao je )avr*en.) 1 5va metoda se po)iva 8a* kada se novokreirani o8jekat vraEa )a (potre8(..lično ovomP postoje +- .1 Balo vi*e. 1&. __lt__(self. __del__(self) 1 Po)via se neposredno pre nego *to je o8jekat (ni*ten. drugi) 1 Po)iva se kada se koristi :man&e od: operator 3l6.. b $ Q a< b $ b< a a< b O6 Ho tako<e )nači da je naj8r>i način da se )ameni vrednost dve promenljive ( P/t0on1( je: 1&.alo vi0e..

. __len__(self) 1 Po)iva se kada se koristi (gra<ena len. Lam8da >orme lambda komanda se koristi )a kreiranje novi0 o8jekata G(nk#ije. PaP t( postoji jedna )ačkolji#a.9Xa96 Xa Primetite da je jedna komanda kori*Eena (1mest(P a ne kao pose8an 8lok.0ey $ lambda i : i?9y9B6 )rint. 9ako mo>ete koristiti ovo da 8i prilikom pisanja va* program 8io kra'iP prepor(č(jem i)8egavanje ove preči#eP osim )a prover( gre*akaP (glavnom )8og toga *to Ee 8iti mnogo lak*e da dodate ekstra komand( ako koristite odgovaraj(Ee (vlačenje 8lokova. Kompresovanje lista je idealan )a ovakv( sit(a#ij(.3 =lokovi sačinjeni od samo jedne nared8e Iideli smo da se svaki 8lok nared8i odvaja od ostatka sa sopstvenim nivoom (vlačenja. . .." Kompresovanje lista Kompresovanje lista se koristi da 8i i)gradili nov( list( i) neke veE postojeEe liste. s(*tiniP lambda ()ima parametar praEen samo jednim i)ra)om koji postaje telo G(nk#ije i vrednosti ovog i)ra)a je vrednost koj( nam vraEa ova nova G(nk#ija. Primer 3sač(vajte kao lambda!)y 6: tac0e $ ?J959 : (< 9y9 : 3K< J959 : A< 9y9 : =KB tac0e!sort. kljuc) 1 Po)iva se kada se koristi 5?0lE+cB opera#ija indeksiranja. Ako va* 8lok nared8i sadr>i samo jedn( komand(P onda taj 8lok mo>ete da deGini*ete na istoj linijiP re#imoP (slovne komande ili nered8e petlje. 1&.6 G(nk#ija )a sekven#e o8jekata.tac0e6 9)la): ?J9y9: =< 959: AK< J9y9: 3< 959: (KB Kako to G(nk#ioni*e: Primetimo da sort metoda )a list1(P mo>e imati 0ey parametar koji odre<(je kako se lista sortira 3o8ično mi samo koristimo rast(Ei ili opadaj(Ei redosled6. 1&. 1&. na*em sl(čaj(P mi >elimo da (radimo prilago<eno sortiranjeP i )a to 8i nam 8ilo potre8no da napi*emo G(nk#ij(P ali (mesto pisanja pose8nog de/ 8loka G(nk#ije koja 8i se koristila samo na tom jednom mest(P mi koristimo lambda ekspresij( da 8i kreirali t( nov( G(nk#ij(. pose8ni metodi )a sve operatere 3[P ^P itd6. Pretpostavimo da imate list( 8rojeva i >elite da do8ijete odgovaraj(E( list( sa svim 8rojevima pomno>enim sa 2P samo ako je 8roj veEi od 2. __getitem__(self.ledeEi primer 8i tre8alo to da malo pojasni: 888 :astava $ Tr+e 888 i/ :astava: )rint. Primer 3sač(vati kao 0om)resovanEeIlista!)y 6: )rvalista $ ?(< 3< AB dr+3alista $ ?( P i /or i in )rvalista i/ i 8 (B +1 .1 Balo vi*e. .

)rint. 1&. 5vo je korisno kada tre8a poslati promenljivi 8roj arg(menata )a G(nk#ij(. 888 de/ s+maste)ena..i< ste)en6 ret+rn totalno 888 s+maste)ena.)ython3 0om)resovanEeIlista!)y ?>< QB Kako to G(nk#ioni*e: 5vde smo i)gradili nov( list( navodeEi koj( manip(la#ij( >elimo da (radimo 3 (Pi 6P (koliko je neki (slov )adovoljen 3 i/ i 8 ( 6.ste)en< Par3+menti6: 999Vraca s+m+ svih ar3+menata ste)enovanih na s)eciEalni broE999 totalno $ 7 /or i in ar3+menti: totalno *$ )o2. 888 moEalista $ ?9stvar9B 888 assert len.& assert nared8a assert nared8a se koristi da 8i se potvrdilo da li je ne*to istina.(< =76 =77 Zato *to imamo preGiks P ispred ar3+menti promenljiveP svi dodatni arg(menti koje dajemo G(nk#iji se č(vaj( ( ar3+menti kao t(ple. 9majte na (m( da originalna lista ostaje nepromenjena.$ (lanje t#ple i rečnika >#nkcijama Postoji pose8an način da G(nk#ija prima parametare ( vid( t(plea ili rečnika koristeEi o)nake P i PP kao preGiks.moEalista6 8$ = 888 moEalista!)o)..6 9stvar9 888 moEalista ?B +2 . 1&.(< 3< A6 (O 888 s+maste)ena.1 Balo vi*e.dr+3alista6 9)la): . Ako assert komanda ne pro<eP AssertionError je podign(t. Ako seP (meso PP koristi PP preGiksP dodatni parametri Ee se smatrati kao da s( klj(čJvrednost parovi (n(tar rečnika. Prednost kori*Eenja kompresovanja lista je da smanj(je količin( op*te namenskog koda potre8nog prilikom pisanja petlje koja 8i nam koristila da o8radimo svaki elemenat i) liste i da 8i ga sač(vala ( novoj listi. Na primerP ako ste sig(rni da Eete imati 8arem jedan element ( listi koj( koristiteP a >elite da proveriteP i da podignete gre*k( ako to nije istinaP onda je assert komanda idealna ( toj sit(a#iji.

=ta ako ste >eleli da odredite string ( dve linije? 2edan način je da se koristite trostr(ke #itateP kao *to je prika)ano ranijeP ili mo>ete da koristite es#ape seL(en#e )a novi red karaktera 1 \n koji Ee da (ka>e na početak nove linije.e%ime 5vde smo pokrili jo* neke karakteristike P/t0on1aP a ipak nismo pokrili 8a* sve G(nk#ionalnosti koje postoje.vek koristite .. Primer je r.@ :scape (eH#ences PretpostavimoP >elite da imate string koji tre8a da sadr>i )nak )a jedan #itat 3 T 6.1 >a8 String Ako vam je potre8no da navedete neki string ( kom se ne )a0teva nikakva pose8na o8radaP kao *to s( es#ape seL(en#eP onda ono *to Iam je potre8no je da taj string navedete kao Ra$ String tj. . Ii tre8a da odredite taj jedan #itat kao \9 1 primetite o8rn(t( kos( #rt(. . kao preGiks r ili ' pre stringa. Na primer: . AakleP vi Eete morati daP na neki načinP (ka>ete da ovaj )nak )a #itat ne (ka)(je na kraj stringa. .ada mo>ete da napi*ete ovaj string kao 9Yhat\9s yo+r nameG9. 1&. Primer je Ovo Ee )rva liniEa\nOvo Ee dr+3a liniEa . Ho je dovoljno da počnete sa i)radom oni0 programa koji0 >elite. Postoji mnogo vi*e es#ape seL(en#eP ali sam ovde pomen(o samo one najkorisnije ( rad(./. veEini sl(čajevaP 8olje je (0vati i)()etkeP ili r(kovati sa gre*kama ili prika)ati por(k( o gre*#i korisnik(P a )atim i)aEi i) programa.moEalista6 8$ = AssertionError assert komand( tre8a promi*ljeno koristi.. 2o* jedna korisna es#ape seL(en#e je po)natija kao ta8 1 \t .. Napomena za korisnike Re%u-ar (?pression'a . 1&.tring kada se 8avite sa . je ekvivalentno sa: .< line =< in Rmod+le8 assert len.lično tomeP morate da koristite es#ape seL(en#e )a kori*Eenje navodnika (n(tar navodnika.1 Balo vi*e. 888 assert len. 5vo se mo>e (raditi () pomoE onoga *to se )ove escape se@uence. Ar(gi način navo<enja ovakvi0 spe#iGični0 stringova 8i 8io . 1.Ovo Ee )rva recenica! \ Ovo Ee dr+3a recenica!.most recent call last6: Cile .R)yshellD=O8.A .Lna0 :a novi red se o:nacava \n.moEalista6 8$ = Tracebac0 . Ne mo>ete napisati 9Yhat9s yo+r nameG9 P jer Ee P/t0on 8iti )8(njeni 1 gde string počinjeP a gde se )avr*ava. sledeEem poglavlj( Eemo ra)govarati o tome kako da (8(d(Ee istra>(jete P/t0on. .eg(lar FDpression. . Na primerP povratna reGeren#a mo>e da se po)iva 9\\=9 ili r9\=9 . Hako<eP morate da (ka>ete na sam( o8rn(t( kos( #rt( koristeEi es#ape seL(en#e \\ . +! .Ovo Ee )rva recenica! Ovo Ee dr+3a recenica.a@ . Kako Eete načiniti ovaj string? Na primerP string Yhat9s yo+r nameG .Yhat9s yo+r nameG. 9nače Ee vam tre8ati mnogo o8rn(ti0 kosi0 #rta. 2edna stvar koj( tre8a napomen(ti na ovom mest( je da je ( string(P jedna o8rn(ta kosa #rta na kraj( linije o)načava da se string nastavlja ( sledeEem red(P ali ne i da je dodat novi red. P odnosno kori*Eenjem navodnika. Be<(timP ( ovom tren(tk(P mi smo pokrili veEin( onoga *to Eete ikada koristiti ( praksi.

Neka to 8(de adresarP ( kojem mo>ete da pregledateP dodajeteP menjateP 8ri*ete ili tra>ite svoje kontakteP kao *to s( prijateljiP porodi#a i kolege i nji0ove inGorma#ijeP kao *to s( imejl adresa iJili 8roj teleGona.1 Primer koda Naj8olji način da se na(či programski je)ik je da se pi*e mnogo koda i pročitao mnogo koda: • P/t0on Mook8ook je i)()etno vredna )8irka re#epata i saveta o tome kako da se re*e odre<ene vrste pro8lema koristeEi P/t0on. 1@.aditi i Ne raditi Zvanična P/t0on pitanja i odgovori Norvig1ov spisak retko postavljani0 pitanja P/t0on 9ntervie@ X m A . Aetalji moraj( 8iti č(vani negdeP da 8i se mogli (potre8ljavati i kasnije 38ilo kada6. Ierovatno ste napravili neke programe kako 8i ste ispro8avali ra)ličite stvari i da i)o*trite svoje ve*tine. Ako Iam je re*avanje )adatka i pravljenje ovog programa 8ilo lakoP evo jo* jednog: 9mplementirajte komand( )amene . Savet 1Nemojte da čitte@ a da niste ve$ pokuša-i da rešite pro -em2 Kreirajte klas( koja Ee predstavljati inGorma#ije o oso8i.ada se postavlja pitanje: :=ta dalje?:. Predlo>io 8i0 da se po)a8avite ovim pro8lemom: Napravite svoj program koji Ee se i)vr*avati p(tem komandne linije. Ako ipak >elite (p(tstva o tome kako da nastaviteP onda evo malog saveta. Ho je prilično lako ako )ami*ljate toP ( okvir( svi0 oni0 ra)ni0 stvari koje smo o8ja*njavali do sada. 2ednom kada (spete da (radite ovoP mo>ete )a se8e da tvrdite da ste P/t0on programer.3 ?#torijali • A@aretekYs sveo8(0vatni spisak P/t0on t(torijala +$ . A tadaP ( istom tren(P mi po*aljite por(k( )a0valnostiP )a ov( lep( knjig( e16 3por(ka ide originalnom a(tor(P a ne prevodio#( :p 6.2 Pitanja i odgovori • • • • • Zvanični P/t0on . 5va stavka je pod :mora da se pročita: )a svakog P/t0on korisnika. Koristite (gra<ene metode rečnika )a dodavanjeP 8risanje i menjanje inGorma#ija o oso8ama. Nakon togaP ( nastavk( knjige s( neki od načina da nastavite Ia* p(t kro) P/t0on: 1@. . 5va komanda Ee )ameniti jedan string sa dr(gim ( listi datoteka koje s( joj prilo>ene.1& Kojim p(tem dalje? 1/ =oji3 pute3 daljeA Ako ste pa>ljivo do sada čitali ov( knjig(P i praktikovali pisanje p(no programaP onda mora da Iam je veE postalo prijatno i (godno da radite sa P/t0on1om. 5vaj dr(gi korak je op#ionP ali se prepor(č(je.ta#k5verGlo@ pitanja ( ve)i sa p/t0on1om 1@. Ako niste to veE pok(*aliP )najte: to vam tre8a. • P/t0on Bod(le oG t0e ?eek je jo* jedno odlično :mora da se pročita: (p(tstvo )a P/t0on1 ove standardne 8i8lioteke. Koristite mod(l Pi#kle da 8i trajno skladi*tili o8jekte na čvrstom disk(. Hako<eP molimo Ias da ra)mislite o k(povini *tampanog primerka )a podr*k( daljem ra)voj( ove knjige. Nared8a )amene mo>e 8iti jednostavna ili soGisti#iranaP kako god Ii >eliteP od proste )amene stringaP do potrage )a *a8lonima 3reg(lar eDpressions6. Koristite rečnik )a skladi*tenje o8jekata oso8a sa klj(čem koji je nji0ovo ime.

org PKSM# 1 5vo je ve)a P/t0on1a sa KHK[ toolkit koji je temelj na kome se gradi KN5BF. Dideo • P/Iideo 1@. Za početakP pročitajte @DP/t0on t(torial. Na>alostP ne postoji jedan standardni K. Xt je i)()etno jednostavan )a kori*Eenje i vrlo moEanP pose8no )8og Xt Aesigner1a i neverovatne Xt dok(menta#ije.' mo>ete da ga koristiti )a kreiranje ne1KP" soGtvera. Počev*i sa Xt $. Bo>ete kreirati 8esplatanP kao i vlasnički soGtver pomoE( @DP/t0on1a. Klade graGički interGejs di)ajner je ne)ao8ila)an.alata Za vi*e op#ijaP pogledajte K(iProgramming @iki page at t0e oGGi#ial p/t0on @e8site.9 alat )a P/t0on. Za početakP pročitajte P/Xt t(torial ili P/Xt 8ook.1& Kojim p(tem dalje? 1@. P/Xt je 8esplatanP ako >elite da napravite program otvorenog koda 3KP" li#en#a6P a morate da ga k(pite ako >elite da napravite vlasnički soGtver )atvorenog koda. Aok(menta#ija se jo* (vek po8olj*ava.& 0nstaliranje 8i8lioteka Postoji veliki 8roj P/t0on 8i8lioteka otvorenog koda ( P/t0on Pa#kage 9ndeD koje mo>ete koristiti ( svojim programima. 1@. Prvi Gaktor je da li ste spremni da +' . Bo>ete da napravite kako slo8odanP tako i vlasnički soGtver koristeEi KHK[. Ie)e 3Bindings6 s( ono *to nam omog(Eava da pi*emo programe ( P/t0on1( i koristimo 8i8lioteke koje s( pisane ( M ili M[[ ili nekim dr(gim je)i#ima. Aa 8iste instalirali i koristili ove 8i8liotekeP mo>ete da koristite pip.9 alat.9 koristeEi P/t0on: #ivK 1 0ttp:JJkiv/. 5vo se mo>e (raditi pomoE( K./. 5sig(rajte se tako *to Eete da (radite svoj domaEi )adatak i prvo sami pok(*ati re*avanje pro8lema. PKTt 1 5vo je ve)a P/t0on1a sa Xt toolkit1om koji je temelj na kojem se i)gradio KAF.@ Gra>ički so>tver Pretpostavimo da >elite da kreirate sopstvene graGičke programe pomoE( P/t0on1a. KHK[ ima mnogo )ačkolji#a ( (potre8iP ali kada postanete do8ro (po)nati sa njimP mo>ete 8r)o kreirati K.9 di)ajniranje kao *to s( .9 aplika#ije.PF 3.1 >e)i3e BU. Aa 8i koristili @DP/t0on mora da postoji jaka volja )a njegovim (čenjem. P?PKt0on 1 5vo je ve)a P/t0on1a sa @D?idgets toolkit1om. Postoji mnogo 9AF1a na raspolaganj( )a @DP/t0on koji sadr>e i alate )a K. 1/." <isk#sija Ako ste )aglavljeni sa nekim P/t0on pro8lemomP i ne )nate koga da pitateP onda je p/t0on1t(tor list naj8olje mesto da postavite pitanje.taniYs P/t0on Fditor6 i @DKlade K.$ Desti Ako >elite da sa)nate *ta je najnovije ( svet( P/t0on1aP mo>ete da pratite 5GGi#ial P/t0on Planet. Za početakP pročitajte P/KHK t(torial. Be<(timP on je veoma prenosiv i radi na "in(D1/P ?indo@s1/P Ba#1/ i jo* ( mnogim em8edded platGormama. 1@. 1@.9 3graGički korisnički interGejs6 8i8lioteka i nji0ovi0 ve)a sa P/t0on1om. KHK[ do8ro radi na "in(D1/ ali port )a ?indo@s je nekompletan. Predla>em da i)a8erete jedan od gore navedeni0 alata ( )avisnosti od sit(a#ije ( kojoj s( Iam potre8ni. Postoji mnogo i)8ora )a i)rad( K.

Ar(gi Gaktor je da li >elite da se program pokreEe samo na ?indo@s1( ili Ba#1( i "in(D1( ili je pisan )a sve na8rojane.1& Kojim p(tem dalje? platite da koristite 8ilo koji od K.#ript1a6 da pi*ete programe )a @e8 pretra>ivače 3:AjaD:6.a%ne implementacije 58ično postoje dva dela programski0 je)ika 1 sam je)ik i soGtver.ada ste strastveni P/t0on korisnik i vi ste 8e) s(mnje spremani da re*avate mnoge pro8leme koristeEi P/t0on.vaka od ovi0 implementa#ija ima svoje spe#ijali)ovane o8lasti ( kojima s( korisne. 1@. 2e)ik je kako pi*ete ne*to. Na)iva se MP/t0on jer je napisan ( M je)ik( i on je Classical Python interpreter.ta#kless P/t0on 1 9mplementa#ija P/t0on1a koja je spe#ijali)ovana )a t0read18ased po8olj*anje perGormansi.NFH platGormi. Ho )nači da mo>ete da koristite 2ava 8i8lioteke i klase ( P/t0on je)ik( i o8rn(to. 9ronP/t0on 1 9mplementa#ija P/t0on1a koja radi na . . K(#0ling • 4(n#tional programming #0apter in _Aive 9nto P/t0onY 8ook • 4(n#tional Programming @it0 P/t0on presentation 1@. . Postoje i mnogi dr(gi pop(t M"P/t0on 1 implementa#ija napisana ( Mommon "isp1( i 9ronBonke/ koji je port 9ronP/t0on1a prilago<en da radi preko 2ava. AakleP počniteQ +6 .#ript interpreteraP *to 8i moglo da )nači da mo>ete da koristite P/t0on 3(mesto 2ava.e%ime .oGtver je ono 3to )apravo pokreEe na*e programe.11 . HreEi GaktorP ako je oda8ran "in(DP je da li je Ia* program namenjen KAF ili KN5BF korisni#ima.9 alata. Bi smo pokretali na*e programe kori*Eenjem soGtvera CPython. . P/P/ 1 9mplementa#ija P/t0on1a napisana ( P/t0on1(Q 5vo je istra>ivački projekat da 8i se 8r)o i lako po8olj*avao interpreter jer je sam interpreter napisan ( dinamičnom je)ik( 3)a ra)lik( od statični0 je)i#ika kao *to s( MP 2ava ili MS ( tri gornje implementa#ije6.A . 1@. Postoji i dr(gi soGtver koji mo>e da pokreEe Ia*e P/t0on programe: 2/t0on 1 9mplementa#ija P/t0on1a koja radi na 2ava platGormi.1B E#nkcionalno programiranje 9%a napredne čitaoce. Bo>ete početi sa a(tomati)a#ijom rač(nara kako 8i ste (činiti ra)ličite vrste pret0odno ne)amislivi0 stvari ili napisati sopstvene igre i mnogoP mnogo vi*e.ada smo do*li do kraja ove knjigeP aliP kako ka>(P ovo &e po-etak kra&a.NFH 8i8lioteke i klase ( P/t0on je)ik( i o8rn(to. Ho )nači da mo>ete da koristite .B. Za detaljniji i sveo8(0vatn( anali)(P vidi stran( 26 H0e P/t0on PapersP Iol(me !P 9ss(e 1. Kada počnete da pi*ete veEe programeP deGinitivno tre8a da na(čite vi*e o G(nk#ionalnom prist(p( programiranj( nas(prot prist(p( programiranj( )asnovanom na klasama koje smo na(čili ( poglaljvlj( o o8jektno1orijentisanom programiranj(: • 4(n#tional Programming 7o@to 8/ A. .

J"in(D operativnim sistemima. Njen prateEi proi)vodP H0(nder8ird je odličan klijent )a elektronsk( po*t(P koji Ee da (čini da čitate Ia*e por(ka 8r)inom p(#kanja prstima. kernelP koji se koristi ( KN. 4"5. Bono 1 Ho je open so(r#e implementa#ija Bi#rosoGt .8(nt( nije potp(no slo8odan soGtvere sadr>i vlasničke drajvereP Girm@are i aplika#ije.8(nt( 1 Ho je distri8(#ija vo<ena sna>nom )ajedni#omP pod pokroviteljstvom tvrtke Manoni#alP i to je jedna od najpop(larniji0 "in(ks distri8(#ija danas. I"M Pla/er 1 5vo je video plejer koji mo>e da reprod(k(je 8ilo *ta od AivC do BP! pa 5gg preko IMAa i AIAa pa nadalje. 5n radi na skoro svim platGormama i potp(no je GreeP li8re and open so(r#e soGt@are. "in(D kernel je stvorio "in(s Horvalds jo* kad je 8io st(dent. Aa 8iste do8ili najnovije vesti i) 4"5. AaP to je tačno 1 Apa#0e :vo)i: vi*e sajtova od svi0 konk(renata 3(klj(č(j(Ei i Bi#rosoGt 99.1aP da 8i0 Iam dao idej( o spektr( stvari koje )ajedni#a deljenjem i gra<enjem mo>e da napravi: "in(D 1 5vo je 4"5.. "i8re5GGi#e 1 5vo je odličanP vo<en i ra)vijen od strane )ajedni#eP kan#elarijski paket sa kojim do8ijateP i)me<( ostalogP programe )a pisanjeP pre)enta#ijeP ta8elarne prorač(ne i #rtanje. . Android je )asnovan na "in(ks(. 5n omog(Eava . Apa#0e @e8 server 1 5vo je pop(laran open so(r#e ?e8 server. 5na vam omog(Eava da instalirate o8ilje 4"5.a njim čak mo>ete sa lakoEom da otvorite i (re<(jete B. Naj8olje od svegaP mo>ete samo da restart(jete rač(nar i pokren(ti KN.NFH aplika#ijama da 8(d( kreirane i pokren(te na KN.. je 8esplatan )a kori*EenjeP modiGika#ij( i redistri8(#ij(..P kao *to s( Perl je)ikP P7P je)ikP Ar(pal sistem )a (pravljanje sadr>ajem )a sajtoveP Postgre. Bo)illa 4ireGoD 1 5vo je na&bol&i ve8 pretra>ivač.J"in(D sa MA1aQ 5vo vam potp(no omog(Eava da ispro8ate novi operativni sistem pre nego *to se odl(čite da ga instalirate na va*em rač(nar(.oGt@are 3. i mnogim dr(gim platGormama.1a koji je na raspolaganj( i sve to na jedan način koji je lak )a kori*Eenje i lak )a instaliranje.J"in(DP ?indo@sP 4reeB.1+ 4"5.oGtver 5tvorenog Koda6P (kratkoP 4"5.. svetaP pogledajte sledeEe sajtove: • lin(D.. Kon#ept eksten)ije omog(Eava Iam da koristite 8ilo kakav pl(gin 3dodatak6... 5n je neverovatno 8r) i do8ija odlične kritike )a svoje osetljive i impresivne karakteristike. jer ste svo vreme koristili PKt0onP a P/t0on je soGtver otvorenog kodaQ Fvo neki0 primera 4"5.: + ...6 )ajedno. trkačka igraP KAevelop 9AFP Cine 1 program )a reprod(k#ij( video sadr>ajaP I9B (rednikP X(anta[ (rednikP Bans0ee a(dio plejerP K9BP program )a (re<ivanje slika . Be<(timP ..X" server 8a)e podatakaP H5. 5vaj spisak mo>e da ide ( nedogled. . se )asniva na kon#ept( )ajedni#eP koja se i sama )asniva na kon#ept( deljenjaP a pose8no ra)mene )nanja.. Bilo koji sajt koji posetite ( dana*nje vreme (glavnom Ee 8iti pokren(t na "in(ks(. stvariP to je na&popularni&i @e8 server na planetiQ 5n pokreEe skoro vi*e od polovine sajtova. ?ord i B. ko ka>e da open so(r#e nije )a8avan? e16 5vaj spisak je samo namenjen da vam dati kratak idej( 1 postoji mnogo vi*e odlični0 4"5..M.. Ako ste pročitali ov( knjig(P onda ste veE (po)nati sa 4"5.o(r#e .#om • "in(DHoda/ • Ne@s4orge • Aistro?at#0 Posetite sledeEe sajtove )a vi*e inGorma#ija o 4"5. Po@erPoint Gajlove. .. 11 !L"SS 4reeJ"i8re and 5pen .lo8odanJBesplatan i .NFH platGorme.AP Ba# 5.

1+ 4"5.8(nt(Q • .. • Kit7(8 FDplore • 5BKQ ..1aQ +& .o(r#e4orge • 4res0Beat AakleP samo napred i istra>(jte ogromanP slo8odan i otvoren svet 4"5.

4 a#tor# 0ttp:JJ@@@.Molop0on 24 Colop'on . 2B. dok(ment da daje 8oj( i stil 7HB" strani#ama. . Koristio sam Iim )a (re<ivanje )a0valj(j(Ei Iie@.o(r#e eksten)iji )a 4ireGoD koja se integri*e sa Iim1om. Hako<e sam napisao gr(8 leksički anali)atorP ( P/t0on1( naravnoP koji mi je a(tomatski o8e)8e<ivao :8ojenje: sintakse )a sve programe i) knjige. Koristio sam standardni C.1 .koro sav soGtver koji sam koristio ( stvaranj( ove knjige je 4"5." st/les0eets koji dola)i sa instala#ijom 4edora More ! "in(D1a.#omJa8o(tJ ++ . Konačno sam otkrio CFma#s i prepisao sam knjig( od n(le ( Ao#Book CB" 3opet6P nakon čega sam i odl(čio da je ovaj Gormat d(goročno re*enje. 2B.. AakleP ja sam pre8a#io na 5pen5GGi#e koji je pr(>io odličan nivo kontrole )a Gormatiranje kao i generisanje PA41aP ali je proi)vodio vrlo :prljav: 7HB" i) dok(menta. .3 (ada Koristim IimP Pando#P i Ba# 5. Prvo8itno sam koristio program K?ord )a pisanje knjige 3kao *to je o8ja*njeno ( poglavlj( :"ek#ija i) istorije: ( predgovor(6..2..s@aroop#0. Kako godP napisao sam M. 2B. *estom i)danj(P odl(čio sam da (potre8ljavam X(anta[ )a (re<ivanje.2 ?inejd/erske godine Kasnije sam pre*ao na Ao#Book CB" koristeEi Kate ali sam (video da je to s(vi*e )amorno. C.. 2B. Za ovo sedmo i)danjeP ja koristim Bedia?iki kao osnov( mog pode*avanja . prvom na#rt( ove knjigeP ja sam koristio .ada knjig( mog( (re<ivati direktno na mre>i i svi čitao#i mog( direktno da čitaj(Ji)meneJra)govaraj( ( okvir( @iki sajta.ed 7at +."in(DP kao temelj moji0 pode*avanjaP a sve do *estog na#rtaP koristio sam 4edora More ! "in(D kao osnov( mog rada.a-anje knjige .

1◦ -+ mar 2--$ ◦ Ii*e korek#ija gre*aka ( k(#anj(P )a0valj(j(Ei mnogim ent()ijastima i čitao#ima.+◦ -$ 2(l 2--&P rad je jo* (vek ( tok( ◦ 5>ivljavanje posle perioda od !P' godineQ ◦ Korek#ija na P/t0on !.. 1. 2-12 ◦ Prepisana ( Pando# Gormat P )a0valj(j(Ei mojoj >eniP koji je (radila veEin( konver)ije i) Bedia@iki Gormata. Knjiga je po8olj*ana mnogo 1 mnogo je (jednačenija i čitljivija. ◦ Pojednostavljivanje tekstaP (klanjanje ne8itni0 delova kao *to s( nonlo#al i metaklase 1.+! ◦ 2' 2an 2--$ ◦ Aodato kori*Eenje 9A"F1a i spe#iGične stvari ( ?indo@s1( 1-- • • • • • • • • • • .++ ◦ 22 2an 2--$ ◦ Aodato je novo poglavlje o mod(lima. Bnogo novi0 primera.+ ◦ 1! 2an 2--$ ◦ 2o* jedan potp(no prepisan na#rtP ( Ao#Book CB" 3ponovo6.21 9storija revi)ija 21 -storija revi)ija • 2. -.12 ◦ 16 Bar 2--$ ◦ Ne*to je dodatoP ne*to je ispravljeno.2◦ 1! 2an 2--' ◦ Kompletan prepis kori*Eenjem X(anta[ na 4edora More ! sa mnogo ispravki i dop(na. 1. -. Prepisao sa Ao#Book od n(le.+& ◦ 16 2an 2--$ ◦ Napisao P/t0on skript( i M.1' ◦ 2& Bar 2--$ ◦ Banje revi)ije 1. Aodati detalji o promenljivom 8roj( arg(menata ( G(nk#ijama. -.-◦ -& Bar 2--$ ◦ Nakon ogromne povratne inGorma#ije i s(gestije od čitala#aP ja sam napravio )načajne i)mene ( sadr>aj( () korek#ije gre*aka.5kt. 1.◦ 2. st/les0eet da po8olj*am C7HB" i)la)P (klj(č(j(Ei gr(81 ali1G(nk#ionalan leksički anali)ator )a a(tomatsko isti#anje sintakse slično Iim1( prilikom listanja programa.◦ Prepisana koristeEi Bedia?iki 3opet6 1. -.

6◦ 21 novem8ar 2--! ◦ Potp(no prera<ena i pro*irena.+1 ◦ !. -. -.2◦ 2. -.1◦ 1$ novem8ar 2--! ◦ 9ni#ijalni na#rt kori*Eenjem K@ord1a. • • • • • • 1-1 .+◦ 1& de# 2--! ◦ Aodata jo* 2 poglavlja.de# 2--! ◦ 9spravljeno gre*ke ( k(#anj(. 5pen5GGi#e Gormat sa revi)ijama.novem8ar 2--! ◦ Pretvoreno ( Ao#Book CB" sa CFma#s.21 9storija revi)ija • -.novem8ar 2--! ◦ 9spravljena neke gre*ke ( k(#anj( i gre*ke ( knji)i. Po8olj*ane mnoge teme.+2 ◦ -' 2an 2--$ ◦ Promene ( nekoliko primera. -. -. -.1' ◦ 2.

p/#n. 2asanP kon#i)an i sasvim dovoljan.odrigov je prevod dost(pan na 0ttp:JJ@@@. Posle ovakvog sopstvenog isk(stva sa ovom knjigomP mislio sam da 8i neki dr(gi lj(di i) moje )emlje mogliP tako<eP da imaj( neke koristi od ove knjige.2 =ra%ilski Port#galski Postoje dva prevoda: . 5vaj prevod je dost(pan na 0ttp:JJ@@@. .am(elovo prevod je dost(pan na aprendendop/t0on. P/t0on sam na(čio samo pola godine ranijeP ali kao *to mo>ete da viditeP on je )aista lako ra)(mljivP jednostavan )a kori*Eenje i prod(ktivan.orgJnotesJP/t0onVpt8r:9ndi#e. 2(an . Boje tren(tno interesovanje je istra>ivanje sin0roni)a#ijeP #0annel estimation i m(lti(ser dete#tion oG m(lti#arrier MABA sistema. Ako planirate da )apočnete nov prevodP pročitajte kako da prevedete.#om6 je volontirao da prevede knjig( na Katalonski.#om6 je volonterski preveo knjig( na Kineski je)ik.net )a vi*e inGroma#ija kliknite ovde. Ba* kao *to je napisano ( . :Zagrljaj Pitona: je 8io moj t(torijal )a svet 1-2 .arata#aRgmail.1 Arapski 9spod je link )a arapsk( ver)ij(.s@aroop#0.@aroop1ovoj knji)i: :Ho je moj omiljeni programski je)ik sada:.0en 3orionVvalR16!. Prevod je ( tok(P a 8io je pris(tan ( erst@0ile @iki.#om6P napravio je prvi Bra)ilski Port(galski prevod ove knjige kada je P/t0on 8io ( 2. mojoj )emlji postoje dva )vanična je)ika.!.am(el Aias Neto 3sam(el. Kineski Fvo je kineska ver)ija na 0ttp:JJ@@@. 22.#om6 je volonterski preveo knjig( na Bra)ilsko Port(galski. .orgJnotesJP/t0onV#n:Ha8leVoGVMontents. Pre i)vesnog vremena mi je 8ilo potre8no da na(čim kako da programiram ( P/t0on1(P pa je .odrigo Amaral 3rodrigoamaralRgmail. Ali )nanje Fngleskog je)ika mo>e da 8(de prepreka.3 Katalonski Boises Kome) 3moisesgome)gironRgmail.@aroop1ov rad )aista posl(>io.22 Prevodi 22 Prevodi Postoje mnogo prevoda ove knjigeP dost(pne na ra)ličitim lj(dskim je)i#imaP )a0valj(j(Ei mno*tv( ne(morni0 volonteraQ Ako >elite da pomognete sa ovim prevodimaP pogledajte list( volontera i je)ika ispod i odl(čite da li >elite da )apočnete novi prevod ili da pr(>ite pomoE ( postojeEim prevodilačkim projektima. . PaP )a*to da ne pok(*am da je prevedem? 9 to sam i (radio )a pret0odn( ver)ij( knjige.s@aroop#0. 22. Ba* ono *to mi je tre8alo. P/t0on je moj glavni programski je)ik )a svakodnevne sim(la#ije i istra>ivački posaoP () pomoE P/t0on N(meri#1a. Za0valj(j(Ei As0raG Ali K0alaG na prevo<enj( knjigeP mo>ete da pročitate #el( knjig( na internet( ovde P ili mo>ete da je pre()mete sa so(r#eGorge. 2a sam i)a8rao Katalonski je)ik pod pretpostavkom da Ee neko dr(gi prevesti na vi*e rasprostranjen U =panski. 2a sam na postdiplomskim st(dijama na ?ireless Hele#omm(ni#ation Krad(ate . 22.#0oolP Beijing .orgJp/t0onpF'p+MpA&pF pBApB4pF6p&+p&BpF'p&6p .' ver)iji.. 22. Boisns Kome) 1 2a sam programer i nastavnik programiranja 3o8ično )a lj(de 8e) ikakvog pret0odnog isk(stva6.niversit/ oG He#0nolog/P M0ina P. .

8erlios. Nije previ*e d(gačkaP ali eGikasno pokriva skoro sve va>ne stvari ( P/t0on1(. Nisam 8a* (po)nat sa K.a(6 je volonterski preveo knjig( na 4ran#(ski. Keneralno volim dinamičn( prirod( je)ika kao *to s( Pajton i .(8iP jer mi takva nji0ova priroda omog(Eava da radim stvari koje nis( mog(Ee ( mnogim statičkim je)i#imaP kao *to je npr 2ava. Zanimljiva karakteristika ovog prevoda je da on tako<e sadr>i i*vornu i*vr3nu Python datoteku na 8ineskom &e*ikuP rame () rame sa originalnim P/t0on i)vorom. Zato namenj(jem svoj prevod poten#ijalnim milionima P/t0on korisnika ( Kini. 2a sam tra>io nek( vrst( (voda ( programiranjeP koji odgovara (čenj( kompletnog nepo)navao#a programiranja. )0p/ 3predstavlja 3Z.google. Pose8no anali)a i konver)ija teksta je veoma laka ( P/t0on1(. Naleteo sam na :Zagrljaj Pitona: kao prelep( (darn( tačk( kako )a početnikeP tako i )a isk(sne programere.$ Eranc#ski Kregor/ 3#o(liDRo)Gor#es.niversit/ oG 7eidel8ergP Kerman/.adim kao in>enjer net@ork Girm@are1a ( Aelta Net@ork1(P a tako<e sam saradnik H(r8oKears @e8 Grame@ork1a.0engeleinatRgmail.#omJpJ)0p/J@ikiJB/te5GZ0p/. 5na je dost(pna na 0ttp:JJ#ode.9 kompletima alataP jer je veEina moji0 programa s( @e8 aplika#ijeP gde se korisnički interGejs gradi kori*Eenjem 2ave. Najnovija ver)ija na Hradi#ionalnom Kineskom je)ik( tako<e sadr>i i i)vorni kod i)vr*nog P/t0on1 a na Kineskom je)ik(P *to je postign(to od strane mog novog T)0p/T 3P/t0on na Kineskom6 projekta 3počeo Avg(sta 2-.orgJnotesJP/t0onVGr:Ha8leVdesVBatipM!pA&res.?P ili )ipp/6 gradi sloj )a P/t0on 3la/er6 da prevodi ili vr*i interak#ij( sa P/t0on1om na Kineskom 3Hradi#ionalnim ili Pojednostavljenim6.de.& Iemački "(t) 7orn 3l(t). 22. %ut* Aorn ka>e: 2a imam !2 godine i ima diplom( i) matematike sa .22 Prevodi P/t0on1a.#om6 i M0ristop0 Z@ers#0ke 3#itoRonline." ?radicionalni Kineski 4red "in 3gasolinRgmail. Hren(tno pok(*avam da vi*e koristim G(nk#ionalno programiranje ( P/t0on1( i generatore.s@aroop#0. Na*ao 1-! . 22. Hren(tno radim kao soGtverski in>enjer na javno1Ginansiranom projekt( i)gradnje @e8 portala )a sve stvari ve)ane )a kompj(terske na(ke ( Nemačkoj. Ured :in 1 . Kao propovednik P/t0on1a 3:1p6P tre8alo mi je malo materijala )a promo#ij( P/t0on je)ika.de6 s( volonterski preveli knjig( na Nemački.#om6 je volontirao da prevede knjig( na Hradi#ionalni Kineski.de6P Bernd 7engelein 38ernd.(8i1jaP 8io sam veoma impresioniran sa (potre8om 8lokova ( ovom je)ik(. Klavni je)ik koji koristim ( svojoj proGesiji je 2avaP aliP ( po)adiniP se tr(dim da (radim *to je vi*e mog(Ee ( P/t0on1(.#om.7. 5vaj projekat je (glavnom namenjen )a o8ra)ovanje. Prevod je prvo8itno )asnovan na pojednostavljenom Kineskom je)ik(P i (skoro s( (ra<ene mnoge korek#ije () napor da se stane rame1()1rame sa tren(tnom @iki ver)ijomP kako 8i se po8olj*ao kvalitet čitanja. :Zagrljaj Pitona: ra)ra<(je osnove P/t0on1a sa pri0vatljivom d(>inom. Nji0ov prevod se nala)i na 0ttp:JJa8op1german. 5va knjiga je jasan i eGikasan p(t koji vas vodi ( svet P/t0on1a ( najkraEem mog(Eem rok(.0ornRgmD. 22. Bislim da 8i :Zagrljaj Pitona: tre8alo da 8(de naj8olja prepor(ka )a početnikeP kao nji0ov prvi P/t0on t(torial. Posle kratkog kori*Eenja .1me6. KZrard "a8adie 3Palmipede6 je )avr*io sa prevo<enjem knjige na 4ran#(skiP ona počinje sa 0ttp:JJ@@@.

mirrorRgmail.it6 s( se do8rovoljno prijavili da preved( knjig( na 9talijanski je)ik. Bi programiramo ( P/t0on1( veE oko sedam godinaP mi imamo isk(stvo ( rad( na "in(D platGormama oko deset godina. Kontaktirajte Rsavvasradevi# )a vi*e inGorma#ija.(niGi.čenje sa P/t0on1om:P i :Aive into P/t0on:. 9taliji smo odgovorni i administratori )a @@@. 5sim togaP ja volim jednostavn( Ao#Book str(kt(r(P koji čini prevo<enje teksta i generisanje i)la)a ( ra)ličitim Gormatima prelepom čarolijom. Hako<e se rad(jem do8roj saradnjiQ 22.8(nt( )ajedni#a je prevela ov( knjig( na KrčkiP )a kori*Eenje ( njenim on1line asin0ronim P/t0on lek#ijama koje se odvijaj( na njenim Gor(mima.itJProgramma)ioneJ8/teoGp/t0on. .#om6 i Bassimo "(##i 3morelliR#erm.gentoo. Novi prevod je ( tok( i počinje na 0ttp:JJ@@@.it 3tren(tno ( i)gradnji6 koji se 8avi stvarima oko n(klearne magnetne re)onan#e i aplika#ije Kongresne 5rgani)a#ija i menad>menta. Prevod je ( tok(P a nala)i se ovde 0ttp:JJ@@@.niversit/ oG 4loren#e 39tal/6 1 5deljenje 7emije. 1-$ .#giJB/teoGP/t0on.orgJnotesJP/t0onVit:PreGa)ione.ml(##iRgmail. Pro*le godine sam se )alj(8io ( P/t0onP jer je divan je)ikP )8og svoji0 mog(Enosti i lepote. Prva je do8ra )a početnikeP ali pred(gačka )a prevod. Hada sam odl(čio da na(čim P/t0onP pa sam primetio da postoji veoma malo dok(menta#ije na Nemačkom je)ik(P koja je na raspolaganj(.nmr. Bislim da TZagrljaj PitonaT le>i sasvim lepo i)me<( nji0P jer nije pred(gačkaP napisana je do savr*enostiP a ( isto vreme je dovoljno op*irna da na(či početnike.reEomP "(t) je imao ist( idej( i sada mo>emo da podelimo posao. +ernd Aengelein ka>e: "(t) i ja Eemo )ajedno raditi na Nemačkom prevod(. 22. Bi smo tek počeli sa (vodom i predgovoromP ali Eemo vas (po)nati sa napretkom koji smo napravili. Nakon st(dija rač(narski0 na(ka počeo sam da radim kao soGtverski in>enjer. Pri/am8odo je tako<e volontirao ( prevod( knjige na 9ndone>anski.s@aroop#0.1B 0talijanski Fnri#o Borelli 3mr. 9ako je M[[ glavni je)ik koji 3moram6 da (potre8ljavam )a moj svakodnevni radP stalno sam ( potra)i )a novim stvarima )a (čenje. 9talijanski prevod je pris(tan na @@@. 2a imam !$ godine i igram se rač(narima jo* od 1+&-1i0P kada je :Mommodore M6$: vladao svetom. Kada sam do*ao do ove knjigeP pala mi je na pamet spontana ideja o Nemačkom prevod(.s@aroop#0. 2a 3Bassimo6 radim kao servis in>enjer i sistem administrator na spektometr( n(klearne magnetne re)onan#eP Fnriko radi kao servis in>enjer i sistem administrator )a na* MFA i paralelneJklaster sisteme.orgJnotesJP/t0onVid:AaGtarV9si. 22. Ho je sveQ 9mpresionirani smo m(drim je)ikom kojim se koristi va*a knjiga i mislimo da je to neop0odno )a pri8li>avanje P/t0on1a novim korisni#ima 3mislimo o stotinama st(denata i istra>ivača koji rade ( na*im la8oratorijama6.22 Prevodi sam knjig( :Kako ra)mi*ljati kao kompj(terski na(čnik: . 5kP sada neke lične stvari o meni.A 0ndone/anski Aaniel 3daniel.or. ?. Pročitao sam negde na internet( o momk( koji je rekao da voli P/t0onP jer kod i)gleda tako lepo.itP @e8 sajt KentooJ"in(D distr(8(#ije i @@@. Massimo :u!!i i (nri!o More--i 1 radimo na . .@ Grčki Krčka . Po mom mi*ljenj(P on je apsol(tno ( prav(.#om6 je preveo knjig( na indone>anski na 0ttp:JJp/t0on.idJmoin.gentoo. Hren(tno radim ( o8lasti medi#inski0 snimanja )a jedn( velik( Nemačk( kompanij(. Ar(ga nije pogodnk )a početnike.

Nakon čitanja polovine knjigeP ja sam odl(čio da je knjiga vredna prevo<enja.s@aroop#0. Kada sam otkrio ov( knjig(P svi moji pro8lemi s( 8ili re*eni.(m(nski. 22. 22.#om6 je volonterski preveo knjig( na Port(galski.11 Japanski Fvo je 2apanska ver)ija na 0ttp:JJ@@@.s@aroop#0.e8astian Banole 38rokent0ornRgmail. 2ovi&a in9ormaci&a: prevod je kompletan i spreman od 5kto8ra 2 2--+g. 6irik DEgeskar: . 22.viegasRgmail.@aroop1ove knjige na .s@aroop#0.#m#nski Pa(l1. Firik IOgeskar 30ttp:JJ@@@.(m(nski. Paul Sebastian Manole 1 2a sam st(dent rač(narstva dr(ge godine ( .orgJnotesJ. .1$ .s@aroop#0.#om6 je volontirao da prevede knjig( na Poljski. IeEina t(torijala i knjiga s( napisani na veoma te0ničkom FngleskomP tako da veEina mat(ranata neEe ni imati potre8an voka8(lar da s0vate *ta pi*e ( t(torijalima. 2a sam samo(ki programer i odl(čio sam da na(čim novi je)ik 1 P/t0on.13 Iorve'ki 98okmKl. Za0valj(jem Aominik(P njegova dva (čenika i nji0ovim prijateljima na (lo>enom vremen( i tr(d(Q Dominik 8o*ac*ko 1 2a sam (čitelj kompj(terski0 na(ka i inGorma#ioni0 te0nologija. 22.ser:Iages6 je srednjo*kola# . Fto koliko je pop(larna ova knjiga 3čestitke a(tor( )a pisanje takvog dela koje je lako )a čitanje6.22 Prevodi 22.0(nro Ao)ono 3do)onoRgmail. Prevod je ( tok(P a vi mo>ete da ga vidite na 0ttp:JJ@@@.#om6 je volonter ( prevod( knjige na Bongolski.(m(niji.orgJnotesJP/t0onVro.1" Port#galski 4idel Iiegas 3Gidel.#om6 je volontirao da prevede ov( knjig( na . Na ?e81( mi je rečeno da ne postoji 8olji način da se to (radi od čitanja :Zagrljaj Pitona:. Prevod se radi na 0ttp:JJ@@@. Počinje da mi se svi<a P/t0on pa sam odl(čio da pomognem prevesti najnovij( ver)ij( .pir( 7aret .orgJnotesJP/t0onVja:Ha8leVoGVMontents. 9ako sam ja ini#ijatorP ja sam samo jedan volonterP pa ako mo>ete da pomogneteP molim vas da mi se pridr(>ite.andvika videregOende skole ( Norve*kojP 8loger i tren(tno prevodi knjig( na Norve*ki 38okmOl6.1 Poljski Aominik Ko)a#)ko 3dko)a#)koRgmail. :Zagrljaj Pitona: koristi jednostavan nete0nički je)ik da 8i o8jasnila programski je)ik koji je isto tako jednostavanP a sa ove dve stvari (čenje P/t0on1a je )a8avno. Nadam se da Ee prevod pomoEi lj(dima koji se nala)e ( istoj sit(a#iji kao i ja 3naročito mladi lj(di6P a mo>da i pomogne *irenj( interesovanja )a ovaj je)ik me<( lj(dima koji imaj( manje te0ničko )nanje.niversit/ ( .vek sam >eleo da programiramP ali )ato *to govorim veoma malo je)ikaP pro#es (čenja je 8io mnogo te>i. 22. Prevod je ( tok( i njegova glavna internet strana je dost(pna ovde: . 2ovost *a 2ovembar 44. 4BBC: Ari(nsanaa je skoro )avr*ila prevod.kas P/t0ona.#om6 je preveo knjig( na 2apanski.12 3ongolski Ari(nsanaa H(njin 3l(Gt8allons2-1-Rgmail. 1-' .orgJnotesJP/t0onVn8no:9nn0oldsGortegnelse )a vi*e detalja.

net6P K(stavo F#0everria 3g(stavo.lavoni# . Iladimir . Za*to sam i)a8rao ov( knjig( )a prevod? Prevod je napravljen da pomogne B(garima 3prevodila# na srpski: ???6 da ra)(mej( ov( knjig( do najmanji0 mog(Ei0 detalja.#om6P Aavid Mrespo Arro/o 3david#respoarro/oR0otmail.lovački Gat#o@.#ski i Fkrajinski Averkiev Andre/ 3averki/evR(kr. Nakon do8ijanja do)vole od a(toraP prevodimo tekstove i postavimo i0 na na*em 8log( koji je dost(pan i prist(pačan na*im kolegama i prijateljima.net6 je volonter da prevede knjig( na . . 22.1& .adim kao soGtverski in>enjer ( Argentini.1A .#omJed(Jp/t0on1 s@aroop#01slJ : Bi smo neproGitna organi)a#ija pod na)ivom :Prevod )a o8ra)ovanje:. #ustavo 6cheverria ka>e: .#om6 i Mristian Berm(de) .niversit/ oG AntioL(ia 3Molom8ia6. 22.erna 3#ris8erm(dR0otmail. Ponekad na<emo članke samie neki p(t na*i proGesori nam pr(>e pomoE da na<emo materijal )a prevod.1@ (lovački Al8ertio ?ard 3al8ertio@ardRgmail. 22. 1-6 .#om6 s( se do8rovoljno prijavili da preved( knjig( na =panski.e/es 3alGonsodgRi#te#0per(.#om6 je do8rovolja# ( prevod( knjige na =vedski. Ne tako d(go posle otkrivanja P/t0on1aP otkrio sam i ov( knjig(P i ona mi je pomogao da na(čim taj je)ik.net6 je počeo . Prevod je ( tok(P mo>ete pročitati =panski 3Argentinski6 prevod na 0ttp:JJ@@@.ačinjeni smo od st(denata i) ra)ličiti0 odeljenja: lingvistikeP 0emijeP 8iologijeP itd . %(o samP pre mnogo godinaP )a P/t0on i ( njem( sam se momentalno )aglavio. Cristian +ermude* Serna ka>e: 2a sam st(dent telekom(nika#ijskog in>enjeringa na .s@aroop#0.NFH te0nologij( na posl( ali o8ave)no P/t0on ili .(8/ ( mojim ličnim projektima.koliko to vreme do)voli6. Pre vi*e mese#iP sam počeo da (či Pajton i nai*ao sam na ov( divn( knjig(P pa sam se do8rovoljno javio da (radim =panski prevod.panski AlGonso de la K(arda .krajinski 3. 5ve prevedene p(8lika#ije često poma>( st(dentima ( nji0ovom svakodnevnom (čenj(.s@aroop#0.mol/ar 3vV2eR(kr.oler.orgJnotesJP/t0onVes1ar:Ha8laVdeVMontenidos .(ski prevod @iki strani#e. 2a (glavnom koristim MS i . Po*to sam (radio neka istra>ivanje ve)ano )a pop(larnost i relevantnost temeP s0vatio sam da je )aista 0itno )a sve one koji >ive ( mojoj )emlji. 2e)ička 8arijera ( ovom malom sl(čaj( vi*e ne postojiP jer je eliminisana mojim prevodom.orgJnotesJP/t0onVr(:Ha8leVoGVMontents .22 Prevodi 22. 5nda sam se do8rovoljno odl(čio da prevedem knjig( na =panski.vedski Bikael 2a#o8sson 3leo#0ingk@akeRgmail. Bo>ete pročitati ra)vojn( ver)ij( na 0ttp:JJ@@@. Bi predstavljamo gr(p( lj(diP (glavnom st(denata i proGesoraP sa .2B .(skiP a mo>da i . .e#0everriaRgmail.adaP nakon do8ijanja neki0 )a0tevaP ja sam počeo sa prevo<enjem knjige :Zagrljaj Pitona: () pomoE BaDimiliano .niversit/. AakleP mislim da mo>e da postane veoma pop(larna.#om6 je preveo knjig( na . Bi pok(*amo da prona<emo interesantne p(8lika#ije na internet( koje 8i mogle 8iti relevantne )a nas i na*e (niver)itetske kolege.

3tse)erR8tt(rk.FZF. Kde je H(rska ver)ija? Bitse de ok(sak.net6 i B(gra Makir 38(gra#akirRgmail.21 ?#rski Hqrker . 1- .22 Prevodi 22.#om6 s( se do8rovoljno prijavili da preved( knjig( na H(rski.

FAABF da instalirate soGtver koji je potre8an da 8i mogli da konvert(jete sirove i)vorne datoteke ( PA4 GormatP itd. Zatim sledite (p(tstva napisana ( . Ii tre8a da )nate kako da koristite K9H da 8i se to (radilo. ZatimP (skladi*tite repo)itorij(m na rač(nar(.pd datoteke na Ia*em lokalnom je)ik(.FAABF da 8i ra)(meli Gormatiranje teksta. 1-& .2! Kako prevoditi 23 =ako prevoditi P(n i)vor knjige je dost(pan i) K9H1spremi*ta 0ttps:JJgit0(8.#omJs@aroop#0J8/teVoGVp/t0on . Počnite (re<ivanje . Bolimo vas da pročitate Pando# . Bolimo Gork(jte repo)itorij(m.

Sign up to vote on this title
UsefulNot useful