You are on page 1of 49

UVOD U PYTHON

Automatizovanje dosadnih poslova


PRAKTINO PROGRAMIRANJE ZA POETNIKE

AL SWEIGART
UVOD U PYTHON
Automatizovanje dosadnih poslova
PRAKTINO PROGRAMIRANJE ZA POETNIKE

Al Sweigart
Izdava: Automate the Boring Stuff
with Python
by Al Sweigart,
ISBN: 978-1-59327-599-0
Obalskih radnika 15, Beograd
2015
Tel: 011/2520272
Copyright 2015 by Al Sweigart, No Starch Press, Inc.
All right reserved. No part of this book may be reproduced or
e-mail: kombib@gmail.com transmitted in any form or by means, electronic or mechanical,
including photocopying, recording or by any information storage
internet: www.kombib.rs retrieval system, without permission from the Publisher.
Autorizovani prevod sa engleskog jezika edicije u izdanju
Urednik: Mihailo J. olaji No Starch Press, Inc., Copyright 2015.

Za izdavaa, direktor: Sva prava zadrana. Nije dozvoljeno da nijedan deo ove knjige
Mihailo J. olaji bude reprodukovan ili snimljen na bilo koji nain ili bilo
kojim sredstvom, elektronskim ili mehanikim, ukljuujui
Autor: Al Sweigart fotokopiranje, snimanje ili drugi sistem presnimavanja
informacija, bez dozvole izdavaa.
Prevod: Slavica Prudkov
Zatitni znaci
Lektura: Milo Jevtovi Kompjuter Biblioteka i No Starch Press, Inc. su pokuali da u
ovoj knjizi razgranie sve zatitne oznake od opisnih termina, pra-
tei stil isticanja oznaka velikim slovima.
Slog : Zvonko Aleksi
Autor i izdava su uinili velike napore u pripremi ove knjige, iji
je sadraj zasnovan na poslednjem (dostupnom) izdanju softvera.
Znak Kompjuter biblioteke:
Delovi rukopisa su moda zasnovani na predizdanju softvera
Milo Milosavljevi dobijenog od strane proizvoaa. Autor i izdava ne daju nikakve
garancije u pogledu kompletnosti ili tanosti navoda iz ove knjige,
tampa: Pekograf, Zemun niti prihvataju ikakvu odgovornost za performanse ili gubitke,
odnosno oteenja nastala kao direktna ili indirektna posledica
Tira: 500 korienja informacija iz ove knjige.

Godina izdanja: 2016.

Broj knjige: 482

Izdanje: Prvo

ISBN: 978-86-7310-505-5
CIP -
,
Kratak sadraj

UVOD .................................................................. 1

DEO I
POGLAVLJE 1
Osnove Pythona .......................................................13

POGLAVLJE 2
Kontrola toka ..........................................................31

POGLAVLJE 3
Funkcije ...............................................................61

POGLAVLJE 4
Liste...................................................................79

POGLAVLJE 5
Renici i strukturiranje podataka...................................... 105

POGLAVLJE 6
Manipulisanje nizovima.............................................. 123

DEO I
POGLAVLJE 7
Podudaranje ablona pomou regularnih izraza ....................... 147

POGLAVLJE 8
itanje i pisanje fajlova............................................... 173

iii
iv Kratak sadraj

POGLAVLJE 9
Organizovanje fajlova ................................................ 197

POGLAVLJE 10
Ispravljanje greaka.................................................. 215

POGLAVLJE 11
Web isecanje......................................................... 233

POGLAVLJE 12
Upotreba Excel tabela ................................................ 265

POGLAVLJE 13
Upotreba PDF i Word dokumenata .................................... 295

POGLAVLJE 14
Upotreba CSV fajlova i JSON podataka................................. 319

POGLAVLJE 15
Evidencija vremena, rasporeivanje zadataka
i pokretanje programa................................................ 335

POGLAVLJE 16
Slanje e-maila i tekstualnih poruka.................................... 361

POGLAVLJE 17
Manipulisanje slikama................................................ 387

POGLAVLJE 18
Kontrolisanje tastature i mia pomou GUI automatizacije.............. 413

DODATAK A
Instaliranje nezavisnih modula........................................ 441

DODATAK B
Pokretanje programa ................................................ 443

DODATAK C
Odgovori na praktina pitanja ........................................ 447
INDEKS .............................................................. 461
Sadraj

UVOD .................................................................. 1
Za koga je ova knjiga? ................................................................................................................................... 2
Konvencije ......................................................................................................................................................... 2
ta je programiranje?..................................................................................................................................... 3
ta je Python? .......................................................................................................................................... 4
Programerima nije potrebno veliko poznavanje matematike............................................... 4
Programiranje je kreativna aktivnost .............................................................................................. 5
O ovoj knjizi ....................................................................................................................................................... 5
Preuzimanje i instaliranje Pythona ........................................................................................................... 6
Pokretanje IDLE-a ............................................................................................................................................ 7
Interaktivna konzola .............................................................................................................................. 8
Pronalaenje pomoi ..................................................................................................................................... 8
Pametno postavljanje programerskih pitanja .................................................................................. 9
Rezime...............................................................................................................................................................10

DEO I
POGLAVLJE 1 13
Osnove Pythona .......................................................13
Unoenje izraza u interaktivnu konzolu ..............................................................................................14
Vrste podataka celog broja, pokretne take i niza ................................................................................16
Spajanje i ponavljanje niza .......................................................................................................................17
uvanje vrednosti u promenljivim ........................................................................................................18
Iskazi dodele ..........................................................................................................................................18
Nazivi promenljivih .............................................................................................................................20
Va prvi program ..........................................................................................................................................21
Analiza programa ..........................................................................................................................................22
Komentari ...............................................................................................................................................22
Funkcija print() ......................................................................................................................................23
Funkcija input() .....................................................................................................................................23
tampanje imena korisnika .............................................................................................................24
Funkcija len() ..........................................................................................................................................24
vi Sadraj

Funkcije str(), int() i float()...................................................................................................................25


Rezime ...............................................................................................................................................................28
Praktina pitanja ............................................................................................................................................29

POGLAVLJE 2 31
Kontrola toka ..........................................................31
Bulove (logike) vrednosti .........................................................................................................................32
Operatori poreenja ....................................................................................................................................33
Bulovi (logiki) operatori ............................................................................................................................35
Binarni Bulovi operatori .....................................................................................................................35
Operator not ..........................................................................................................................................36
Meanje Bulovih operatora i operatora poreenja ..........................................................................36
Elementi kontrole toka ................................................................................................................................37
Uslovi ........................................................................................................................................................37
Blokovi koda ...........................................................................................................................................37
Izvravanje programa ..................................................................................................................................38
Iskazi kontrole toka .......................................................................................................................................38
Iskazi if ......................................................................................................................................................38
Iskazi else .................................................................................................................................................39
Iskazi elif....................................................................................................................................................40
Petlje while..............................................................................................................................................45
Dosadna petlja while...................................................................................................................47
Iskazi break .............................................................................................................................................49
Iskazi continue .......................................................................................................................................50
Petlja for i funkcija range().................................................................................................................53
Ekvivalentna petlja while ..........................................................................................................55
Argumenti za poetak, zaustavljanje i korake funkcije range().................................56
Importovanje modula .................................................................................................................................57
Iskazi from import ................................................................................................................................58
Ranije zavravanje programa pomou funkcije sys .exit()............................................................58
Rezime ...............................................................................................................................................................59
Praktina pitanja.............................................................................................................................................59

POGLAVLJE 3..............................................................................................61
Funkcije ...............................................................61
Iskazi def sa parametrima ..........................................................................................................................63
Vraene vrednosti i iskazi return .............................................................................................................63
Vrednost None................................................................................................................................................65
Argumenti kljune rei i funkcija print()................................................................................................65
Lokalni i globalni opseg vidljivosti .........................................................................................................66
Lokalne promenljive ne mogu da se upotrebe u globalnom opsegu vidljivosti...........67
Lokalni opsezi vidljivosti ne mogu da koriste promenljive u drugim lokalnim
opsezima vidljivosti .......................................................................................................................68
Globalne promenljive mogu da se itaju iz lokalnog opsega vidljivosti ..........................69
Lokalne i globalne promenljive koje imaju isti naziv ..............................................................69
Iskaz global ......................................................................................................................................................70
Rukovanje izuzecima ...................................................................................................................................72
Kratak program: Guess the Number ......................................................................................................74
Sadraj vii

Rezime ...............................................................................................................................................................76
Praktina pitanja ............................................................................................................................................76
Praktini projekti ...........................................................................................................................................77
The Collatz Sequence .........................................................................................................................77
Provera ispravnosti unosa..................................................................................................................77

POGLAVLJE 4 79
Liste...................................................................79
Vrsta podataka liste ......................................................................................................................................80
Dobijanje pojedinanih vrednosti u listi pomou indeksa ...................................................80
Negativni indeksi ..................................................................................................................................82
Dobijanje podliste pomou iseaka ..............................................................................................82
Dobijanje duine liste pomou funkcije len().............................................................................83
Menjanje vrednosti u listi pomou indeksa ................................................................................83
Spajanje i ponavljanje liste ...............................................................................................................83
Uklanjanje vrednosti iz liste pomou iskaza del ........................................................................84
Upotreba listi ..................................................................................................................................................84
Upotreba petlji for u listama ............................................................................................................86
Operatori in i not in .............................................................................................................................87
Trik viestruke dodele .........................................................................................................................87
Operatori naglaene dodele .....................................................................................................................88
Metodi ...............................................................................................................................................................89
Pronalaenje vrednosti u listi pomou metoda index()........................................................89
Dodavanje vrednosti u liste pomou metoda append() i insert().......................................89
Uklanjanje vrednosti iz liste pomou metoda remove().........................................................90
Sortiranje vrednosti u listi pomou metoda sort()................................................................... 91
Primer programa: Magic 8 Ball sa listom...............................................................................................92
Vrste sline listama: nizovi i zapisi ...........................................................................................................93
Promenljive i nepromenljive vrste podataka .............................................................................94
Vrsta podataka zapisa .........................................................................................................................96
Konvertovanje vrsta pomou funkcija list() i tuple().................................................................97
Reference .........................................................................................................................................................97
Prelazne reference ............................................................................................................................ 100
Funkcije copy() i deepcopy() modula copy ......................................................................... 100
Rezime ............................................................................................................................................................ 101
Praktina pitanja ......................................................................................................................................... 102
Praktini projekti ........................................................................................................................................ 102
Comma Code ...................................................................................................................................... 102
Character Picture Grid ..................................................................................................................... 103

POGLAVLJE 5 105
Renici i strukturiranje podataka...................................... 105
Vrsta podataka renika ............................................................................................................................. 105
Renici nasuprot listi ........................................................................................................................ 106
Metodi keys(), values() i items()..................................................................................................... 107
Provera da li klju ili vrednost postoje u reniku ................................................................... 109
Metod get()........................................................................................................................................... 109
Metod setdefault()............................................................................................................................. 110
viii Sadraj

Lepo tampanje........................................................................................................................................... 111


Upotreba struktura podataka za modelovanje stvarnih stvari .................................................. 112
Tabla za Iks-oks igricu ...................................................................................................................... 113
Ugneeni renici i liste .................................................................................................................. 117
Rezime ............................................................................................................................................................ 119
Praktina pitanja ......................................................................................................................................... 119
Praktini projekti ........................................................................................................................................ 120
Inventar fantazi igre ......................................................................................................................... 120
Lista za funkcije renika za inventar fantazi igre..................................................................... 120

