25
Python opušteno Vodič za početnike uz koji se osećate pametno Brian Overland

Brian Overland - CET...adčaj xi Proveravanje palindroma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .151 Primer 8.1. Pretvaranje slova u stringovima u velika slova

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Brian Overland - CET...adčaj xi Proveravanje palindroma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .151 Primer 8.1. Pretvaranje slova u stringovima u velika slova

Python opuštenoVodič za početnike uz koji se osećate pametno

Brian Overland

Page 2: Brian Overland - CET...adčaj xi Proveravanje palindroma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .151 Primer 8.1. Pretvaranje slova u stringovima u velika slova

Python opuštenoISBN 978-86-7991-402-6

Autorizovan prevod sa engleskog jezika prvog izdanja knjige Python Without Fear

Original Copyright© 2018. by Pearson Education, Inc. Copyright© prevoda, 2018. CET Computer Equipment and Trade, Beograd

Sva prava zadržana. Nijedan deo ove knjige ne može biti reprodukovan, snimljen, ili emitovan na bilo koji način: elektronski, mehanički, fotokopiranjem, ili drugim vidom, bez pisane dozvole izdavača. Informacije korišćene u ovoj knjizi nisu pod pa-tentnom zaštitom. U pripremi ove knjige učinjeni su svi napori da se ne pojave greške. Izdavač i autori ne preuzimaju bilo kakvu odgovornost za eventualne greške i omaške, kao ni za njihove posledice.

Prevod Milan D. Milošević

Recenzent Milena Marić

Gl. i odg. urednik Dubravka Dragović Šehović

Lektor Milanka Vorkapić Stojanović

Priprema za štampu Predrag Bujić

Izdavači CET Computer Equipment and Trade Beograd, Skadarska 45 tel/fax: 011 3243-043, 3235-139, 3237-246 www.cet.rs

Računarski fakultet Beograd, Knez Mihailova 6/VI tel: 011 2627-613, 2633-321 www.raf.edu.rs

Za izdavača Dragan Stojanović, direktor

Tiraž 1000

Štampa „Pekograf”, Beograd

Nastavno-naučno veće Računarskog fakulteta na 123. sednici održanoj 16. 3. 2018. godine donelo je odluku da knjiga Python opušteno bude štampana kao univerzitetski udžbenik.

Page 3: Brian Overland - CET...adčaj xi Proveravanje palindroma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .151 Primer 8.1. Pretvaranje slova u stringovima u velika slova

vii

Sadžaj

Predgovor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .xvii

Zaobilaženje „neočekivanih zamki”. . . . . . . . . . . . . . . . . . . . . . . .xviiKako da razmišljate na način jezika Python . . . . . . . . . . . . . . . . . .xviiUobičajene i napredne mogućnosti. . . . . . . . . . . . . . . . . . . . . . . . xviiiUčenje na više različitih načina. . . . . . . . . . . . . . . . . . . . . . . . . . . xviiiŠta se dešava „ispod haube” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xviiiZašto Python? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix

Zahvalnice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi

Biografija autora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxiii

Poglavlje 1 Upoznajte Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1

Kratka istorija jezika Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1Po čemu je Python različit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2Kako ova knjiga funkcioniše. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3Instaliranje jezika Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4Početak korišćenja jezika Python u okruženju IDLE . . . . . . . . . . . . .6Ispravljanje grešaka unutar okruženja IDLE . . . . . . . . . . . . . . . . . . .6Rešavanje problema sa krajevima redova . . . . . . . . . . . . . . . . . . . . . .7Dodatna pomoć: onlajn izvori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8

Page 4: Brian Overland - CET...adčaj xi Proveravanje palindroma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .151 Primer 8.1. Pretvaranje slova u stringovima u velika slova

viii Sadržaj

Poglavlje 2 Python safari: brojevi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9Python i brojevi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9

Intermeco Zašto jezik C++ ne podržava beskonačne cele brojeve? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11

Intermeco Koliko je gugl velik broj? . . . . . . . . . . . . . . . . . . . . . . .13Python i brojevi sa pokretnim zarezom . . . . . . . . . . . . . . . . . . . . . .14Dodeljivanje brojeva promenljivama . . . . . . . . . . . . . . . . . . . . . . . .17

Intermeco Šta Python zapravo radi dodeljivanjem vrednosti? . . .21Konvencije za davanje naziva promenljivama koje se koriste

u ovoj knjizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .23Neke Python prečice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .23Poglavlje 2 Rezime. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .26

Poglavlje 3 Vaši prvi programi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .29

Temperatura raste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .29Intermeco Kako Python koristi uvlačenje redova . . . . . . . . . . . . .33

Prikazivanje poruka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .35Sintaksni rezime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .36

Primer 3.1. Kvadratna jednačina kao funkcija . . . . . . . . . . . . . .38Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .39

Preuzimanje tekstualnih ulaznih podataka . . . . . . . . . . . . . . . . . . .41Preuzimanje brojčanih ulaznih vrednosti . . . . . . . . . . . . . . . . . . . . .43

Primer 3.2. Kvadratna formula sa ulaznim i izlaznim podacima . . 44Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .45

Formatiranje stringova u rezultatima . . . . . . . . . . . . . . . . . . . . . . . .46Primer 3.3. Skript za formulu za rastojanje . . . . . . . . . . . . . . . . .47Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48

Poglavlje 3 Rezime. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .50

Poglavlje 4 Odluke i petlje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .53

Odluke unutar računarskog programa . . . . . . . . . . . . . . . . . . . . . . .53Uslovni i Bulovi operatori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .55Ključne reči if, elif i else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56

Intermeco Programi i roboti u filmu Svet zapada . . . . . . . . . . . . .56Primer 4.1. Unesite svoje godine . . . . . . . . . . . . . . . . . . . . . . . . .59Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .60

Page 5: Brian Overland - CET...adčaj xi Proveravanje palindroma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .151 Primer 8.1. Pretvaranje slova u stringovima u velika slova

ixSadržaj

Iskaz while: petljanje kroz petlju . . . . . . . . . . . . . . . . . . . . . . . . . . .60Primer 4.2. Faktorijeli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .63Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .64Optimizovanje koda. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .65Primer 4.3. Štampanje Fibonačijevih brojeva . . . . . . . . . . . . . . .67Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .69