POGLAVLJE 6 123
Manipulisanje nizovima............................................... 123
Upotreba nizova ......................................................................................................................................... 123
Literali niza............................................................................................................................................ 124
Dvostruki navodnici.................................................................................................................. 124
Karakteri izlazne sekvence...................................................................................................... 124
Nepreraeni nizovi ................................................................................................................... 125
Vielinijski nizovi sa trostrukim navodnicima ................................................................. 125
Vielinijski komentari................................................................................................................ 126
Indeksiranje i isecanje nizova ........................................................................................................ 126
Operatori in i not in u nizovima ................................................................................................... 127
Korisni metodi niza .................................................................................................................................... 127
Metodi niza upper(), lower(), isupper() i islower()................................................................... 128
Metodi niza isX ................................................................................................................................... 129
Metodi niza startswith() i endswith()........................................................................................... 131
Metodi niza join() i split()................................................................................................................. 131
Poravnanje teksta pomou rjust(), ljust() i center() metoda .............................................. 133
Uklanjanje karaktera razmaka pomou strip(), rstrip() i lstrip() metoda ........................ 134
Kopiranje i pejstovanje nizova pomou modula pyperclip ............................................... 135
Projekat: Klju lozinke ............................................................................................................................... 136
Korak 1: Dizajn programa i strukture podataka ...................................................................... 136
Korak 2: Upotrebite argumente komandne linije .................................................................. 137
Korak 3: Kopiranje prave lozinke .................................................................................................. 137
Projekat: Dodavanje oznake nabrajanja u Wiki lanak ................................................................. 139
Korak 1: Kopiranje i pejstovanje iz klipborda .......................................................................... 139
Korak 2: Razdvajanje linija teksta i dodavanje zvezde.......................................................... 140
Korak 3: Spajanje modifikovanih linija ....................................................................................... 141
Rezime ............................................................................................................................................................ 141
Praktina pitanja ......................................................................................................................................... 142
Praktini projekti ........................................................................................................................................ 143
Stoni tampa ..................................................................................................................................... 143

DEO II
POGLAVLJE 7 147
Podudaranje ablona pomou regularnih izraza........................ 147
Pronalaenje ablona teksta bez regularnih izraza ........................................................................ 148
Pronalaenje ablona teksta pomou regularnih izraza .............................................................. 150
Sadraj ix

Kreiranje regex objekata ................................................................................................................. 150


Podudaranje regex objekata ......................................................................................................... 151
Pregled podudaranja regularnih izraza ..................................................................................... 152
Vie podudaranja ablona upotrebom regularnih izraza ............................................................ 152
Grupisanje pomou zagrada ......................................................................................................... 152
Podudaranje vie grupa pomou vertikalne crte................................................................... 153
Opciono podudaranje upotrebom upitnika ............................................................................ 154
Podudaranje nula ili vie primera teksta pomou zvezdice .............................................. 155
Podudaranje jednog ili vie primera teksta pomou znaka plus...................................... 155
Podudaranje specifinih ponavljanja upotrebom velikih zagrada ................................. 156
Gramzivo i negramzivo podudaranje .......................................................................................... 156
Metod findall().............................................................................................................................................. 157
Klase karaktera ............................................................................................................................................ 158
Kreiranje sopstvenih klasa karaktera ................................................................................................... 159
Karakteri znaka za umetanje i znaka za dolar .................................................................................. 159
Karakter zamene ......................................................................................................................................... 160
Podudaranje svega upotrebom take i zvezdice ................................................................... 161
Podudaranje novih linija pomou karaktera take ............................................................... 162
Pregled regex simbola ............................................................................................................................. 162
Podudaranje neosetljivo na veliinu slova ....................................................................................... 163
Zamena nizova pomou metoda sub()............................................................................................... 163
Upravljanje sloenim regexima ............................................................................................................ 164
Kombinovanje promenljivih re .IGNORECASE, re .DOTALL i re.VERBOSE .............................. 164
Projekat: Ekstraktor telefonskog broja i e-mail adrese ................................................................. 165
Korak 1: Kreiranje regexa za brojeve telefona ......................................................................... 166
Korak 2: Kreiranje regexa za e-mail adrese ............................................................................... 166
Korak 3: Pronalaenje svih podudaranja u klipbord tekstu................................................ 167
Korak 4: Spajanje podudaranja u niz za klipbord................................................................... 168
Pokretanje programa ....................................................................................................................... 169
Ideje za sline programe ................................................................................................................. 169
Rezime ............................................................................................................................................................ 169
Praktina pitanja ......................................................................................................................................... 170
Praktini projekti ........................................................................................................................................ 172
Detekcija jake lozinke ...................................................................................................................... 172
Regex verzija metoda strip()........................................................................................................... 172

POGLAVLJE 8 173
itanje i pisanje fajlova............................................... 173
Fajlovi i putanje fajlova ............................................................................................................................ 173
Obrnuta kosa crta na Windowsu i kosa crta na OS X i Linuxu ........................................... 174
Aktuelni radni direktorijum ........................................................................................................... 175
Apsolutne, nasuprot relativnih putanja .................................................................................... 175
Kreiranje novih direktorijuma pomou funkcije os .makedirs()........................................ 176
Modul os.path ............................................................................................................................................. 177
Rukovanje apsolutnim i relativnim putanjama ...................................................................... 177
Pronalaenje veliina fajla i sadraja direktorijuma .............................................................. 179
Provera validnosti putanje ............................................................................................................. 180
Proces itanja/pisanja fajla ..................................................................................................................... 180
Otvaranje fajlova pomou funkcije open()............................................................................... 181
x Sadraj

itanje sadraja fajlova .................................................................................................................... 182


Pisanje u fajlove ................................................................................................................................. 183
Snimanje promenljivih pomou modula shelve ............................................................................ 184
Snimanje promenljivih pomou funkcije pprint .pformat()........................................................ 185
Projekat: Generisanje nasuminih fajlova za test ........................................................................... 186
Korak 1: uvanje podataka testa u reniku .............................................................................. 187
Korak 2: Kreiranje fajla testa i meanje redosleda pitanja .................................................. 188
Korak 3: Kreiranje opcija za odgovor .......................................................................................... 189
Korak 4: Pisanje sadraja za test i fajlova za odgovore ........................................................ 189
Projekat: Multiklipbord ............................................................................................................................ 191
Korak 1: Komentari i podeavanja ............................................................................................... 192
Korak 2: Snimanje sadraja klipborda pomou kljunih rei ............................................. 192
Korak 3: Listanje kljunih rei i uitavanje sadraja kljune rei ....................................... 193
Rezime ............................................................................................................................................................ 194
Praktina pitanja ......................................................................................................................................... 194
Praktini projekti ........................................................................................................................................ 194
Proirenje multiklipborda ............................................................................................................... 194
Mad Lib program ............................................................................................................................... 195
Pretraivanje regexa.......................................................................................................................... 195

POGLAVLJE 9 197
Organizovanje fajlova ................................................ 197
Modul shutil ................................................................................................................................................. 198
Kopiranje fajlova i direktorijuma ................................................................................................. 198
Pomeranje i promena naziva fajlova i direktorijuma ........................................................... 199
Trajno brisanje fajlova i direktorijuma ....................................................................................... 200
Bezbedno brisanje pomou modula send2trash .................................................................. 201
Pregled stabla direktorijuma ................................................................................................................. 202
Kompresovanje fajlova pomou modula zipfile ............................................................................. 203
itanje ZIP fajlova .............................................................................................................................. 204
Ekstrahovanje iz ZIP fajlova ........................................................................................................... 205
Kreiranje i dodavanje u ZIP fajlove .............................................................................................. 205
Projekat: Menjanje naziva fajlova sa datuma
u amerikom stilu na datum u evropskom stilu ....................................................................... 206
Korak 1: Kreiranje regexa za datume u amerikom stilu ..................................................... 206
Korak 2: Identifikovanje delova datuma iz naziva fajlova ................................................... 207
Korak 3: Formiranje novih i promena postojeih naziva fajlova ...................................... 209
Ideje za sline programe ................................................................................................................. 209
Projekat: Kreiranje rezervne kopije direktorijuma u ZIP fajl ....................................................... 209
Korak 1: Razumevanje naziva ZIP fajla ....................................................................................... 210
Korak 2: Kreiranje novog ZIP fajla ................................................................................................ 211
Korak 3: Pregled stabla direktorijuma i dodavanje u ZIP fajl ............................................. 211
Ideje za sline programe ................................................................................................................. 212
Rezime ............................................................................................................................................................ 213
Praktina pitanja ......................................................................................................................................... 213
Praktini projekti ........................................................................................................................................ 213
Selektivno kopiranje ......................................................................................................................... 213
Brisanje nepotrebnih fajlova ......................................................................................................... 214
Popunjavanje praznina.................................................................................................................... 214
Sadraj xi

POGLAVLJE 10 215
Ispravljanje greaka.................................................. 215
Podizanje izuzetaka ................................................................................................................................... 216
Dobijanje povratne informacije kao niza .......................................................................................... 217
Navodi ............................................................................................................................................................ 219
Upotreba navoda u simulaciji semafora ................................................................................... 219
Iskljuivanje navoda ......................................................................................................................... 221
Evidentiranje ................................................................................................................................................ 221
Upotreba modula logging ............................................................................................................. 221
Nemojte ispravljati greku pomou funkcije print().............................................................. 223
Nivoi evidentiranja ............................................................................................................................ 223
Iskljuivanje evidentiranja .............................................................................................................. 224
Evidentiranje u fajl ............................................................................................................................ 225
IDLE-ova funkcija za ispravljanje greke ............................................................................................ 225
Go ............................................................................................................................................................ 226
Step ........................................................................................................................................................ 226
Over ........................................................................................................................................................ 226
Out .......................................................................................................................................................... 227
Quit ......................................................................................................................................................... 227
Ispravljanje greaka u programu za dodavanje brojeva ..................................................... 227
Take prekida ...................................................................................................................................... 229
Rezime ............................................................................................................................................................ 231
Praktina pitanja i zadaci.......................................................................................................................... 231
Praktini projekti ........................................................................................................................................ 232
Ispravljanje greaka u programu bacanja novia................................................................. 232

POGLAVLJE 11 233
Web isecanje......................................................... 233
Projekat: mapIt .py sa modulom Webbrowser ................................................................................ 234
Korak 1: Otkrivanje URL-a ............................................................................................................... 234
Korak 2: Rukovanje argumentima komandne linije .............................................................. 235
Korak 3: Rukovanje sadrajem klipborda i pokretanje pretraivaa ............................... 236
Ideje za sline programe ................................................................................................................. 236
Preuzimanje fajlova sa Weba pomou modula Requests ........................................................... 237
Preuzimanje web stranica pomou funkcije requests.get()................................................ 237
Provera greaka .................................................................................................................................. 238
Snimanje preuzetih fajlova na hard drajv ......................................................................................... 239
HTML ............................................................................................................................................................... 240
Izvori za uenje HTML-a .................................................................................................................. 240
Kratak podsetnik................................................................................................................................. 240
Pregled izvornog HTML-a web stranice .................................................................................... 241
Otvaranje alatki za programiranje u pretraivau ................................................................. 242
Upotreba alatki za programiranje za pronalaenje HTML elemenata ........................... 244
Analiza HTML-a pomou modula Beautiful Soup .......................................................................... 245
Kreiranje Beautiful Soup objekta iz HTML-a ............................................................................ 245
Pronalaenje elementa pomou metoda select().................................................................. 246
Dobijanje podataka iz atributa elementa ................................................................................. 248
xii Sadraj

Projekat: Im Feeling Lucky Google pretraga ............................................................................... 248


Korak 1: Upotreba argumenta komandne linije i traenje pretrage stranice .............. 249
Korak 2: Pronalaenje svih rezultata ........................................................................................... 249
Korak 3: Otvaranje web pretraivaa za svaki rezultat ......................................................... 250
Ideje za sline programe ................................................................................................................. 251
Projekat: Preuzimanje svih XKCD stripova ........................................................................................ 251
Korak 1: Dizajniranje programa .................................................................................................... 252
Korak 2: Preuzimanje web stranice ............................................................................................. 253
Korak 3: Pronalaenje i preuzimanje slike stripa .................................................................... 254
Korak 4: Snimanje slike i pronalaenje prethodnog stripa ................................................. 255
Ideje za sline programe ................................................................................................................. 256
Kontrola pretraivaa pomou modula Selenium ......................................................................... 256
Pokretanje pretraivaa kontrolisanog modulom Selenium ............................................. 256
Pronalaenje elemenata na stranici ............................................................................................ 257
Klik na stranicu ................................................................................................................................... 259
Popunjavanje i slanje formulara .................................................................................................. 259
Slanje specijalnih kljueva ............................................................................................................. 260
Klik na dugmad pretraivaa ......................................................................................................... 261
Vie informacija o Seleniumu ........................................................................................................ 261
Rezime............................................................................................................................................................. 261
Praktina pitanja ......................................................................................................................................... 261
Praktini projekti ........................................................................................................................................ 262
Program za slanje e-mailova iz komandne linije ................................................................... 262
Program za preuzimanje slika ....................................................................................................... 263
2048 ........................................................................................................................................................ 263
Potvrivanje linka............................................................................................................................... 263