Iskaz „daj mi pauzu” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .70Primer 4.4. Igrica pogađanja brojeva. . . . . . . . . . . . . . . . . . . . . .71Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .72Intermeco Binarno pretraživanje i „O” složenost . . . . . . . . . . . . .74

Poglavlje 4 Rezime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .75

Poglavlje 5 Python liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .77

Kako to radi Python: sve je napravljeno od kolekcija . . . . . . . . . . .77Obrada listi petljom for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .80Menjanje elemenata iskazom for (to se ne može!) . . . . . . . . . . . . . .82

Primer 5.1. Aplikacija za sortiranje . . . . . . . . . . . . . . . . . . . . . . .83Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .84Optimizovanje koda. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .84

Indeksiranje i isecanje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .85Kopiranje podataka u isečke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .88Opsezi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .89

Primer 5.2. Prepravljen program za faktorijele . . . . . . . . . . . . . .91Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .91Optimizovanje koda. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .92Primer 5.3. Eratostenovo sito. . . . . . . . . . . . . . . . . . . . . . . . . . . .93Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .94Optimizovanje koda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .96

Funkcije liste i ključna reč in . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .97Intermeco Ko je bio Eratosten?. . . . . . . . . . . . . . . . . . . . . . . . . . .98

Poglavlje 5 Rezime. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .99

Poglavlje 6 Skupovna notacija za liste i prebrojavanje . . . . . . . . . 101

Indeksi i funkcija enumerate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101Povratak na metodu za formatiranje stringova. . . . . . . . . . . . . . . . 103

Primer 6.1. Prikazivanje tabele. . . . . . . . . . . . . . . . . . . . . . . . . . 104Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

Page 6: Brian Overland - CET...adčaj xi Proveravanje palindroma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .151 Primer 8.1. Pretvaranje slova u stringovima u velika slova

x Sadržaj

Skupovna notacija za liste. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106Primer 6.2. Razlika kvadrata susednih brojeva . . . . . . . . . . . . . 109Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110Intermeco Dokazivanje jednakosti . . . . . . . . . . . . . . . . . . . . . . . 111

„Dvodimenzionalna” skupovna notacija liste . . . . . . . . . . . . . . . . 112Skupovna notacija za liste sa uslovom . . . . . . . . . . . . . . . . . . . . . . 114

Primer 6.3. Eratostenovo sito 2 . . . . . . . . . . . . . . . . . . . . . . . . . 115Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116Optimizovanje koda: skupovi . . . . . . . . . . . . . . . . . . . . . . . . . . 117Primer 6.4. Pitagorine trojke . . . . . . . . . . . . . . . . . . . . . . . . . . . 118Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119Intermeco Značaj Pitagore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120

Poglavlje 6 Rezime. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123

Poglavlje 7 Python stringovi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125

Pravljenje stringova znacima navoda . . . . . . . . . . . . . . . . . . . . . . . 125Indeksiranje i „odsecanje” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127Pretvaranje stringova/brojeva . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130

Primer 7.1. Brojanje nula na kraju . . . . . . . . . . . . . . . . . . . . . . 131Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132Intermeco Python znaci nasuprot Python stringova . . . . . . . . . 135

Zabavno i korisno odbacivanje . . . . . . . . . . . . . . . . . . . . . . . . . . . 135Primer 7.2. Prebrojavanje nula, verzija 2 . . . . . . . . . . . . . . . . . . 137Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137

Deljenje: metoda split . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138Građenje stringova nadovezivanjem (+) . . . . . . . . . . . . . . . . . . . . . 139

Primer 7.3. Sortiranje reči u redu. . . . . . . . . . . . . . . . . . . . . . . . 141Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142

Metoda join . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143Poglavlje 7 Rezime. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144

Poglavlje 8 Operacije sa pojedinačnim karakterima . . . . . . . . . . . 147

Pravila za davanje naziva u ovom poglavlju . . . . . . . . . . . . . . . . . . 147Pristupanje pojedinačnim znacima (kraći prikaz) . . . . . . . . . . . . . 148Dobijanje pomoći za metode za rad sa stringovima . . . . . . . . . . . 148Provera velikih i malih slova . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149Pretvaranje malih slova u velika i obrnuto . . . . . . . . . . . . . . . . . . . 150

Page 7: Brian Overland - CET...adčaj xi Proveravanje palindroma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .151 Primer 8.1. Pretvaranje slova u stringovima u velika slova

xiSadržaj

Proveravanje palindroma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151Primer 8.1. Pretvaranje slova u stringovima u velika slova . . . . 152Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153Primer 8.2. Dovršavanje programa za proveru palindroma . . . 154Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156Optimizovanje koda. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157Intermeco Čuveni palindrom . . . . . . . . . . . . . . . . . . . . . . . . . . . 158

Pretvaranje u ASCII kôd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159Pretvaranje ASCII kodova u znake . . . . . . . . . . . . . . . . . . . . . . . . . 160

Primer 8.3. Šifrovanje stringova . . . . . . . . . . . . . . . . . . . . . . . . . 161Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162Intermeco Umetnost kriptografije . . . . . . . . . . . . . . . . . . . . . . . 164Primer 8.4. Dešifrovanje stringova . . . . . . . . . . . . . . . . . . . . . . 165Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165

Poglavlje 8 Rezime. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166

Poglavlje 9 Napredne tehnike za rad sa funkcijama . . . . . . . . . . . 167

Višestruki argumenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167Vraćanje više od jedne vrednosti . . . . . . . . . . . . . . . . . . . . . . . . . . 168

Intermeco Prosleđivanje i uređivanje liste . . . . . . . . . . . . . . . . . . 170Primer 9.1. Razlika i zbir dve tačke . . . . . . . . . . . . . . . . . . . . . . 172Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172

Argumenti po nazivu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173Podrazumevani argumenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174

Primer 9.2. Mašina za sabiranje . . . . . . . . . . . . . . . . . . . . . . . . 176Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176Optimizovanje koda. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177

Uvoženje funkcija iz modula. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178Primer 9.3. Igra bacanja kockica (kreps) . . . . . . . . . . . . . . . . . . 179Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180Intermeco Određivanje kvota u kladionici . . . . . . . . . . . . . . . . . 182