POGLAVLJE 12 265
Upotreba Excel tabela ................................................ 265
Excel dokumenti ......................................................................................................................................... 266
Instaliranje modula openpyxl ................................................................................................................ 266
itanje Excel dokumenata ...................................................................................................................... 266
Otvaranja Excel dokumenata pomou openpyxla ................................................................ 267
Dobijanje radnih listova iz radne sveske ................................................................................... 268
Dobijanje elija iz listova ................................................................................................................ 268
Konvertovanje izmeu slova i brojeva kolone ....................................................................... 270
Dobijanje redova i kolona iz listova ............................................................................................ 270
Radne sveske, radni listovi i elije ................................................................................................ 272
Projekat: itanje podataka iz tabele .................................................................................................... 272
Korak 1: itanje podataka iz tabele ............................................................................................. 273
Korak 2: Popunjavanje strukture podataka .............................................................................. 274
Korak 3: Pisanje rezultata u fajl ..................................................................................................... 275
Ideje za sline programe ................................................................................................................. 276
Pisanje Excel dokumenata ...................................................................................................................... 277
Kreiranje i snimanje Excel dokumenata .................................................................................... 277
Kreiranje i uklanjanje radnih listova ........................................................................................... 278
Pisanje vrednosti u elije ................................................................................................................ 278
Projekat: Auriranje tabele ..................................................................................................................... 279
Sadraj xiii

Korak 1: Podeavanje strukture podataka sa auriranim informacijama ...................... 280


Korak 2: Provera svih redova i auriranje nepravilnih cena ............................................... 281
Ideje za sline programe ................................................................................................................. 281
Podeavanje stila fonta elija ................................................................................................................. 282
Font objekti .................................................................................................................................................. 282
Formule ......................................................................................................................................................... 284
Podeavanje redova i kolona ................................................................................................................. 285
Podeavanje visine reda i irine kolone ..................................................................................... 286
Spajanje i rastavljanje elija ........................................................................................................... 286
Zamrznuta okna ............................................................................................................................. 287
Grafikoni ........................................................................................................................................................ 288
Rezime ............................................................................................................................................................ 290
Praktina pitanja ......................................................................................................................................... 291
Praktini projekti ........................................................................................................................................ 291
Kreator tablice mnoenja ............................................................................................................... 291
Ubaciva praznog reda ................................................................................................................... 292
Invertor elije tabele ........................................................................................................................ 292
Konvertovanje tekstualnih fajlova u tabelu ............................................................................. 293
Konvertovanje tabele u tekstualne fajlove .............................................................................. 293

POGLAVLJE 13 295
Upotreba PDF i Word dokumenata .................................... 295
PDF dokumenti ........................................................................................................................................... 295
Ekstrahovanje teksta iz PDF fajlova ............................................................................................ 296
Dekodiranje PDF fajlova ................................................................................................................. 297
Kreiranje PDF fajlova ........................................................................................................................ 298
Kopiranje stranica...................................................................................................................... 299
Rotiranje stranica....................................................................................................................... 300
Preklapanje stranica ................................................................................................................. 301
Kodiranje PDF fajlova............................................................................................................... 302
Projekat: Kombinovanje selektovanih stranica
iz vie PDF fajlova ................................................................................................................................. 303
Korak 1: Pronaite sve PDF fajlove .............................................................................................. 304
Korak 2: Otvorite svaki PDF ............................................................................................................ 304
Korak 3: Dodajte svaku stranicu ................................................................................................... 305
Korak 4: Snimite rezultate .............................................................................................................. 305
Ideje za sline programe ................................................................................................................. 306
Word dokumenti ........................................................................................................................................ 306
itanje Word dokumenata ................................................................................................................ 307
Dobijanje celog teksta iz .docx fajla ........................................................................................... 308
Stilizovanje objekata Paragraph i Run........................................................................................ 309
Kreiranje Word dokumenata sa nestandardnim stilovima ................................................. 310
Atributi objekta Run.......................................................................................................................... 311
Pisanje Word dokumenata ............................................................................................................. 312
Dodavanje naslova ........................................................................................................................... 314
Dodavanje preloma reda i preloma stranice............................................................................ 315
Dodavanje slika .................................................................................................................................. 315
Rezime ............................................................................................................................................................ 316
xiv Sadraj

Praktina pitanja ......................................................................................................................................... 316


Praktini projekti ........................................................................................................................................ 317
PDF paranoja ....................................................................................................................................... 317
Pozivnice kao Word dokumenti ................................................................................................... 317
Brutalni ruitelj PDF lozinke........................................................................................................ 318

POGLAVLJE 14 319
Upotreba CSV fajlova i JSON podataka................................. 319
Modul csv ...................................................................................................................................................... 320
Objekti Reader .................................................................................................................................... 321
itanje podataka iz objekata Reader u petlji for .................................................................... 322
Objekti Writer ...................................................................................................................................... 322
Argumenti kljunih rei delimiter i lineterminator ............................................................... 323
Projekat: Uklanjanje zaglavlja iz CSV fajlova .................................................................................... 324
Korak 1: Kruenje kroz svaki CSV fajl .......................................................................................... 325
Korak 2: Uitavanje CSV fajla ......................................................................................................... 325
Korak 3: Ispisivanje CSV fajla bez prvog reda .......................................................................... 326
Ideje za sline programe ................................................................................................................. 327
JSON i API ...................................................................................................................................................... 327
Modul json .................................................................................................................................................... 328
itanje JSON-a pomou funkcije loads().................................................................................... 328
Pisanje JSON-a pomou funkcije dumps()................................................................................ 329
Projekat: Prikazivanje aktuelnih podataka o vremenskoj prognozi ........................................ 329
Korak 1: Dobijanje lokacije iz argumenta komandne linije ................................................ 330
Korak 2: Preuzimanje JSON podataka ........................................................................................ 330
Korak 3: Uitavanje JSON podataka i tampanje vremenske prognoze ........................ 331
Ideje za sline programe ................................................................................................................. 332
Rezime ............................................................................................................................................................ 333
Praktina pitanja.......................................................................................................................................... 333
Praktini projekat ....................................................................................................................................... 333
Konvertor Excel-u-CSV...................................................................................................................... 333

POGLAVLJE 15 335
Evidencija vremena, rasporeivanje zadataka
i pokretanje programa................................................ 335
Modul time ................................................................................................................................................... 336
Funkcija time .time().......................................................................................................................... 336
Funkcija time.sleep()......................................................................................................................... 337
Zaokruivanje brojeva .............................................................................................................................. 338
Projekat: Super toperica ........................................................................................................................ 338
Korak 1: Podeavanje programa da prati vreme .................................................................... 339
Korak 2: Praenje i tampanje vremena kruga ........................................................................ 339
Ideje za sline programe ................................................................................................................. 340
Modul datetime .......................................................................................................................................... 341
Vrsta podataka timedelta ............................................................................................................... 342
Pauziranje do specifinog datuma ............................................................................................. 344
Konvertovanje datetime objekata u nizove ............................................................................ 344
Konvertovanje nizova u datetime objekte ............................................................................... 345
Sadraj xv

Pregled Pythonovih funkcija Time ....................................................................................................... 346


Vienitni rad ................................................................................................................................................. 347
Prosleivanje argumenata u ciljnu funkciju niti .................................................................... 348
Problemi konkurencije .................................................................................................................... 349
Projekat: Vienitni XKCD program za preuzimanje ........................................................................ 349
Korak 1: Modifikovanje programa da koristi funkciju .......................................................... 350
Korak 2: Kreiranje i pokretanje niti .............................................................................................. 351
Korak 3: Saekajte da se sve niti zavre ..................................................................................... 352
Pokretanje drugih programa iz Pythona ........................................................................................... 352
Prosleivanje argumenata komandne linije u funkciju Popen()....................................... 354
Task Scheduler, launchd i cron ..................................................................................................... 354
Otvaranje web sajtova pomou Pythona ................................................................................. 355
Pokretanje drugih Python skriptova .......................................................................................... 355
Otvaranje programa pomou standardnih aplikacija .......................................................... 355
Projekat: Jednostavan program za odbrojavanje .......................................................................... 357
Korak 1: Odbrojavanje ..................................................................................................................... 357
Korak 2: Reprodukovanje zvunog fajla .................................................................................... 358
Ideje za sline programe ................................................................................................................. 358
Rezime ............................................................................................................................................................ 359
Praktina pitanja ......................................................................................................................................... 359
Praktini projekti ........................................................................................................................................ 360
Ulepana toperica ........................................................................................................................ 360
Program za preuzimanje web stripova sa rasporedom........................................................ 360

POGLAVLJE 16 361
Slanje e-maila i tekstualnih poruka.................................... 361
SMTP ............................................................................................................................................................... 362
Slanje e-maila .............................................................................................................................................. 362
Povezivanje na SMTP server .......................................................................................................... 363
Slanje SMTP Hello poruke ........................................................................................................... 364
Pokretanje TLS enkripcije ............................................................................................................... 364
Prijava na SMTP server ..................................................................................................................... 364
Slanje e-maila ...................................................................................................................................... 365
Diskonektovanje sa SMTP servera ............................................................................................... 366
IMAP ................................................................................................................................................................ 366
Vraanje i brisanje e-mailova pomou IMAP-a ................................................................................ 366
Konektovanje na IMAP server ....................................................................................................... 367
Prijava na IMAP server ..................................................................................................................... 368
Pretraivanje e-maila ........................................................................................................................ 368
Biranje direktorijuma................................................................................................................ 368
Izvravanje pretrage................................................................................................................. 369
Ogranienja veliine................................................................................................................. 371
Preuzimanje i oznaavanje e-maila kao proitanog ............................................................. 372
Dobijanje e-mail adrese iz neobraene poruke ..................................................................... 373
Dobijanje teksta iz neobraene poruke .................................................................................... 374
Brisanje e-mailova ............................................................................................................................. 375
Diskonektovanje sa IMAP servera ............................................................................................... 375
Projekat: Slanje podsetnika za plaanje lanarine e-mailom ..................................................... 376
xvi Sadraj

Korak 1: Otvaranje Excel fajla ........................................................................................................ 376


Korak 2: Pronalaenje svih lanova koji nisu platili lanarinu ........................................... 378
Korak 3: Slanje prilagoenih podsetnika e-mailom .............................................................. 378
Slanje tekstualnih poruka pomou servisa Twilio .......................................................................... 380
Prijava za Twilio nalog ..................................................................................................................... 380
Slanje tekstualnih poruka ............................................................................................................... 381
Projekat: Just Text Me modul ................................................................................................................ 383
Rezime ............................................................................................................................................................ 384
Praktina pitanja ......................................................................................................................................... 384
Praktini projekti ........................................................................................................................................ 385
Program koji nasumino alje e-mailove za izvravanje zadataka................................... 385
Podsetnik za kiobran ...................................................................................................................... 385
Automatska odjava ........................................................................................................................... 385
Kontrolisanje raunara korienjem e-maila............................................................................ 386