Poglavlje 9 Rezime. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185

Poglavlje 10 Lokalne i globalne promenljive . . . . . . . . . . . . . . . . . . . . 187

Lokalne promenljive, za šta su one dobre? . . . . . . . . . . . . . . . . . . . 187Lokalne nasuprot globalnih promenljivih . . . . . . . . . . . . . . . . . . . 188Upoznavanje sa ključnom rečju global . . . . . . . . . . . . . . . . . . . . . . 190

Page 8: Brian Overland - CET...adčaj xi Proveravanje palindroma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .151 Primer 8.1. Pretvaranje slova u stringovima u velika slova

xii Sadržaj

Python „zamka za lokalne promenljive” . . . . . . . . . . . . . . . . . . . . 190Intermeco Da li jezik C++ ima lakša pravila za oblast važenja? . 191Primer 10.1. Bitls profil ličnosti (BPL) . . . . . . . . . . . . . . . . . . . . 192Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195Primer 10.2. Rimski brojevi . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197Optimizovanje koda. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198Intermeco Šta se to dešava sa rimskim brojevima? . . . . . . . . . . . 200Primer 10.3. Dekodiranje rimskih brojeva . . . . . . . . . . . . . . . . 201Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202Optimizovanje koda. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203

Poglavlje 10 Rezime. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204

Poglavlje 11 Operacije sa datotekama . . . . . . . . . . . . . . . . . . . . . . . . . . 207

Razlika između tekstualnih i binarnih datoteka . . . . . . . . . . . . . . 207Modul os (operativni sistem) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208

Intermeco Izvršavanje na drugim sistemima . . . . . . . . . . . . . . . 211Otvaranje datoteke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211Upisivanje u tekstualnu datoteku . . . . . . . . . . . . . . . . . . . . . . . . . . 213

Primer 11.1. Upisivanje u datoteku sa zahtevom za unošenje . . 214Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214

Čitanje tekstualne datoteke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216Datoteke i upravljanje izuzecima . . . . . . . . . . . . . . . . . . . . . . . . . . 217

Intermeco Prednosti bloka try/except. . . . . . . . . . . . . . . . . . . . . 219Primer 11.2. Čitanje teksta sa brojevima redova . . . . . . . . . . . . 220Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221

Ostali načini rada sa datotekama . . . . . . . . . . . . . . . . . . . . . . . . . . 223Poglavlje 11 Rezime. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224

Poglavlje 12 Rečnici i skupovi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227

Zašto su nam potrebni rečnici, g. bibliotekaru? . . . . . . . . . . . . . . . 227Dodavanje i menjanje parova ključ-vrednost . . . . . . . . . . . . . . . . . 229Pristupanje vrednostima . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230Pretraživanje ključeva . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231

Intermeco Čime se objašnjava „magija” rečnika . . . . . . . . . . . . 232Primer 12.1. Lični telefonski imenik . . . . . . . . . . . . . . . . . . . . . 233Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234

Page 9: Brian Overland - CET...adčaj xi Proveravanje palindroma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .151 Primer 8.1. Pretvaranje slova u stringovima u velika slova

xiiiSadržaj

Pretvaranje rečnika u liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235Primer 12.2. Čitanje stavki po prefiksu . . . . . . . . . . . . . . . . . . . 236Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238Primer 12.3. Učitavanje i snimanje datoteka . . . . . . . . . . . . . . . 238Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240

Sve o skupovima . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241Operacije na skupovima . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242

Intermeco Zašto su skupovi toliko bitni? . . . . . . . . . . . . . . . . . 244Primer 12.4. Prepravljeno Eratostenovo sito . . . . . . . . . . . . . . . 244Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245

Poglavlje 12 Rezime. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246

Poglavlje 13 Matrice: dvodimenzionalne liste. . . . . . . . . . . . . . . . . . . 249

Jednostavne matrice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249Pristupanje elementima. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250Nepravilne matrice i dužina reda . . . . . . . . . . . . . . . . . . . . . . . . . . 251Množenje (*) i liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252Python problem sa matricama . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253Kako se prave N*M matrice: rešenje. . . . . . . . . . . . . . . . . . . . . . . . 254

Intermeco Zašto ovo nije lakše? . . . . . . . . . . . . . . . . . . . . . . . . . 255Primer 13.1. Tablica množenja . . . . . . . . . . . . . . . . . . . . . . . . . 256Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257Prime 13.2 Matrica koju inicijalizuje korisnik . . . . . . . . . . . . . 258Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259Optimizovanje koda. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260

Kako se rotira matrica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261Intermeco Za i protiv „skupljanja otpada” . . . . . . . . . . . . . . . . 263Primer 13.3. Potpun primer rotiranja . . . . . . . . . . . . . . . . . . . . 264Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266Optimizovanje koda. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267

Poglavlje 13 Rezime. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268

Poglavlje 14 Pobeđivanje u igrici iks-oks . . . . . . . . . . . . . . . . . . . . . . . . 271

Osmišljavanje table za igru iks-oks. . . . . . . . . . . . . . . . . . . . . . . . . 271Plan za ovo poglavlje. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273

Faza 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273Faza 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273Faza 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273

Page 10: Brian Overland - CET...adčaj xi Proveravanje palindroma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .151 Primer 8.1. Pretvaranje slova u stringovima u velika slova

xiv Sadržaj

Python if/else uslov u jednom redu . . . . . . . . . . . . . . . . . . . . . . . . . 274Primer 14.1. Jednostavna igra za dva igrača . . . . . . . . . . . . . . . 274Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276Intermeco Varijante igre iks-oks . . . . . . . . . . . . . . . . . . . . . . . . . 279

Metoda count za liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279Primer 14.2. Igra za dva igrača sa utvrđivanjem pobednika . . . 280Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282

Uvođenje računara u igru . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285Primer 14.3. Računar kao igrač: računar igra prvi . . . . . . . . . . 287Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290Igranje kao drugi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291Intermeco Umetnost heuristike. . . . . . . . . . . . . . . . . . . . . . . . . . 292

Poglavlje 14 Rezime. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294

Poglavlje 15 Klase i objekti I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295

Šta je objekat? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295Klase u jeziku Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296

Kako da definišem jednostavnu klasu? . . . . . . . . . . . . . . . . . . . 297Kako da klase iskoristim za stvaranje objekata? . . . . . . . . . . . . 297Kako da objektima pridružim podatke? . . . . . . . . . . . . . . . . . . 298Kako da pišem metode? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300

Neizbežna _ _init_ _ metoda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301Intermeco Čemu tolika opsednutost sobom? . . . . . . . . . . . . . . . 302

Projektovanje klase za bazu podataka . . . . . . . . . . . . . . . . . . . . . . 303Intermeco Klase iz jezika C++ u odnosuna klase iz Python-a . . 304Primer 15.1. Praćenje zaposlenih . . . . . . . . . . . . . . . . . . . . . . . . 305Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307

Definisanje ostalih metoda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309Projektovanje klase Tačka3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310Klasa Tačka3D i podrazumevani argumenti. . . . . . . . . . . . . . . . . . 312Trodimenzionalna igra iks-oks . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312

Primer 15.2. Pronalaženje 3D pobede . . . . . . . . . . . . . . . . . . . . 313Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314Primer 15.3. Izračunavanje načina za pobedu . . . . . . . . . . . . . . 315Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317Optimizovanje koda. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317

Poglavlje 15 Rezime. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318

Page 11: Brian Overland - CET...adčaj xi Proveravanje palindroma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .151 Primer 8.1. Pretvaranje slova u stringovima u velika slova

xvSadržaj

Poglavlje 16 Klase i objekti II . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321

Dobijanje pomoći iz stringova za dokumentovanje . . . . . . . . . . . . 321Tipovi funkcije i „preklapanje” . . . . . . . . . . . . . . . . . . . . . . . . . . . 323

Intermeco Šta je to dinamičko određivanje tipova?. . . . . . . . . . . 325Liste argumenata promenljive dužine . . . . . . . . . . . . . . . . . . . . . . . 326

Primer 16.1. Klasa TačkaN . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329Optimizovanje koda. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330

Nasleđivanje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331Klasa Fraction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333

Primer 16.2. Proširivanje klase Fraction . . . . . . . . . . . . . . . . . . 334Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335

Promenljive i metode klase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337Promenljive instance kao „podrazumevane” vrednosti . . . . . . . . . 339

Primer 16.3. „Autmatizovana” klasa Poligon . . . . . . . . . . . . . . 340Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342Intermeco Zašto je ovo dobro? . . . . . . . . . . . . . . . . . . . . . . . . . . 343

Poglavlje 16 Rezime. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344

Poglavlje 17 Konvejeva igra života . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347

Intermeco Uticaj „života” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347Igra života: pravila igre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348Generisanje broja suseda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350Osmišljavanje programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352

Primer 17.1. Prilagođena klasa Matrica . . . . . . . . . . . . . . . . . . 352Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353

Premeštanje klase Matrica u modul . . . . . . . . . . . . . . . . . . . . . . . . 354Primer 17.2. Prikazivanje matrice života . . . . . . . . . . . . . . . . . . 355Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355

Čuvena klizajuća šara . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358Primer 17.3. Čitav program Igre života . . . . . . . . . . . . . . . . . . . 358Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360Intermeco Da li Igra života stvara život?. . . . . . . . . . . . . . . . . . . 363

Poglavlje 17 Rezime. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364

Page 12: Brian Overland - CET...adčaj xi Proveravanje palindroma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .151 Primer 8.1. Pretvaranje slova u stringovima u velika slova

xvi Sadržaj

Poglavlje 18 Napredne Python tehnike . . . . . . . . . . . . . . . . . . . . . . . . . 367

Generatori. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367Korišćenje moći generatora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369

Primer 18.1. Generator nasumičnih brojeva . . . . . . . . . . . . . . . 370Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372Intermeco Koliko je nasumično zapravo „nasumično”? . . . . . . . 373

Svojstva . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375Metode za čitanje. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376Metode za postavljanje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377

Uporedo korišćenje metoda za čitanje i postavljanje . . . . . . . . . . . 378Primer 18.2. Objekat više nivoa temperature. . . . . . . . . . . . . . . 379Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380

Dekoratori: funkcije koje obuhvataju druge funkcije. . . . . . . . . . . 382Python dekoratori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385

Primer 18.3. Dekoratori kao alatka za otklanjanje grešaka . . . 387Kako to radi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388

Poglavlje 18 Rezime. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389

Dodatak A Tabela redosleda operacija u jeziku Python . . . . . . . . 391

Dodatak B Rezime najvažnijih pravila formatiranja za Python 3.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393

1. Formatiranje običnog teksta . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3932. Argumenti za formatiranje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3933. Određivanje redosleda argumenata . . . . . . . . . . . . . . . . . . . . . . 3934. Poravnavanje udesno unutar polja veličine N . . . . . . . . . . . . . . . 3945. Poravnavanje ulevo unutar polja veličine N . . . . . . . . . . . . . . . . 3946. Odsecanje: ograničavanje veličine polja za prikaz . . . . . . . . . . . 3947. Kombinovanje odsecanja i poravnavanja . . . . . . . . . . . . . . . . . . 3958. Dužina i tačnost brojeva sa poketnim zarezom . . . . . . . . . . . . . 3959. Znak za dopunjavanje. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395

Dodatak C Rečnik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397

Indeks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407

Page 13: Brian Overland - CET...adčaj xi Proveravanje palindroma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .151 Primer 8.1. Pretvaranje slova u stringovima u velika slova

xvii

PredgovorPostoji mnogo besplatnih načina za učenje programiranja, a mnogi od njih su o jeziku Python. Da bi neka knjiga zavredila vašu pažnju, mora da bude dobra... zapravo, mnogo, mnogo dobra.

Ovu knjigu sam napisao kao knjigu kakvu bih voleo da je postojala kada sam pre nekoliko godina počeo da učim Python. Poput svih ostalih, postepeno sam usvajao pojedine pojmove prelistavajući na desetine raznih knjiga i pre-gledajući desetine lokacija na internetu.

Ali, ovo je Python, a on ne bi trebalo da bude težak!Problem je u tome da nije svako učenje lako i brzo kao što bi trebalo da