POGLAVLJE 17 387
Manipulisanje slikama................................................ 387
Osnove raunarskih slika ......................................................................................................................... 388
Boje i RGBA vrednosti ...................................................................................................................... 388
Koordinate i torke okvira ................................................................................................................ 389
Manipulisanje slikama pomou modula Pillow .............................................................................. 390
Upotreba vrste podataka slika ...................................................................................................... 392
Opsecanje slika ................................................................................................................................... 393
Kopiranje i pejstovanje slika u druge slike ............................................................................... 394
Promena veliine slike ..................................................................................................................... 397
Rotiranje i preslikavanje slika ........................................................................................................ 398
Menjanje pojedinanih piksela .................................................................................................... 400
Projekat: Dodavanje logotipa ................................................................................................................ 401
Korak 1: Otvaranje slike logotipa ................................................................................................. 401
Korak 2: Kruenje kroz sve fajlove i otvaranje slika ............................................................... 402
Korak 3: Promena veliine slike .................................................................................................... 403
Korak 4: Dodavanje logotipa i snimanje promena ................................................................ 404
Ideje za sline programe ................................................................................................................. 406
Crtanje na slikama....................................................................................................................................... 406
Crtanje oblika ...................................................................................................................................... 406
Take.............................................................................................................................................. 406
Linije............................................................................................................................................... 406
Pravougaonici............................................................................................................................. 407
Elipse.............................................................................................................................................. 407
Mnogougaonici.......................................................................................................................... 407
Primer crtanja.............................................................................................................................. 407
Crtanje teksta ...................................................................................................................................... 408
Rezime ............................................................................................................................................................ 410
Praktina pitanja ......................................................................................................................................... 410
Praktini projekti ........................................................................................................................................ 411
Proirenje i ispravljanje programa iz projekta poglavlja...................................................... 411
Identifikovanje direktorijuma koji sadre fotografije na hard drajvu ............................. 411
Posebne kartice za sedita.............................................................................................................. 412
Sadraj xvii

POGLAVLJE 18 413
Kontrolisanje tastature i mia pomou GUI automatizacije.............. 413
Instaliranje modula pyautogui .............................................................................................................. 414
Ostajanje na putu ....................................................................................................................................... 414
Iskljuivanje svega odjavljivanjem .............................................................................................. 414
Pauze i bezbednost sistema u sluaju otkaza ......................................................................... 415
Kontrolisanje pokreta mia ..................................................................................................................... 415
Pomeranje mia ................................................................................................................................. 416
Dobijanje pozicije mia ................................................................................................................... 417
Projekat: Gde je moj mi trenutno? .................................................................................................. 417
Korak 1: Importovanje modula ..................................................................................................... 418
Korak 2: Podeavanje koda za zatvaranje i beskonane petlje ......................................... 418
Korak 3: Dobijanje i tampanje koordinata mia ................................................................... 418
Kontrolisanje interakcije mia ............................................................................................................... 419
Klik miem ............................................................................................................................................ 420
Prevlaenje mia ................................................................................................................................ 420
Skrolovanje tokia mia ................................................................................................................ 422
Upotreba ekrana ........................................................................................................................................ 423
Dobijanje snimka ekrana ................................................................................................................ 423
Analiziranje snimka ekrana ............................................................................................................ 424
Projekat: Proirenje programa mouseNow ...................................................................................... 424
Prepoznavanje slike .................................................................................................................................. 425
Kontrolisanje tastature ............................................................................................................................. 426
Slanje niza sa tastature .................................................................................................................... 426
Nazivi tastera........................................................................................................................................ 427
Pritiskanje i otputanje tastature ................................................................................................. 428
Kombinacije vruih tastera ......................................................................................................... 429
Pregled funkcija PyAutoGUI ................................................................................................................... 430
Projekat: Automatsko popunjavanje formulara ............................................................................. 430
Korak 1: Otkrivanje koraka ............................................................................................................. 432
Korak 2: Podeavanje koordinata ................................................................................................ 432
Korak 3: Poetak kucanja podataka ............................................................................................ 434
Korak 4: Rukovanje listama za selekciju i radio-dugmadima ............................................. 435
Korak 5: Prosleivanje formulara i ekanje .............................................................................. 436
Rezime ............................................................................................................................................................ 437
Praktina pitanja ......................................................................................................................................... 438
Praktini projekti ........................................................................................................................................ 438
Izgleda zauzeto .................................................................................................................................. 438
Robot za slanje poruka .................................................................................................................... 438
Uputstvo za robota za igranje igrice........................................................................................... 439

DODATAK A 441
Instaliranje nezavisnih modula........................................ 441
Alatka pip ...................................................................................................................................................... 441
Instaliranje nezavisnih modula ............................................................................................................. 442
xviii Sadraj

DODATAK B 443
Pokretanje programa ................................................ 443
ebeng linija ................................................................................................................................................ 443
Pokretanje Python programa na Windowsu .................................................................................... 444
Pokretanje Python programa na OS X-u i Linuxu ........................................................................... 445
Pokretanje Python programa sa iskljuenim izjavama ................................................................ 445

DODATAK C 447
Odgovori na praktina pitanja ........................................ 447
Poglavlje 1..................................................................................................................................................... 448
Poglavlje 2..................................................................................................................................................... 448
Poglavlje 3..................................................................................................................................................... 450
Poglavlje 4..................................................................................................................................................... 450
Poglavlje 5..................................................................................................................................................... 451
Poglavlje 6..................................................................................................................................................... 452
Poglavlje 7..................................................................................................................................................... 452
Poglavlje 8..................................................................................................................................................... 453
Poglavlje 9..................................................................................................................................................... 454
Poglavlje 10................................................................................................................................................... 454
Poglavlje 11................................................................................................................................................... 455
Poglavlje 12................................................................................................................................................... 456
Poglavlje 13................................................................................................................................................... 457
Poglavlje 14................................................................................................................................................... 458
Poglavlje 15................................................................................................................................................... 458
Poglavlje 16................................................................................................................................................... 458
Poglavlje 17................................................................................................................................................... 459
Poglavlje 18................................................................................................................................................... 459
INDEKS .............................................................. 461
UVOD

MOJ CIMER JE RADIO U PRODAVNICI ELEKTRONIKE. POVREMENO, PRODAVNICA


JE PRIMALA TABELE SA CENAMA HILJADA PROIZVODA PO KOJIMA SU KONKU-
RENTI PRODAVALI PROIZVODE. TIM OD TRI RADNIKA BI TAMPAO TABELU I
DOBILI BI VELIKU GOMILU PAPIRA. ZA SVAKU CENU PROIZVODA U TABELI ONI
BI POTRAILI CENU PO KOJOJ NJIHOVA PRODAVNICA PRODAJE PROIZVOD I BELE-
ILI SVE PROIZVODE KOJE SU KONKURENTI PRODAVALI JEFTINIJE. OVAJ POSAO JE,
OBINO, TRAJAO NEKOLIKO DANA.

Mogao bih da napiem program koji e to uraditi ako imate originalni fajl za tampu,
rekao im je moj cimer kada ih je video da sede na podu sa razbacanim i nagomilanim
papirima oko sebe.
Nakon nekoliko sati, on je imao kratak program koji je itao cene konkurenata iz fajla,
pronalazio proizvod u bazi podataka prodavnice i oznaavao da li je cena konkurenta nia.
Ovaj program je zahtevao svega nekoliko sekundi za pokretanje.
To je mo raunarskog programiranja. Raunar je kao vajcarski vojni no koji moete
da konfiguriete za bezbroj zadataka. Mnogi ljudi provode sate klikui i kucujui za

1
2 UVOD

izvravanje ponavljajuih zadataka i nisu svesni da maina koju koriste moe da obavi taj
posao za nekoliko sekundi ako joj se daju odgovarajue instrukcije.

Za koga je ova knjiga?


Softver je, u osnovi, skup raznih alata koje danas koristimo. Skoro svako koristi drutvene
mree za komunikaciju, mnogi ljudi imaju raunare povezane na Internet u svojim tele-
fonima i veina kancelarijskih poslova ukljuuj interakciju sa raunarom da bi posao
bio izvren. Kao rezultat svega toga, potranja za ljudima koji znaju da programiraju je u
ogromnom porastu. Reklame za nebrojene knjige, interaktivne web tutorijale i kampove
za programere obeavaju da e ambiciozne poetnike pretvoriti u softverske inenjere sa
estocifrenim zaradama.
Ova knjiga nije za ljude koji u to veruju. Ona je za sve ostale.
Ova knjiga vas nee pretvoriti u profesionalnog programera vie nego to e nekoliko
asova sviranja na gitari da vas pretvori u rok zvezdu. Meutim, ako obavljate kancelarijske
poslove, poslove administratora, predavaa ili neki drugi posao za koji je potreban raunar
za rad ili zabavu, nauiete osnove programiranja da biste mogli da automatizujete jedno-
stavne zadatke, kao to su sledei:
pomeranje i promena naziva hiljada fajlova i sortiranje tih fajlova u direktorijume
popunjavanje online formulara, bez kucanja
preuzimanje fajlova ili kopija teksta sa web sajta kad god je auriran
podeavanje raunara da alje odreena obavetenja
auriranje i formatiranje Excel tabela
provera e-maila i slanje unapred napisanih odgovora
Ovi zadaci su jednostavni, ali korisnicima oduzimaju vreme i esto su veoma trivijalni ili
specifini da ne postoji ve napisan softver za njihovo izvrenje. Naoruani sa malo pro-
gramerskog znanja, moete da obezbedite da raunar izvri ove zadatke umesto vas.

Konvencije
Ova knjiga nije dizajnirana kao referentni prirunik; ovo je vodi za poetnike. Stil pro-
gramiranja je ponekad suprotan najboljoj praksi (na primer, neki programi koriste globalne
varijable), ali to je kompromis da bi kod bio jednostavniji za uenje. Ova knjiga je napi-
sana za ljude koji ele da napiu jednostavan kod, pa se ne troi vreme na stil i eleganciju
programa. Sofisticirani koncepti programiranja, kao to su objektno-orijentisano progra-
miranje, sagledavanje liste i generatori, nisu opisani u ovoj knjizi zbog sloenosti koju oni
dodaju programu. Iskusni programeri mogu da ukau na naine na koji kod u ovoj knjizi
ta je programiranje? 3

moe da se promeni i pobolja efikasnost, ali ova knjiga iskljuivo je fokusirana na pokre-
tanje programa sa najmanje mogue uloenog truda.

ta je programiranje?
U TV emisijama i filmovima esto se prikazuju programeri koji furiozno kucaju zagonetne
nizove jedinica i nula na bljetavim ekranima, ali moderno programiranje nije toliko miste-
riozno. Programiranje je jednostavan in unoenja instrukcija koje raunar treba da izvri.
Ove instrukcije mogu da ukljuuju neke brojeve, modifikovanje teksta ili potragu za infor-
macijama u fajlovima ili da komuniciraju sa drugim raunarima posredstvom Interneta.
Svi programi koriste osnovne instrukcije kao gradivne blokove. Evo nekoliko najee upo-
trebljavanih (na engleskom jeziku):
Do this; then do that. (Uradi ovo; zatim uradi ono.)
If this condition is true, perform this action; otherwise, do that action. (Ako
je ovaj uslov taan, izvri ovu akciju; u suprotnom, izvri onu akciju.)
Do this action that number of times. (Izvri ovu akciju toliko puta.)
Keep doing that until this condition is true. (Nastavi izvrenje dok je ovaj
uslov taan.)
Takoe moete da kombinujete ove gradivne blokove da biste implementirali sloenije
odluke. Na primer, ovo su programerske instrukcije, pod nazivom izvorni kod, za jedno-
stavan program koji je napisan Python programskim jezikom. Poevi od vrha, Python sof-
tver pokree svaku liniju koda (neke linije se pokreu samo ako je odreeni uslov taan; u
suprotnom, Python pokree neku drugu liniju), dok ne doe do kraja.

u passwordFile = open('SecretPasswordFile.txt')
v secretPassword = passwordFile.read()
w print('Enter your password.')
typedPassword = input()
x if typedPassword == secretPassword:
y print('Access granted')
z if typedPassword == '12345':
{ print('That password is one that an idiot puts on their luggage.')
else:
| print('Access denied')

Moda ne znate nita o programiranju, ali verovatno, ako proitate prethodni kod, moete
razumno da pretpostavite ta izvrava. Prvo, otvoren je fajl SecretPasswordFile.txt u i
proitana je tajna lozinka u njemu v. Zatim se od korisnika trai da unese lozinku (pomou
tastature) w. Ove dve lozinke se uporeuju x, a ako su iste, program prikazuje na ekranu
Access granted y. Zatim, program proverava da li je lozinka 12345 z i prikazae da ovaj
izbor moda i nije najbolji za lozinku {. Ako lozinke nisu iste, program prikazuje na ekranu
Access denied |.
4 UVOD

ta je Python?
Python se odnosi na Python programski jezik (sa pravilima za pisanje sintakse koja se smatraju
validnim Python kodom) i Python softver za prevoenje koji ita izvorni kod (napisan u Pyt-
hon programskom jeziku) i izvrava njegove instrukcije. Python softver za prevoenje moe
se preuzeti besplatno na adresi http://python.org/; postoje verzije za Linux, OS X i Windows.
Naziv Python potie od naziva britanske komedijake grupe Monty Python, a ne od zmije.
Python programeri se od milja zovu Pythonistas, a reference Monty Pythona i zmije obino
su aljivi deo Python uputstava i dokumentacije.

Programerima nije potrebno veliko poznavanje matematike


Mnogi ljudi misle da je za uenje programiranja neophodno veliko poznavanje matematike.
Meutim, programiranje uglavnom ne zahteva matematiku, osim osnovne aritmetike. U
stvari, biti dobar u programiranju je slino kao i biti dobar u reavanju sudoku slagalica.
Da biste reili sudoku slagalicu, brojevi od 1 do 9 treba da se popune u svakom redu, svakoj
koloni i svakom unutranjem kvadratu veliine 3x3, na tabli koja je veliine 9x9. Reenje pro-
nalazite primenom oduzimanja i logike, koristei poetne brojeve. Na primer, poto se broj 5
prikazuje u gornjem levom uglu sudoku slagalice koja je prikazana na slici 0-1, ne moe da se
prikae nigde u gornjem redu, u koloni sa leve strane table ili u gornjem levom 3x3 kvadratu.
Reavanje jednog reda, kolone ili kvadrata e pruiti vie nagovetaja za ostatak slagalice.

Slika 0-1 Nova sudoku slagalica (levo) i njeno reenje (desno) - bez obzira na upotrebu brojeva,
sudoku ne ukljuuje matematiku (Images Wikimedia Commons).

Samo zato to sudoku ukljuuje brojeve ne znai da treba da budete dobar matematiar da
biste otkrili reenje. Isto vai i za programiranje. Kao i reavanje sudoku slagalice, pisanje
programa ukljuuje razbijanje problema na pojedinane, detaljne korake. Slino tome, kada
ispravljate greku u programima (odnosno, pronalazite i ispravljate greke), paljivo ete
posmatrati ta program radi i pronai uzrok greke. Kao i za sve druge vetine, to vie
programirate, postaete sve bolji.
O ovoj knjizi 5

Programiranje je kreativna aktivnost


Programiranje je kreativan zadatak, slian konstruisanju zamka od LEGO kockica. Zapo-
injete sa osnovnom idejom kako elite da zamak izgleda i pripremite dostupne blokove.
Zatim, poinjete gradnju. Kada zavrite gradnju programa, moete da ulepate kod isto kao
to biste ulepali i zamak.
Razlika izmeu programiranja i drugih kreativnih aktivnosti je to, kada programirate, u
raunaru imate sav sirovi materijal koji vam je neophodan; ne treba da kupite dodatno
platno, boju, film, predivo, LEGO kocke ili elektronske komponente. Kada je program
napisan, moe lako da se deli online sa celim svetom. I, mada ete praviti greke prilikom
programiranja, ta aktivnost je i dalje veoma zabavna.

O ovoj knjizi
Prvi deo ove knjige obuhvata osnovne koncepte Python programiranja, a drugi deo razliite
zadatke koje moete da automatizujete na raunaru. Svako poglavlje u drugom delu ima
programe projekta koje moete da prostudirate. Evo kratkog pregleda onoga to ete pro-
nai u svakom poglavlju:
Deo I: Osnove Python programiranja
Poglavlje 1: Osnove Pythona Obuhvaeni su izrazi, najosnovnije vrste Python instruk-
cija i naini na koje moete da upotrebite Python interaktivnu konzolu programa za ekspe-
rimentisanje sa kodom.
Poglavlje 2: Kontrola procesa Opisano je kako program odluuje koju instrukciju da
izvri tako da kod moe inteligentno da odgovara na razliite uslove.
Poglavlje 3: Funkcije Opisano je kako se definiu funkcije tako da moete da se orga-
nizuje kod u vie blokova kojima se lako rukuje.
Poglavlje 4: Liste Predstavljena je vrsta podataka liste i opisano je kako se organizuju
podaci.
Poglavlje 5: Renici i strukturiranje podataka Predstavljena je vrsta podataka i prika-
zani su napredniji naini za organizovanje podataka.
Poglavlje 6: Manipulisanje nizovima Opisana je upotreba tekstualnih podaka (u Pyt-
honu se nazivaju nizovi).
Deo II: Automatizacija zadataka
Poglavlje 7: Poklapanje ablona regularnim izrazima Opisano je kako Python moe
da manipulie nizovima i pretrauje tekstualne ablone koji sadre regularne izraze.
Poglavlje 8: itanje i pisanje fajlova Opisano je kako programi mogu da itaju sadr-
aje tekstualnih fajlova i snimaju informacije u fajlove na hard drajvu.
6 UVOD

Poglavlje 9: Organizovanje fajlova Prikazano je kako Python moe da kopira, pomera,


menja naziv i brie veliki broj fajlova mnogo bre nego korisnik. Takoe su opisani kom-
presovanje i dekompresovanje fajlova.
Poglavlje 10: Ispravljanje greaka Prikazano je kako se upotrebljavaju razliite alatke
Pythona za pronalaenje i ispravljanje greaka.
Poglavlje 11: Web isecanje Prikazano je kako se piu programi koji mogu automatski
da preuzmu web stranice i ralane ih za informacije. To se naziva web isecanje.
Poglavlje 12: Upotreba Excel tabela Opisano je programsko manipulisanje Excel tabe-
lama da ne bi trebalo da ih itate. Ovo je korisno kada imate stotine i hiljade dokumenata
koje treba da analizirate.
Poglavlje 13: Upotreba PDF i Word dokumenata Opisano je programsko itanje
Word i PDF dokumenata.
Poglavlje 14: Upotreba CSV fajlova i JSON podataka Nastavljeno je objanjenje
kako se programski manipulie dokumentima za CSV i JSON fajlove.
Poglavlje 15: Zadravanje vremena, rasporeivanje zadataka i pokretanje programa
Opisano je kako Python programi rukuju vremenom i datumom i kako se zadaje rau-
naru da izvrava zadatke u odreeno vreme. U ovom poglavlju je opisano i kako Python
programi mogu da pokreu druge programe.
Poglavlje 16: Slanje e-maila i tekstualnih poruka Opisano je kako da piete programe
koji mogu da alju e-mailove i tekstualne poruke u svoje ime.
Poglavlje 17: Manipulisanje slikama Opisano je kako da programski manipuliete sli-
kama kao to su JPEG ili PNG fajlovi.
Poglavlje 18: Kontrolisanje tastature i mia pomou GUI automatizacije Opisano je
kako da programski kontroliete mi i tastaturu za automatizaciju klikova i pritiska tastera.

Preuzimanje i instaliranje Pythona


Moete da preuzmete Python za Windows, OS X ili Ubuntu besplatno sa adrese http://pyt-
hon.org/downloads/. Ako preuzmete najnoviju verziju sa stranice za preuzimanje na web
sajtu, svi programi u ovoj knjizi bi trebalo da funkcioniu.
UPOZORENJE
Obavezno preuzmite verziju Python 3 (kao to je 3.4.0). Programi u ovoj knjizi su pisani za pokretanje na verziji
Python 3 i moda se nee pravilno pokretati na verziji Python 2.

Na stranici za preuzimanje pronai ete Python instalacioni program za 64-bitne i 32-bitne


raunare za svaki operativni sistem, pa prvo proverite koji instalacioni program je vama
potreban. Ako ste raunar kupili 2007. godine ili kasnije, verovatno imate 64-bitni sistem.
U suprotnom, imate 32-bitnu verziju. Evo kako se vri provera:
Pokretanje IDLE-a 7

Na Windows sistemu selektujte Start 4 Control Panel 4 System i proverite da li


za opciju System Type pie 64-bit ili 32-bit.
Na OS X sistemu kliknite na Apple eni, selektujte About This Mac 4 More Info
4 System Report 4 Hardware, a zatim potraite polje Processor Name. Ako
je napisano bilo ta drugo (ukljuujui Intel Core 2 Duo), imate 64-bitnu mainu.
Na Ubuntu Linux sistemu otvorite Terminal i pokrenite komandu uname -m. Odgovor
i686 znai da je sistem 32-bitni, a odgovor x86_64 znai da je sistem 64-bitni.
Na Windows sistemu preuzmite Python instalacioni program (naziv fajla e se zavravati
ekstenzijom .msi) i dvostruko kliknite na njega. Pratite instrukcije koje instalacioni pro-
gram prikazuje na ekranu da biste instalirali Python, kao to je ovde izlistano:
1. Selektujte Install for All Users, a zatim kliknite na Next.
2. Instalirajte program u direktorijum C:\Python34 klikom na dugme Next.
3. Ponovo kliknite na Next da biste preskoili odeljak Customize Python.
Na Mac OS X sistemu preuzmite .dmg fajl koji odgovara vaoj verziji OS X-a i dvostruko
kliknite na njega. Pratite instrukcije koje instalacioni program prikazuje na ekranu da biste
instalirali Python, kao to je ovde izlistano:
1. Kada se DMG paket otvori u novom prozoru, dvostruko kliknite na fajl Python.
mpkg. Moda e biti potrebno da unesete lozinku administratora.
2. Kliknite na dugme Continue u odeljku Welcome i kliknite na Agree da biste
prihvatili licencu.
3. Selektujte HD Macintosh (ili koji god naziv ima va hard drajv) i kliknite na Install.
Ako koristite Ubuntu sistem, moete da instalirate Python iz Terminala pratei sledee korake:
1. Otvorite prozor Terminal.
2. Ukucajte sudo apt-get install python3.
3. Ukucajte sudo apt-get install idle3.
4. Ukucajte sudo apt-get install python3-pip.

Pokretanje IDLE-a
Iako je Python prevodilac program koji pokree Python programe, interactive development
environment (IDLE) softver je mesto na koje ete uneti programe, kao u procesor rei.
Pokrenite sada IDLE.
Na Windows 7 sistemu ili novijem kliknite na ikonicu Start u donjem levom uglu
ekrana, u polje za pretragu ukucajte IDLE i selektujte IDLE (Python GUI).
8 UVOD

Na Windows XP sistemu kliknite na dugme Start, a zatim selektujte Programs


4 Python 3.4 4 IDLE (Python GUI).
Na Mac OS X sistemu otvorite prozor Finder, kliknite na Applications, pa na
Python 3.4 a zatim na ikonicu IDLE.
Na Ubuntu sistemu selektujte Applications 4 Accessories 4 Terminal, a zatim
unesite idle3 (moda ete moi da kliknete na Applications na vrhu ekrana, da
selektujete Programming i da kliknite na IDLE 3).

Interaktivna konzola
Bez obzira koji operativni sistem koristite, IDLE prozor koji e biti prikazan treba da bude
uglavnom prazan, osim teksta koji izgleda otprilike ovako:

Python 3.4.0 (v3.4.0:04f714765c13, Mar 16 2014, 19:25:23) [MSC v.1600 64 bit


(AMD64)] on win32Type "copyright", "credits" or "license()" for more information.
>>>

Ovaj prozor se naziva interaktivna konzola. Konzola je program koji omoguava da unosite
instrukcije u raunar, kao to su Terminal ili Command Prompt na OS X i Windows siste-
mima. Pythonova interaktivna konzola omoguava unos instrukcija za pokretanje softvera
Python prevodioca. Raunar ita instrukcije koje unesete i odmah ih pokree.
Na primer, u interaktivnu konzolu pored stavke >>> prompt unesite sledee:

>>> print('Hello world!')

Nakon to ukucate ovu liniju i pritisnete ENTER, interaktivna konzola treba da prikae
sledei odgovor:

>>> print('Hello world!')


Hello world!

Pronalaenje pomoi
Samostalno reavanje programerskih problema je lake nego to moda mislite. Ako ne
verujete, hajde namerno da izazovemo greku: unesite 42 + 3 u interaktivnu konzolu. Ne
treba da znate ta znai ova instrukcija, ali bi rezultat trebalo da izgleda ovako:

>>> '42' + 3
u Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
'42' + 3
v TypeError: Can't convert 'int' object to str implicitly
>>>
Pametno postavljanje programerskih pitanja 9

Poruka o greci v prikazana je ovde zato to Python nije mogao da razume instrukciju. U delu
istorije steka u poruke o greci prikazana je specifina instrukcija i broj linije sa kojom Pyt-
hon ima problem. Ako niste sigurni ta da uradite sa odreenom porukom o greci, potraite
na Internetu tanu poruku. Unesite TypeError: Cant convert int object to str impli-
citly (ukljuujui i navodnike) u omiljeni pretraiva i trebalo bi da vidite veliki broj linkova
koji objanjavaju ta znai ova poruka i ta je izaziva, kao to je prikazano na slici 0-2.

Slika 0-2 Google rezultati za poruku o greci mogu da budu veoma korisni.

esto ete pronai da je neko drugi ve postavio isto pitanje i da su neki drugi korisnici
ve odgovorili na njega. Ni jedna osoba ne moe znati sve o programiranju, pa je, stoga,
potrebno da programer svakodnevno trai odgovore na tehnika pitanja.

Pametno postavljanje programerskih


pitanja
Ako ne moete da pronaete odgovor pretraivanjem Interneta, pokuajte da pitate ljude na
web forumima, kao to su Stack Overlow (http://stackoverflow.com/) ili learn program-
ming subreddit na adresi http://reddit.com/r/learnprogramming/. Ali imajte na umu da
postoje pametni naini za postavljanje programerskih pitanja koji e pomoi i drugima i
vama. Obavezno proitajte odeljak Frequently Asked Questions koje ovi web sajtovi imaju
o pravilnom nainu postavljanja pitanja.
10 UVOD

Kada postavljate programersko pitanje, ne zaboravite da uradite sledee:


Objasnite ta pokuavate da uradite, a ne samo ta ste uradili. To e onima kojima
ste se obratili za pomo pomoi da odrede da li ste na pogrenom putu.
Specifikujte taku u kojoj se greka desila. Da li se desila na samom poetku
programa ili samo nakon odreene akcije koju ste izvrili?
Kopirajte i pejstujte celu poruku o greci i kod na stranicu http://pastebin.com/ ili
http://gist.github.com/.
Ovi web sajtovi olakavaju deljenje velike koliine koda sa ljudima preko Weba,
bez rizika od gubitka formatiranja teksta. Moete, nakon toga, da postavite URL
postavljenog koda u e-mail ili post na forumu. Na primer, ovo su delovi koda koje
sam ja postavio: http://pastebin.com/SzP2DbFx/ i https://gist.github.com/
asweigart/6912168/.
Objasnite ta ste ve pokuali da uradite da biste reili problem. To e onima od
kojih traite pomo dati do znanja da ste ve uloili trud da reite sami problem.
Napiite koju verziju Pythona koristite (postoje neke kljune razlike izmeu
verzije 2 Python prevodioca i verzije 3 Python prevodioca). Navedite i koji
operativni sistem i verziju koristite.
Ako se greka javi nakon to izvrite promene u kodu, objasnite tano ta ste
promenili.
Napomenite da li se greka javlja svaki put kada pokrenete program ili samo
nakon to izvrite odreene akcije (opiite te akcije).
Uvek pratite online bonton. Na primer, nemojte da postavljate pitanje napisano velikim
slovima ili da postavljate nerazumne zahteve ljudima koji pokuaju da vam pomognu.

Rezime
Za veinu ljudi raunar je samo ureaj, ali ne i alat. Meutim, uenjem programiranja dobi-
ete pristup jednoj od najmonijih alatki modernog sveta, a uz to ete se i zabaviti. Pro-
gramiranje nije operacija na mozgu ono je dobro i za amatere za eksperimentisanje i
pravljenje greaka.
Ja volim da pomaem ljudima da otkriju Python. Piem tutorijale za programiranje na
mom blogu na adresi http://inventwithpython.com/blog/, a pitanja mi moete postaviti na
adresi al@inventwithpython.com.
U toku upoznavanja programiranja ete moda imati neka pitanja koja su van delokruga
ove knjige. Ne zaboravite da su postavljanje efektivnog pitanja i poznavanje naina kako
da se pronau odgovori veoma vredni na ovom programerskom putovanju.
Zaponimo to putovanje!
DEO I
OSNOVE PYTHON
PROGRAMIRANJA

11
1
OSNOVE PYTHONA

PROGRAMSKI JEZIK PYTHON IMA IROK SPEKTAR SINTAKSNE KONSTRUKCIJE,


STANDARDNE FUNKCIJE BIBLIOTEKE I INTERAKTIVNE FUNKCIJE RAZVOJNOG OKRU-
ENJA. SREOM, MOETE DA IGNORIETE VEINU OVIH STAVKI; TREBA SAMO DA
NAUITE ONO TO JE DOVOLJNO ZA PISANJE KORISNIH MALIH PROGRAMA.

Meutim, neophodno je najpre da nauite osnovne koncepte programiranja. Moda ete


pomisliti da su ovi koncepti tajnoviti i dosadni, ali kada budete stekli neko znanje i praksu,
moi ete da zapovedate vaem raunaru da izvrava neverovatne podvige.
U ovom poglavlju dato je nekoliko primera koji e vas ohrabriti da kucate u interaktivnu
konzolu, to e omoguiti da izvravate Python instrukcije jednu po jednu, a rezultat e
vam biti odmah prikazan. Upotreba interaktivne konzole je odlina da biste nauili ta
rade osnovne Python instrukcije, pa, stoga, isprobajte neke od njih dok itate ovo poglavlje.
Mnogo bolje ete zapamtiti sve ako i uradite zadatak nego ako ga samo proitate.

13
14 POGLAVLJE 1 Osnove Pythona

Unoenje izraza u interaktivnu konzolu


Interaktivnu konzolu pokrenite tako to ete pokrenuti IDLE, koji je instaliran u uvodu ove
knjige zajedno sa Pythonom. Na Windows sistemu otvorite meni Start, pa selektujte All
Programs 4 Python 3.3 i IDLE (Python GUI). Na OS X sistemu selektujte Applications
4 MacPython 3.3 4 IDLE. Na Ubuntu sistemu otvorite novi prozor Terminala i unesite
idle3.Trebalo bi da se otvori prozor koji sadri >>> prompt; to je interaktivna konzola.
Unesite 2 + 2 u prompt da bi Python izvrio jednostavno izraunavanje.

>>> 2 + 2
4

IDLE prozor bi sada trebalo da prikazuje tekst slian ovome:

Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:06:53) [MSC v.1600 64 bit (AMD64)]
on win32
Type copyright, credits or license() for more information.
>>> 2 + 2
4
>>>

U Pythonu 2 + 2 se naziva izraz, to je i najosnovnija vrsta programerske instrukcije u


jeziku. Izraz se sastoji od vrednosti (kao to je 2) i operatora (kao to je +); oni uvek mogu
da se smanje na jednu vrednost. To znai da moete da upotrebite izraze bilo gde u Python
kodu gde moete da upotrebite vrednost.
U prethodnom primeru izraz 2 + 2 je vrednovan kao jedna vrednost - 4. Jedna vrednost bez opera-
tora se takoe smatra izrazom, mada se on svodi samo na sebe samog, kao to je ovde prikazano:

>>> 2
2

G R E K E SU D O B R E !

Program e pasti ako sadri kod koji raunar ne moe da razume, to e izazvati
da Python prikae poruku o greci. Ta poruka nee pokvariti va raunar, pa ne
treba da se plaite ako napravite greku. Pad sistema samo znai da je program
neoekivano prestao da radi.
Ako elite da saznate vie o poruci o greci, moete da potraite tu tekstualnu
poruku online i otkrijete vie o specifinoj greci. Takoe moete da pogledate
izvore na adresi http://nostarch.com/automatestuff/ i vidite listu uobiajenih
Python poruka o grekama i njihova znaenja.
Unoenje izraza u interaktivnu konzolu 15

Postoji mnogo drugih operatora koje moete da upotrebite u Python izrazima. Na primer, u
tabeli 1-1 izlistani su svi matematiki operatori u Pythonu.
Tabela 1-1 Matematiki operatori od najvieg do najnieg prioriteta
Operator Operacija Primer Procenjuje se
** Eksponent 2 ** 3 8
% Modul/ostatak 22 % 8 6
// Deljenje celog broja/kolinik 22 // 8 2
/ Deljenje 22 / 8 2.75
* Mnoenje 3*5 15
- Oduzimanje 5-2 3
+ Sabiranje 2+2 4

Redosled operatora (takoe se naziva prioritet) za Pythonove matematike operatore je


slian kao u matematici. Prvo se izraunava operator **, zatim operatori *, /, //, i %, (sleva
nadesno), a na kraju operatori + i - (takoe sleva nadesno). Moete da upotrebite zagrade
da biste prepisali uobiajeni prioritet ako je to potrebno. U interaktivnu konzolu unesite
sledei izraz:

>>> 2 + 3 * 6
20
>>> (2 + 3) * 6
30
>>> 48565878 * 578453
28093077826734
>>> 2 ** 8
256
>>> 23 / 7
3.2857142857142856
>>> 23 // 7
3
>>> 23 % 7
2
>>> 2 + 2
4
>>> (5 - 1) * ((7 + 1) / (3 - 1))
16.0

U svakom sluaju, vi, kao programer, treba da unesete izraz, ali Python obavlja tei deo
izraunavanja i svoenja na jednu vrednost. On e nastaviti da izraunava delove izraza,
dok ne dobije jednu vrednost, kao to je prikazano na slici 1-1.
16 POGLAVLJE 1 Osnove Pythona

(5 - 1) * ((7 + 1) / (3 - 1))

4 * ((7 + 1) / (3 - 1))

4 * ( 8 ) / (3 - 1))