bude. Niti su sve knjige ili sajtovi za učenje zabavni. Možete, na primer, da pretražite više sajtova uzaludno pokušavajući da pronađete objašnjenje koje zaista vredi.

To je ono što ovu knjigu čini onakvom kakvu bih voleo da sam imao kada sam počinjao učenje.

Zaobilaženje „neočekivanih zamki”Mnogo toga se u jeziku Python radi relativno lako, ali ima nekoliko stvari koje bi trebalo da budu lake, a teže su nego u drugim jezicima. To je posebno tačno ako već imate iskustva u programiranju. Način na koji Python radi neke stvari je često toliko različit od pristupa na koje ste se navikli u ostalim jezicima, tako da satima možete da zurite u ekran sve dok vam neko ne ukaže na lako rešenje.

Ili, možete da kupite ovu knjigu.

Kako da razmišljate na način jezika PythonBlisko problemu sa „zamkama” je i to da razumete kako se razmišlja u jeziku Python. Sve dok ne razumete način na koji Python oblikuje svoj svet, pisaćete programe slično tome kako to rade programeri u jeziku C. Ti programi rade,

Page 14: Brian Overland - CET...adčaj xi Proveravanje palindroma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .151 Primer 8.1. Pretvaranje slova u stringovima u velika slova

xviii

ali ne koriste nijednu od mogućnosti koje čine da Python bude alatka za brzo programiranje.

a_list = [’Ne’, ’radite’, ’to’, ’kao’ ,’u’, ’jeziku’, ’C’]for x in a_list: print(x, end=’ ’)

Ovo parče koda prikazuje:

Ne radite to kao u jeziku C

Uobičajene i napredne mogućnostiPonavljam, mada je Python uopšteno gledano lakši od drugih jezika, to nije uvek baš tako. Neke od najvažnijih uobičajenih mogućnosti jezika Python teško se razumeju ako se ne objasne na dobar način. U ovoj knjizi velika pažnja se posvećuje uobičajenim i ponekim naprednim mogućnostima, uklju-čujući pregledne liste, generatore, višedimenzione liste (matrice) i dekoratore.

Učenje na više različitih načinaNačin podučavanja koji koristim u ovoj knjizi drugačiji je od onih koje mo-žete da pronađete na drugim mestima. Često koristim primere, naravno, ali ponekad su samo pravi prikaz nekog pojma ili dobra analogija jedino što je različito. Ponekad je to rad sa primerima koji vas izazivaju da nešto promenite koristeći ono što ste upravo naučili. Međutim, način podučavanja u čitavoj knjizi stalno podržava istu ideju.

Šta se dešava „ispod haube”Mada je ova knjiga namenjena onima koji su početnici u programiranju, ona može da posluži i ljudima koji žele da znaju kako Python radi i po čemu se u suštini razlikuje „ispod haube”. To jest, na koji način Python obavlja odre-đene operacije interno? Ako želite više od pojednostavljenog upoznavanja, ova knjiga je za vas.

Page 15: Brian Overland - CET...adčaj xi Proveravanje palindroma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .151 Primer 8.1. Pretvaranje slova u stringovima u velika slova

xix

Zašto Python?Naravno, ako se dvoumite između programskih jezika, pre svega želite da znate zašto bi uopšte trebalo da koristite Python.

Python je veoma brzo preuzeo dobar deo sveta programiranja. Još uvek postoje stvari za koje su neophodne mogućnosti nižeg nivoa koje nude jezici C ili C++, ali videćete da je Python alatka za brz razvoj aplikacija time što višestruko nagrađuje trud programera. Često, sa samo nekoliko linija koda, možete da uradite zapanjujuće stvari.

Tačnije rečeno, program za koji je u jeziku Python potrebno 100 redova mogao bi potencijalno da se protegne na 1000 ili 2000 redova napisanih u jeziku C. Python možete da iskoristite za „proveru ideje”: tokom popodneva napišete Python program kako biste videli da li ispunjava potrebe vašeg pro-jekta; pošto se uverite da je program koristan, možete ponovo da ga napišete u jeziku C ili C++, ako želite, kako biste bolje iskoristili resurse računara.

Imajući to u vidu, nadam se da ćete mi se pridružiti na ovom opuštenom, uzbudljivom i zabavnom putovanju. I zapamtite ovo:

x = [’Python’, ’je’, ’sjajan’]print(’ ’.join(x))

Registrujte svoju kopiju knjige Python opušteno na veb stranici InformIT kako biste lakše pristupali dopunama i/ili ispravkama kada ih i ako ih bude. Postupak registrovanja počinjete tako što odete na adresu informit.com/register, prijavite se i napravite nalog. Unesite ISBN broj originalnog izdanja ove knjige (9780134687476) i pritisnite dugme Submit. Na kartici Registered Pro ducts potražite link Access Bonus Content koji se nalazi odmah pored ove knjige i pratite ovaj link kako biste pristupili postoje-ćem dodatnom materijalu. Ako želite da budete obaveštavani o eksklu-zivnim ponudama novih izdanja i dopunama, molimo da u odgovarajuće polje unesete znak za potvrdu kako biste od nas dobijali e-poruke.

Page 16: Brian Overland - CET...adčaj xi Proveravanje palindroma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .151 Primer 8.1. Pretvaranje slova u stringovima u velika slova

xxiii

Biografija autoraPovremeno, Brian Overland je bio zadužen, ili je bar učestvovao, u pisanju dokumentacije za skoro sve jezike koje je Microsoft korporacija ikad proda-vala: Macro Assembler, FORTRAN, COBOL, Pascal, Visual Basic, C i C++. Nasuprot drugima, napisao je hrpu koda u svim tim jezicima. Nikada nije pisao dokumentaciju za jezik u kojem ne bi mogao da napiše iole pristojan program.

On je godinama bio momak „za sve” u Microsoftu i opisivao je kako se koriste alatke neophodne za podršku novim tehnologijama, kao što su RISC obrada, proširenja programa za povezivanje i upravljanje izuzecima.