4 * ( 8 ) / ( 2 )

4 * 4.0

16.0

Slika 1-1 Izraunavanjem izraz se svodi na jednu vrednost.

Ova pravila za spajanje operatora i vrednosti za formiranje izraza su osnovni deo Pythona
kao programskog jezika, isto kao i gramatika pravila, koja nam pomau u komunikaciji.
Evo primera:
This is a grammatically correct English sentence.
This grammatically is sentence not English correct a.
Drugu liniju je teko ralaniti, zato to ne prati pravila engleskog jezika. Slino tome, ako
ukucate pogrenu Python instrukciju, Python nee moi da je razume i prikazae poruku
o greci SyntaxError, kao to je prikazano ovde:

>>> 5 +
File <stdin>, line 1
5 +
^
SyntaxError: invalid syntax
>>> 42 + 5 + * 2
File <stdin>, line 1
42 + 5 + * 2
^
SyntaxError: invalid syntax

Uvek moete da testirate i vidite da li instrukcija funkcionie, tako to ete je ukucati u


interaktivnu konzolu. Ne brinite da ete pokvariti raunar: najgore to moe da se desi je
da Python odgovori porukom o greci. Profesionalni programeri stalno dobijaju poruke o
greci dok piu kodove.

Vrste podataka celog broja, pokretne take i niza


Zapamtite da su izrazi samo vrednosti kombinovane sa operatorima i uvek e se izrauna-
vati do jedne vrednosti. Vrsta podataka je kategorija za vrednosti, a svaka vrednost pripada
samo jednoj vrsti podataka. Najee vrste podataka u Pythonu su izlistane u tabeli 1-2.
Vrednosti -2 i 30, na primer, nazivaju se vrednosti celog broja. Podatak celog broja (ili
Spajanje i ponavljanje niza 17

int) ukazuje na vrednosti koje su ceo broj. Brojevi sa decimalnim takama, kao to je 3.14,
nazivaju se brojevi sa pokretnom takom (ili plutajuom takom). ak i ako je vrednost 42
ceo broj, vrednost 42.0 je broj sa pokretnom takom.
Tabela 1-2 Uobiajene vrste podataka
Vrsta podatka Primeri
Ceo broj -2, -1, 0, 1, 2, 3, 4, 5
Brojevi sa pokretnom takom -1.25, -1.0, --0.5, 0.0, 0.5, 1.0, 1.25
Nizovi a, aa, aaa, Hello!, 11 cats