Jezik Python je njegovu pažnju prvi put privukao pre nekoliko godina, kada je shvatio da bi mnoge od svojih omiljenih aplikacija – igricu Game of Life, recimo, ili prevodioca za reverznu poljsku notaciju – mogao da napiše mnogo kraće nego u bilo kom računarskom jeziku koji je do tada video.

Kada ne istražuje nove računarske jezike, radi mnoge druge stvari, pri čemu većina njih obuhvata pisanje. Uživa u gledanju filmova i pisanju priča. Dva puta je bio u finalu literarnog takmičenja za severozapadnu obalu Pacifika.

Page 17: Brian Overland - CET...adčaj xi Proveravanje palindroma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .151 Primer 8.1. Pretvaranje slova u stringovima u velika slova
Page 18: Brian Overland - CET...adčaj xi Proveravanje palindroma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .151 Primer 8.1. Pretvaranje slova u stringovima u velika slova

1

1

Šta biste rekli ako vam kažem da postoji računarski jezik koji je u odnosu na druge računarske jezike lakši za učenje, lakši za početnike i sa kojim možete lakše da uradite mnogo toga koristeći samo nekoliko redova koda?

Po mišljenju miliona, taj jezik je Python. Proistekao iz jezika koji se zvao ABC (kao u „prosto kao ABC”), stekao je veliki broj poklonika tokom po­slednje dve decenije. Zajednici Python programera pridružilo se već toliko programera da postoji preko 100000 besplatnih paketa koji rade sa osnovnom Python postavkom.

Pridružite se tom Python stampedu. U ovoj knjizi pokazaću vam kako da počnete čak i ako imate ograničeno programersko iskustvo. Takođe, provešću vas kroz „zamke” – stvari koje Python radi toliko drugačije da zbunjuju i isku­snije programere. Ova knjiga je podjednako namenjena kako novim tako i isku­snijim programerima, a u njoj se objašnjava šta se sve dešava skriveno unutra.

Kratka istorija jezika PythonJezik Python je 1991. godine izu­meo holandski programer Guido van Rossum, koji je dobar deo jezika preuzeo iz jezika ABC (ne treba ga mešati sa jezikom C).

ABC je imao mnoge moguć­nosti koje i danas postoje u je­ziku Python. Van Rossum, koji u Python svetu ima titulu Do bro­ćudni doživotni diktator (engl. Benevolent Dictator for Life – BDFL), je u jezik takođe ugradio i elemente jezika Modula­3.

Upoznajte Python

A B C

Prosto kao„ABC”!!

Page 19: Brian Overland - CET...adčaj xi Proveravanje palindroma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .151 Primer 8.1. Pretvaranje slova u stringovima u velika slova

2 Poglavlje 1 Upoznajte Python

Van Rossum je jeziku dao naziv prema BBC­ovoj humorističkoj seriji Leteći cirkus Montija Pajtona, tako da je veza sa pitonima (engl. python) posredna, mada je član glumačke ekipe John Clesse prvobitno predložio reč „Python” pošto podseća na nešto „klizavo i ljigavo” (izvor: Wikipedia.org). Tako se ona našla tamo gde jeste – bilo kako bilo, postoji neka veza sa gmizavcima.

Od tada je razvijeno nekoliko verzija jezika Python, pri čemu su doda­vane važne mogućnosti, a poslednja verzija je Python 3.0. Ova knjiga koristi Python 3.0, mada obuhvata i napomene o tome kako se dati primeri mogu prilagoditi verziji Python 2.0.

Po čemu je Python različit Prvo što treba da znate o jeziku Python jeste to da je Python besplatan.

Većina Python proširenja je besplatna i ona se dobijaju uz osnovno preu­zimanje. Ovi moduli nude mogućnosti kao što su funkcije za matematičke, datumske/vremenske, razlomačke i proračune sa slučajnim vrednostima, kao i tkinter koji podržava grafički korisnički interfejs koji radi na raznim platfor­mama. Ponavljam, sve to je besplatno.

Podrška za rad sa brojevima ugrađena u Python je zadivljujuća, pošto obu­hvata kompleksne brojeve, brojeve sa pokretnim zarezom, razlomke (iz mo­dula Fractions), kao i „beskonačne celobrojne vrednosti”.

Python je privukao verne poklonike. Većina programera nudi biblioteke – nazvane paketi – svojim kolegama Python programerima, najčešće besplatno. Do njih možete da dođete tako što ćete u svom veb čitaču potražiti Python Package Index i zatim otići do odgovarajuće stranice. U trenutku dok ovo pišem, postoji preko 107000 paketa.

Na prvi pogled, Python program može da liči na kôd u drugim jezicima, ali, ako se pogleda pažljivije, uočavaju se znatne razlike.

� Nasuprot većini jezika, Python nema sintaksu sa „početkom bloka” ili „kra­jem bloka” – svi međusobni odnosi se zasnivaju na uvlačenju! Mada nekom C programeru to može da izgleda pomalo nezgodno, time se održava dosledan izgled koji početnici mnogo lakše shvataju.

� Python nema deklaracije promenljivih. Promenljive pravite tako što im do­deljujete vrednosti. Time je napravljen veliki pomak u smeru pojednostavlji­vanja sintakse jezika, ali se time takođe stvaraju „zamke” na dubljem nivou. Ova knjiga će pomoći da ih zaobiđete.

� Python se izuzetno mnogo zasniva na ideji iteracije, što znači višestruko po­navljanje petlje kroz nizove. Ovaj koncept je duboko ugrađen u strukture višeg nivoa (liste, rečnike i skupove). Koristite ih kako treba i obavićete mnogo toga na malom prostoru.

Page 20: Brian Overland - CET...adčaj xi Proveravanje palindroma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .151 Primer 8.1. Pretvaranje slova u stringovima u velika slova

3Kako ova knjiga funkcioniše1

Za Python se obično smatra da je jezik za pravljenje „prototipova” ili „brzo razvijanje aplikacija” zbog njegovih mogućnosti. U jeziku Python možete brzo da napišete neki program. Ako posle toga želite da povećate efikasnost računara na nižem nivou, možete kasnije da taj program prepišete u jezik C ili jezik C++.

Kako ova knjiga funkcionišeČvrsto sam uveren u to da je učenje na primerima dobro kao i teorija. Plan je da u ovoj knjizi osnove jezika Python (kao i neke uobičajene i napredne mogućnosti) učimo tako što ćemo raditi sledeće:

� Upoznavanje sa nekom Python osobinom, korišćenjem sintaksnih dijagrama i kraćih primera,

� Prikazivanje osnovnog primera kojim se pokazuje praktična primena odre­đene mogućnosti,

� Dodavanje odeljka „Kako to radi” kojim se primer koda razmatra red po red,

� Navođenje više vežbanja kojima vas izazivamo da promenite i prilagodite od­govarajući primer.

Pošto Python ima interaktivno razvojno okruženje, IDLE, obično vas pozi­vam da i sami napravite kraće primere.

Ova knjiga koristi više ikonica u margini kako biste lakše uočili dodatne napomene.

Ovi odeljci opisuju neka od osnovnih pravila Python sintakse. Bilo šta što bi trebalo da se preko tastature unese baš onako kako je prikazano (kao što su ključne reči ili znaci interpunkcije) napisano je podebljano. Sa druge strane, za mesta za unos teksta, koja sadrže tekst koji sami unosite, koristi se kurziv. Na primer, u sintaksi za naredbu global, sama ključna reč je napisana pode­bljano, dok je naziv promenljive – koji vi dajete – napisan kurzivom.

global naziv_promenljive

Ova ikona označava blok pseudokoda, gde se sistematično opisuju pojedini koraci u programu svakodnevnim jezikom, a ne rečnikom koji koristi Python. Međutim, kako se Python iskazi često ne razlikuju mnogo od svakodnevnog jezika, nije bilo potrebe da uvek koristim pseudokod. Korist od njega, tu i tamo, može biti u tome da ukratko prikažem zamisao na kojoj se neki pro­gram zasniva.

Ova ikona označava odeljak u kome se analiziraju pojedini redovi iz većeg primera, ili samo oni redovi koji nisu jasni već sami po sebi.

Ključna Sintaksa

Ključna reč

Pseudokod

Kako to radi

Page 21: Brian Overland - CET...adčaj xi Proveravanje palindroma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .151 Primer 8.1. Pretvaranje slova u stringovima u velika slova

4 Poglavlje 1 Upoznajte Python

Ova ikona označava odeljak u kome se daju vežbe koje se zasnivaju na prethodno datom primeru. Python ćete naučiti mnogo brže ako uradite bar poneki od tih primera.

Ova ikona prethodi odeljku u kome se pokazuje kako se prerađuje ili u znatnoj meri unapređuje neki primer. Ovo se ne primenjuje na sve primere. Kada se koristi u ovoj knjizi, razlog je u tome što se u nekom primeru koristi najočigledniji način da se nešto uradi; „optimizovano” rešenje će potom pri­kazati kako bi iskusniji, veštiji Python programeri rešili to isto.

Instaliranje jezika Python Postupci za instaliranje jezika Python su u suštini isti bez obzira na to da li koristite sistem koji se zasniva na Windows, Macintosh ili bilo kom drugom operativnom sistemu koji Python podržava.

Ovo su osnovni koraci:

1 Idite na Python matičnu stranicu: python.org.

2 Otvorite meni Downloads.

3 Ako se pojavi ekran Downloads for Windows, pritisnite mišem dugme Python 3.6.1. Ako vaš računar ne pokreće Windows operativni sistem, potrebno je da izaberete odgovarajući operativni sistem tako što ćete ga pronaći u izboru koji se nudi u meniju Downloads.

4 Pritisnite mišem dugme Save File.

5 Pronađite datoteku koju ste na taj način upravo sačuvali; svi operativni sistemi obično imaju mesto na kojem smeštaju preuzete datoteke. Ova sačuvana da­toteka sadrži program za instaliranje. Dva puta brzo pritisnite mišem na tu sačuvanu datoteku i pratite uputstva.

Ako sve prođe kako treba, Python je instaliran na vašem računaru sa svim osnovnim modulima, uključujući i tkinter (koji se koristi za razvoj programa u grafičkom okruženju). Sada je neophodno da napravite određeni izbor. Da biste počeli korišćenje jezika Python, možete da koristite „osnovni interak­tivni režim rada” – koji radi svoj posao ali nije ništa posebno – ili možete da koristite IDLE, interaktivno razvojno okruženje.

Nedvosmisleno vam preporučujem ovo drugo. IDLE, pored toga što radi sve ono što radi i osnovni interaktivni režim rada, nudi mnogo više od toga. U sledećem odeljku opisujem nekoliko načina na koje korišćenjem IDLE okru­ženja možete mnogo da uštedite na vremenu.

Vežbe

Optimizacija

Page 22: Brian Overland - CET...adčaj xi Proveravanje palindroma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .151 Primer 8.1. Pretvaranje slova u stringovima u velika slova

5Instaliranje jezika Python 1

Evo kako izgleda osnovni interaktivni režim rada. Nudi samo elementarne mogućnosti za menjanje koda i nema podršku za učitavanje programa iz tek­stualnih datoteka.

Evo kako izgleda IDLE okruženje. Obratite pažnju na menije koji se u njemu nude. Možete da radite mnogo toga – uključujući učitavanje programa iz tekstualnih datoteka i ispravljanje grešaka u njima – što ne možete da radite u osnovnom interaktivnom režimu rada.

U operativnom sistemu Windows, aplikacija za osnovni interaktivni režim rada trebalo bi da se nađe na meniju Start. Ali, to nije Python koji želite. Mnogo bolje je da izaberete Programs, izaberete Python i konačno izaberete IDLE.

Page 23: Brian Overland - CET...adčaj xi Proveravanje palindroma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .151 Primer 8.1. Pretvaranje slova u stringovima u velika slova

6 Poglavlje 1 Upoznajte Python

U sistemu Mac (podrazumeva se da ste pre toga preuzeli Python, uključu­jući i IDLE), da biste koristili IDLE biće potrebno da otvorite Finder i izabe­rete Applications; zatim izaberite Python i na kraju izaberite IDLE. Program koji ste preuzeli možda čak ni nema osnovni režim rada.