Python programi takoe mogu da imaju tekstualne vrednosti koje se nazivaju nizovi ili strs
(izgovara se stirs). Niz uvek obuhvatite karakterima navodnika (), kao to je Hello ili
Goodbye cruel world!, da bi Python znao gde niz poinje i gde se zavrava. Moete ak
da imate niz bez ijednog karaktera unutar njega , koji se naziva prazan niz. Nizovi su
detaljnije opisani u Poglavlju 4.
Ako ikada vidite poruku o greci SyntaxError: EOL while scanning string literal, vero-
vatno nije ukucan krajnji karakter navodnika na kraju niza, kao u ovom primeru:

>>> Hello world!


SyntaxError: EOL while scanning string literal

Spajanje i ponavljanje niza


Znaenje operatora moe da se promeni na osnovu vrste podatka vrednosti pored njega. Na
primer, + je operator sabiranja kada vri operaciju za dva cela broja ili broja sa pokretnom
takom. Meutim, kada je + upotrebljen za dve vrednosti niza, on spaja nizove kao operator
spajanja niza. U interaktivnu konzolu unesite sledee:

>>> Alice + Bob


AliceBob

Izraz se svodi na jednu vrednost - novu vrednost niza koja kombinuje tekst dva niza. Meu-
tim, ako pokuate da upotrebite operator + u nizu i celom broju, Python nee znati kako
da time rukuje i prikazae poruku o greci.

>>> Alice + 42
Traceback (most recent call last):
File <pyshell#26>, line 1, in <module>
Alice + 42
TypeError: Cant convert int object to str implicitly
18 POGLAVLJE 1 Osnove Pythona

Poruka o greci Cant convert int object to str implicitly znai da Python pretpo-
stavlja da ste pokuali da spojite ceo broj sa nizom Alice. Kod treba da eksplicitno kon-
vertuje ceo broj u niz, zato to Python to ne moe da uradi automatski (konvertovanje vrsta
podataka e biti opisano u odeljku Razlaganje programa kada budemo govorili o str(),
int() i float() funkcijama).Operator * se koristi za mnoenje kada vri operaciju za dva
cela broja ili broja sa pokretnom takom. Meutim, kada se koristi u jednoj vrednosti niza i
jednoj vrednosti celog broja, on postaje operator ponavljanja niza. Unesite niz pomnoen sa
brojem u interaktivnu konzolu da biste videli ovu operaciju u akciji.

>>> Alice * 5
AliceAliceAliceAliceAlice

Izraz se svodi na jednu vrednost niza koja replicira originalni broj jednak sa vrednou celog
broja. Ponavljanje niza je koristan trik, ali se ne upotrebljava toliko esto kao spajanje niza.
Operator * moe da se koristi samo sa dve numerike vrednosti (za mnoenje) ili za jednu
vrednost niza i jednu vrednost celog broja (za ponavljanje niza). U suprotnom, Python e
samo prikazati poruku o greci.

>>> Alice * Bob


Traceback (most recent call last):
File <pyshell#32>, line 1, in <module>
Alice * Bob
TypeError: cant multiply sequence by non-int of type str
>>> Alice * 5.0
Traceback (most recent call last):
File <pyshell#33>, line 1, in <module>
Alice * 5.0
TypeError: cant multiply sequence by non-int of type float

Jasno je zato Python ne razume ove izraze: ne moete da pomnoite dve rei, a teko je
ponoviti proizvoljni niz za frakcioni broj puta.

uvanje vrednosti u promenljivim


Promenljiva je kao kutija u memoriji raunara, gde moete da uvate pojedinane vredno-
sti. Ako elite da kasnije upotrebite rezultat izraunatog izraza u programu, moete da ga
sauvate unutar promenljive.

Iskazi dodele
Vrednosti ete uvati u promenljivim sa iskazom dodele. Iskaz dodele sadri naziv pro-
menljive, znak jednakosti (koji se naziva operator dodele) i vrednost koja e biti sauvana.
Ako unesete iskaz dodele spam = 42, onda e promenljiva pod nazivom spam imati u sebi
sauvanu vrednost celog broja 42.
uvanje vrednosti u promenljivim 19

Zamislite promenljivu kao kutiju sa nazivom u koju je postavljena vrednost, kao na slici 1-2.

Slika 1-2 Izraz spam = 42 znai da kaete programu: Promenljiva spam sada ima u sebi vrednost
celog broja 42.

Na primer, u interaktivnu konzolu unesite sledee:

u >>> spam = 40
>>> spam
40
>>> eggs = 2
v >>> spam + eggs
42
>>> spam + eggs + spam
82
w >>> spam = spam + 2
>>> spam
42

Promenljiva je zapoeta (ili kreirana) kada je prvi put vrednost sauvana u njoj u. Nakon
toga, moete da je upotrebite u izrazu sa drugim promenljivim i vrednostima v. Kada je
promenljivoj dodeljena nova vrednost w, stara vrednost je zaboravljena i zbog toga je spam
promenljiva procenjena na 42, umesto na 40 na kraju primera. To se naziva prepisivanje
promenljive. U interaktivnu konzolu unesite sledei kod da biste pokuali da prepiete niz:

>>> spam = Hello


>>> spam
Hello
>>> spam = Goodbye
>>> spam
Goodbye

Kao i kutija na slici 1-3, spam promenljiva u ovom primeru uva Hello, dok ovaj niz ne
zamenite sa Goodbye.
20 POGLAVLJE 1 Osnove Pythona

Slika 1-3 Kada je nova vrednost dodeljena u promenljivu, stara vrednost je zaboravljena.

Nazivi promenljivih
Tabela 1-3 sadri primere pravilnih naziva promenljivih. Moete da imenujete promenljivu
kako god elite dok potujete sledea tri pravila:
1. Moe biti samo jedna re.
2. Mogu da se koriste samo karakteri slova, brojevi i donje crtice.
3. Ne moe poinjati brojem.
Tabela 1-3 Pravilni i nepravilni nazivi promenljivih
Pravilni nazivi promenljivih Nepravilni nazivi promenljivih
balance current-balance (crtice nisu dozvoljene)
currentBalance current balance (razmaci nisu dozvoljeni)
current_balance 4account (ne moe se na poetku nalaziti broj)
_spam 42 (ne moe se na poetku nalaziti broj)
SPAM total_$um (specijalni karakteri, kao to je $, nisu dozvoljeni)
account4 hello (specijalni karakteri, kao to je , nisu dozvoljeni)

Nazivi promenljivih su zavisni od veliine slova, to znai da su spam, SPAM, Spam i sPaM etiri
razliite promenljive. Pravilo u Pythonu je da se nazivi promenljivih piu malim slovima.
U ovoj knjizi upotrebljava se camelcase za nazive promenljivih, umesto donjih crtica;
odnosno, promenljive izgledaju ovako lookLikeThis, umesto da izgledaju ovako - loo-
Va prvi program 21

king_like_this. Neki iskusni programeri moda e istai da zvanini stil Python koda PEP
8 navodi da bi trebalo da se upotrebe donje crtice. Ja i dalje preferiram camelcase i ukazu-
jem na to da je besmislena doslednost izmiljotina malih umova u samom PEP-u 8:
Doslednost praenja vodia za stil je vana. Ali je najvanije
znati kada biti nedosledan ponekad vodi za stil jednostavno nije
primenljiv. Kada ste u nedoumici, upotrebite svoju najbolju procenu.
Dobar naziv za promenljivu opisuje podatke koje ona sadri. Zamislite da se selite u novu
kuu i sve kutije za selidbu oznaite sa stvari. Kako da pronaete u toj hrpi kutija ako
vam je neto hitno potrebno? Nazivi promenljivih spam, eggs i bacon se koriste kao generiki
nazivi za primere u ovoj knjizi i u veem delu Python dokumentacije (nazivi su inspirisani
Monty Pythonovim skeom Spam), ali u vaim programima opisni naziv e vam pomoi
da kod bude mnogo itkiji.

Va prvi program
Iako je interaktivna konzola dobra za pokretanje Python instrukcija, jedne po jedne, da biste
napisali ceo Python program, instrukcije ete kucati u fajl editor. Fajl editor je slian edito-
rima teksta, kao to su Notepad ili TextMate, ali postoje neke specifine funkcije za pisanje
u izvornom kodu. Da biste otvorili fajl editor u IDLE-u, selektujte File New Window.
Prozor koji e se otvoriti trebalo bi da sadri kursor koji eka va unos, ali se razlikuje od
interaktivne konzole, koja pokree Python instrukcije im pritisnete Enter. Fajl editor omo-
guava da kucate vie instrukcija, snimite fajl i pokrenete program. Evo kako moete da
razlikujete fajl editor i interaktivnu konzolu:
Prozor interaktivne konzole e uvek biti onaj u kojem se nalazi >>> prompt.
Prozor fajl editora nee imati >>> prompt.
Sada je vreme da kreirate svoj prvi program! Kada se otvori prozor fajl editora, ukucajte u
njega sledee:

u # This program says hello and asks for my name.

v print(Hello world!)
print(What is your name?) # ask for their name
w myName = input()
x print(It is good to meet you, + myName)
y print(The length of your name is:)
print(len(myName))
z print(What is your age?) # ask for their age
myAge = input()
print(You will be + str(int(myAge) + 1) + in a year.)
22 POGLAVLJE 1 Osnove Pythona

Kada unesete izvorni kod, snimite ga da ne biste morali da ga kucate svaki put kada pokre-
ete IDLE. Iz menija na vrhu prozora fajl editora selektujte opciju File4 Save As. U pro-
zoru Save As unesite hello.py u polje File Name, a zatim kliknite na Save.
Dok kucate programe, s vremena na vreme bi trebalo da ih snimite. Ako to radite, neete
izgubiti kod kad sistem padne ili sluajno zatvorite IDLE. Kao preicu za snimanje moete
da upotrebite tastere Ctrl-S na Windows i Linux sistemu ili Command-z na OS X sistemu
da biste snimili fajl.
Kada je fajl snimljen, pokrenite program. Selektujte komandu Run 4 Run Module ili samo
pritisnite taster F5. Program bi trebalo da se pokrene u prozoru interaktivne konzole, koji je
otvoren kada ste prvi put pokrenuli IDLE. Ne zaboravite da treba da pritisnete F5 u prozoru
fajl editora, a ne u prozoru interaktivne konzole. Unesite naziv programa kada se to od vas
zatrai. Izvod programa u interaktivnoj konzoli bi trebalo da izgleda, otprilike, ovako:

Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:06:53) [MSC v.1600 64 bit (AMD64)]
on win32
Type copyright, credits or license() for more information.
>>> ================================ RESTART ================================
>>>
Hello world!
What is your name?
Al
It is good to meet you, Al
The length of your name is:
2
What is your age?
4
You will be 5 in a year.
>>>

Kada nema vie linija koda za izvravanje, Python program se iskljuuje; odnosno, prestaje
da se pokree (takoe moe da se kae da se Python program zatvara).
Moete da zatvorite fajl editor, tako to ete kliknuti na X na vrhu prozora. Da biste ponovo ui-
tali snimljeni program, selektujte komandu File4Open iz menija. Kada kliknete na komandu,
u prozoru koji e se otvoriti izaberite stavku hello.py i kliknite na dugme Open. Program
hello.py, koji ste prethodno snimili, sada bi trebalo da se otvori u prozoru fajl editora.

Analiza programa
Dok je novi program otvoren u fajl editoru, pogledajte na brzinu Python instrukcije koje
koristi, tako to ete analizirati ta radi svaka linija koda.

Komentari
Sledea linija naziva se komentar.
Analiza programa 23

u # This program says hello and asks for my name.