Početak korišćenja jezika Python u okruženju IDLEPokrenite IDLE, okruženje za interaktivni razvoj programa. To je mesto na kom ćete provoditi najviše vremena dok budete učili Python i odakle sve po­činje. Koristite opcije koje nudi vaš operativni sistem kako biste odgovarajuću ikonicu smestili na radnu površinu tako da kasnije mnogo lakše možete da pokrećete IDLE.

Pošto pokrenete IDLE, videćete odzivnik, sličan ovome:

>>>

Pošto se odzivnik pojavi, možete da unesete neku Python naredbu ili izraz. Možete da dobijete i pomoć tako što ćete ukucati komandu help iza koje sledi naziv tipa, slično ovome:

>>>help(str)

Ovde pokazujem da se za unos korisnika – karaktere koje treba uneti preko tastature – koriste podebljana slova; za rezultat koji daje Python koriste se obična slova. Ovu konvenciju koristim kroz čitavu knjigu.

Ispravljanje grešaka unutar okruženja IDLEJedna od najvećih prednosti okruženja IDLE je da omogućava lako ispravlja­nje grešaka. Recimo da ste uneli sledeće:

>>>x = z

Kao što ćete naučiti u narednim poglavljima, ovaj iskaz dodele bi proizveo grešku ako promenljivoj z pre toga nije dodeljena neka vrednost. Okruženje bi odgovorilo ispisivanjem poruke poput ove:

Traceback (most recent call last): File „<pyshell#205>”, line 1, in <module> x = zNameError: name ’z’ is not defined

U ovom slučaju, nije teško da se ponovnim unošenjem prepravi pogrešan iskaz. Međutim, pretpostavimo da imate nešto veći blok koda u kome postoje greške i da ne želite da sve ponovo kucate ispočetka. Ovo je primer:

Page 24: Brian Overland - CET...adčaj xi Proveravanje palindroma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .151 Primer 8.1. Pretvaranje slova u stringovima u velika slova

7Rešavanje problema sa krajevima redova1

def print_nums(n): i = 1 while i <= n: print(i, end=’\t’) i +++= 1

Problem sa ovim blokom koda je da se završava redom i +++= 1 umesto redom i += 1. Na ovom mestu bi trebalo da se nađe samo jedan znak plus (+).

Želeli biste da ispravite ovu grešku, ali ne želite da prekucavate sve ove iskaze. Srećom, u jeziku Python ispravljanje grešaka je izuzetno lako. Samo uradite sledeće:

1 Postavite kursor na bilo koji red u bloku koda. (Ako se blok koda sastoji od samo jednog reda, postavite kursor na kraj tog reda.)

2 Pritisnite taster Enter.

Voilà! Čitav blok koda se ponovo pojavljuje, pri čemu se kursor nalazi na njegovom kraju; sada možete da popravite šta god je potrebno da se popravi. Koristite tastere sa strelicama da biste se vratili na bilo koji iskaz i zatim po­pravite ono što je potrebno. Kada završite, da biste taj blok koda vratili u pro­gram, postavite kursor na kraj poslednjeg reda i dva puta pritisnite taster Enter.

Zapamtite ovu tehniku. Sa njom ćete uštedeti dosta vremena pri radu.

Rešavanje problema sa krajevima redovaZbog načina na koji Python tumači redove programa, ne možete slobodno da prelazite preko fizičkih ograničenja redova kao što je to moguće u jeziku C. Međutim, šta da radite ako je potrebno da uneste neki zaista dugačak red?

Kraj fizičkog reda obično označava završetak Python iskaza, pošto ne po­stoji sintaksa za završetak reda kao u jeziku C. Međutim, otvaranjem male, srednje ili vitičaste zagrade taj red se automatski prividno prenosi u naredni red. Evo primera:

ukupan_iznos = (ovaj_iznos + onaj_iznos + neki_veliki_broj + komada + dodatni_iznos )

Otvaranjem zagrade, (, u gornjem redu stvara se mogućnost da slobodno nastavite pisanje ovog iskaza u drugom redu, sve dok se zagrada ne zatvori. Ovo je jedan slučaj u kome uvlačenje nije bitno osim zbog bolje čitljivosti koda. (Obično, Python primorava na dosledno korišćenje uvlačenja.)

Povremeno, ova tehnika ne može da vam pomogne. Ako je neophodno da fizički nastavite neki red, a nemate drugu mogućnost, možete da koristite obrnutu kosu crtu.

Page 25: Brian Overland - CET...adčaj xi Proveravanje palindroma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .151 Primer 8.1. Pretvaranje slova u stringovima u velika slova

8 Poglavlje 1 Upoznajte Python

>>>moj_str = ’Uneo sam zaista veoma dug \red sa kodom.’

Iz ovog primera proističe pitanje: šta ako vam u navedenom nizu znakova treba obična obrnuta kosa crta? Odgovor je da je potrebno da koristite dvo­struku obrnutu kosu crtu, \\, koja predstavlja pravu obrnutu kosu crtu.

>>>moj_str = ’Uneo sam obrnutu kosu crtu \\ \u ovaj dug red koda.’

U 7. poglavlju, „Python stringovi”, podrobnije obrađujemo kako se prave stringovi sa znacima navoda.

Na nekoliko prethodnih stranica dao sam neke savete za preživljavanje u jeziku Python. Sada, ako ste spremni, vreme je da krenemo na Python safari.

Dodatna pomoć: onlajn izvoriU ovom poglavlju, savetovao sam vas da preuzmete Python 3.0 ili noviji. Ako koristite stariju verziju jezika Python 2.0, većina koda iz ove knjige će ra­diti, ali je potrebno da uradite neka podešavanja. Mada dajem napomene o razlikama između verzija, dodatnu pomoć o tome možete da pronađete na sledećim veb stranicama:

wiki.python.org/moin/Python2orPython3

wiki.python.org/moin/PortingToPy3k/BilingualQuickRef

Mada se u većini poglavlja u ovoj knjizi daju primeri koji su relativno kratki i koje lako možete da ponovo prekucate, u poglavljima pri kraju knjige dati su nešto duži listinzi programa. Možda će vam biti lakše ako biste preuzeli odgovarajući kôd. Listinge programa možete da pronađete na ovoj adresi:

brianoverland.com/books