Python ignorie komentare, koje moete da upotrebite za pisanje beleaka ili da biste se
podsetili ta odreena linija koda pokuava da izvri. Svaki tekst u ostatku linije iza znaka
tarabe (#) je deo komentara.
Ponekad e programeri postaviti # ispred linije koda da bi je privremeno uklonili dok testi-
raju program. To se naziva obeleavanje komentara, koje moe biti veoma korisno kada
pokuavate da shvatite zato program ne funkcionie. Moete kasnije da uklonite # oznaku
kada budete spremni da vratite liniju koda u program.
Python takoe ignorie praznu liniju iza komentara. Moete da dodate onoliko praznih
linija u program koliko elite. To e olakati itanje koda, kao pasusi u knjizi.

Funkcija print()
Funkcija print() prikazuje vrednost niza unutar zagrada na ekranu.

v print(Hello world!)
print(What is your name?) # ask for their name

Linija print(Hello world!) znai Odtampaj tekst u nizu Hello world!. Kada Pyt-
hon izvri ovu liniju, moete da kaete da je pozvao funkciju print() i da je vrednost niza
prosleena funkciji. Vrednost koja je prosleena funkciji naziva se argument. Videete da
navodnici nisu odtampani na ekranu. Oni samo oznaavaju gde je poetak i kraj niza; nisu
deo vrednosti niza.
NAPOMENA
Takoe moete da upotrebite ovu funkciju za postavljanje prazne linije na ekranu; samo pozovite funkciju print(),
bez ikakvog teksta izmeu zagrada.

Kada piete naziv funkcije, otvorena i zatvorena zagrada na krajuidentifikuju funk-


ciju.Zbog toga ete u ovoj knjizi videti print() umesto print. U Poglavlju 2 detaljnije su
opisane funkcije.

Funkcija input()
Funkcija input() eka da korisnik ukuca tekst na tastaturi i pritisne ENTER.

w myName = input()

Pozivanje ove funkcije svodi vrednost na niz jednak sa tekstom korisnika, a prethodna linija
koda dodeljuje promenljivu myName u ovu vrednost niza.
O pozivanju funkcije input() moete da razmiljate kao o izrazu koji izraunava bilo koji
niz koji korisnik unese. Ako je korisnik uneo Al, onda bi izraz trebalo da se svede kao
myName = Al.
24 POGLAVLJE 1 Osnove Pythona

tampanje imena korisnika


Poziv sledee funkcije print() sadri, u stvari, izraz It is good to meet you, + myName
izmeu zagrada.

x print(It is good to meet you, + myName)

Ne zaboravite da izraz uvek moe da se svede na jednu vrednost. Ako je Al vrednost koja
je sauvana u izrazu myName u prethodnoj liniji, onda se ovaj izraz svodi na It is good to
meet you, Al. Ova vrednost jednog niza se prosleuje funkciji print(), koja e je odtam-
pati na ekranu.

Funkcija len()
Funkciji len() moete da prosledite vrednost niza (ili promenljivu koja sadri niz), a funk-
cija je izraunava do vrednosti celog broja za broj karaktera u odreenom nizu.

y print(The length of your name is:)


print(len(myName))

Da biste to isprobali, u interaktivnu konzolu unesite sledee:

>>> len(hello)
5
>>> len(My very energetic monster just scarfed nachos.)
46
>>> len()
0

Kao i ovi primeri, funkcija len(myName) svodi vrednost na ceo broj. Zatim se ta vrednost
prosleuje funkciji print() da bi bila odtampana na ekranu. Vidite da funkcija print()
omoguava da prosledite vrednosti celog broja ili vrednosti niza. Meutim, vidite i greku
koja se prikazuje kada u interaktivnu konzolu ukucate sledee:

>>> print(I am + 29 + years old.)


Traceback (most recent call last):
File <pyshell#6>, line 1, in <module>
print(I am + 29 + years old.)
TypeError: Cant convert int object to str implicitly

Funkcija print() ne izaziva ovu greku, ve je izaziva izraz koji ste pokuali da prosledite
toj funkciji. Istu poruku o greci dobiete ako u interaktivnu konzolu ukucate izraz kao
samostalan.
Analiza programa 25

>>> I am + 29 + years old.


Traceback (most recent call last):
File <pyshell#7>, line 1, in <module>
I am + 29 + years old.
TypeError: Cant convert int object to str implicitly

Python prikazuje greku, zato to operator + moete da upotrebite samo za sabiranje dva
cela broja ili za spajanje dva niza. Ne moete da dodate ceo broj nizu, jer to u Pythonu nije
gramatiki tano. To moete da ispravite upotrebom verzije niza celog broja, kao to je
opisano u sledeem odeljku.

Funkcije str(), int() i float()


Ako elite da spojite ceo broj, kao to je 29, sa nizom da biste ih prosledili funkciji print(),
treba da upiete vrednost 29, to je, u stvari, niz od 29. Funkcija str() moe da se prosledi
celom broju i svee ga na verziju vrednosti niza na sledei nain:

>>> str(29)
29
>>> print(I am + str(29) + years old.)
I am 29 years old.

Poto funkcija (29) svodi vrednost na 29, izraz I am + str(29) + years old. svodi
se na I am + 29 + years old., a ta vrednost se ponovo svodi na I am 29 years
old.. Ova vrednost se prosleuje funkciji print().Funkcije str(), int() i float() e svesti
niz, ceo broj i oblike pokretne take vrednosti koje prosleujete. Pokuajte da konvertujete
neke vrednosti u interaktivnoj konzoli pomou ovih funkcija i pogledajte ta e se desiti.

>>> str(0)
0
>>> str(-3.14)
-3.14
>>> int(42)
42
>>> int(-99)
-99
>>> int(1.25)
1
>>> int(1.99)
1
>>> float(3.14)
3.14
>>> float(10)
10.0

Prethodni primeri pozivaju funkcije str(), int() i float() i prosleuju im vrednosti drugih
vrsta podataka za dobijanje niza, celog broja ili oblika pokretne take tih vrednosti.
26 POGLAVLJE 1 Osnove Pythona

Funkcija str() je korisna kada imate ceo broj ili pokretnu taku koju elite da dodate nizu.
Funkcija int() je takoe korisna ako imate broj kao vrednost niza koji elite da upotrebite u
nekim drugim izraunavanjima. Na primer, funkcija input() uvek vraa niz, ak i ako kori-
snik unese broj. Unesite spam = input() u interaktivnu konzolu i unesite 101 kada program
zatrai tekst.

>>> spam = input()


101
>>> spam
101

Vrednost koja je sauvana unutar spama nije ceo broj 101, ve je to niz 101. Ako elite da
izvrite izraunavanje koristei vrednost u spamu, upotrebite funkciju int() da biste dobili
oblik celog broja spama, a zatim sauvajte ceo broj kao novu vrednost u spamu.

>>> spam = int(spam)


>>> spam
101

Sada bi trebalo da moete da tretirate promenljivu spam kao ceo broj, umesto kao niz.

>>> spam * 10 / 5
202.0

Zapamtite: ako prosledite vrednost funkciji int() koju ona ne moe da svede na ceo broj,
Python e prikazati poruku o greci.

>>> int(99.99)
Traceback (most recent call last):
File <pyshell#18>, line 1, in <module>
int(99.99)
ValueError: invalid literal for int() with base 10: 99.99
>>> int(twelve)
Traceback (most recent call last):
File <pyshell#19>, line 1, in <module>
int(twelve)
ValueError: invalid literal for int() with base 10: twelve

Funkcija int() je takoe korisna ako treba da zaokruite broj sa pokretnom takom.
Analiza programa 27

>>> int(7.7)
7
>>> int(7.7) + 1
8

U programu ste upotrebili funkcije int() i str() u najmanje tri linije da biste dobili vrednost
odgovarajue vrste podataka za kod.

z print(What is your age?) # ask for their age


myAge = input()
print(You will be + str(int(myAge) + 1) + in a year.)

Promenljiva myAge sadri vrednost koju je vratila funkcija input(). Poto funkcija input()
uvek vraa niz (ak i ako korisnik ukuca broj), moete da upotrebite kod int(myAge) da biste
vratili vrednost celog broja niza u promenljivoj myAge. Ova vrednost celog broja se, zatim,
dodaje jedinici (1) i izrazu int(myAge) + 1.
Rezultat ovog dodavanja je prosleen funkciji str() function: str(int(myAge) + 1). Vrednost
niza koja je vraena je, zatim, spojena sa nizovima You will be i in a year. da bi se
svela na jednu vrednost velikog niza. Ovaj veliki niz je na kraju prosleen funkciji print()
da bi bio prikazan na ekranu.
Recimo da korisnik unese niz 4 za promenljivu myAge. Niz 4 je konvertovan u ceo broj
da biste mogli da mu dodate 1. Rezultat je 5. Funkcija str() konvertuje rezultat nazad na
niz, pa moete da ga spojite sa drugim nizom in a year., da biste kreirali finalnu poruku.
Ovi koraci procene bi izgledali slino onima na slici 1-4.

E K V I VALE N T N OS T T E K S TA I B R OJA

Iako se vrednost niza broja smatra potpuno drugaijom vrednou od verzije celog
broja ili broja sa pokretnom takom, ceo broj moe da bude jednak sa brojem
pokretne take.

>>> 42 == 42
False
>>> 42 == 42.0
True
>>> 42.0 == 0042.000
True

Python razlikuje ovo zato to su nizovi tekstualni, dok su celi brojevi i brojevi
pokretnog zareza brojevi.
28 POGLAVLJE 1 Osnove Pythona

print('You will be ' + str(int(myAge) + 1) + ' in a year.')

print('You will be ' + str(int( '4' ) + 1) + ' in a year.')

print('You will be ' + str( 4 + 1 ) + ' in a year.')

print('You will be ' + str( 5 ) + ' in a year.')

print('You will be ' + '5' + ' in a year.')

print('You will be 5' + ' in a year.')

print('You will be 5 in a year.')

Slika 1-4 Koraci svoenja ako je broj 4 sauvan u promenljivoj myAge

Rezime
Moete da izraunate izraze pomou kalkulatora ili da ukucate nadovezane nizove u proce-
soru rei. Moete ak da ponovite niz jednostavnim kopiranjem i pejstovanjem teksta. Meu-
tim, izrazi i vrednosti njihovih komponenata (operatori, promenljive i pozivanje funkcija) su
osnovni gradivni blokovi koji ine programe. Kada znate kako da rukujete ovim elementima,
moi ete da date instrukcije Pythonu da izrauna velike koliine podataka umesto vas.
Dobro je da zapamtite razliite vrste operatora (+, -, *, /, //, % i ** za matematike operacije
i + i * za operacije sa nizovima) i tri vrste podataka (cele brojeve, brojeve plutajue take i
nizove) koji su predstavljeni u ovom poglavlju.
Takoe su predstavljene neke razliite funkcije. Funkcije print() i input() rukuju jedno-
stavnim ispisom teksta (na ekranu) i unosom (pomou tastature). Funkcija len() uzima niz
i svodi ga na veliki broj karaktera u nizu. Funkcije str(), int() i float() e svesti vrednost
na niz, ceo broj ili broj plutajue take za vrednost koja im je prosleena.
U sledeem poglavlju nauiete kako da ukaete Pythonu da inteligentno odlui koji kod e pokre-
nuti, koji kod e preskoiti i koji kod e ponoviti na osnovu vrednosti koje sadri. To je poznato
kao kontrola toka, koja omoguava da piete programe koji e donositi inteligentne odluke.
Praktina pitanja 29

Praktina pitanja
1. Koji od prikazanih su operatori, a koje su vrednosti?

*
hello
-88.8
-
/
+
5

2. Koji od prikazanih je promenljiva, a koje je niz?

spam
spam

3. Navedite tri vrste podataka.


4. Od ega je sastavljen izraz? ta rade svi izrazi?
5. U ovom poglavlju predstavljeni su iskazi dodele, kao to je spam = 10. U emu je
razlika izmeu izraza i iskaza?
6. ta sadri promenljiva bacon nakon pokretanja sledeeg koda?

bacon = 20
bacon + 1

7. Na ta bi trebalo da se svede sledei izraz?

spam + spamspam
spam * 3

8. Zato je egg pravilan naziv promenljive, a 100 nepravilan?


9. Koje tri funkcije mogu da se upotrebe za dobijanje vrednosti celog broja, broja
pokretne take ili niza za vrednost?
10. Zato ovaj izraz izaziva greku? Kako moete da ga ispravite?

I have eaten + 99 + burritos.

Dodatni kredit: Potraite online Python dokumentaciju za funkciju len(). Pronai ete je
na web stranici pod naslovom Built-in Functions. Preuzmite listu funkcija koje Python
sadri, potraite ta radi funkcija round() i eksperimentiite njome u interaktivnoj konzoli.

You might also like