Professional Documents
Culture Documents
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.
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
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
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
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
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
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
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
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
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
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
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.
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.
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
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
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
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:
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:
Nakon to ukucate ovu liniju i pritisnete ENTER, interaktivna konzola treba da prikae
sledei odgovor:
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.
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
13
14 POGLAVLJE 1 Osnove Pythona
>>> 2 + 2
4
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
>>>
>>> 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
>>> 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
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
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:
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.
Jasno je zato Python ne razume ove izraze: ne moete da pomnoite dve rei, a teko je
ponoviti proizvoljni niz za frakcioni broj puta.
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.
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:
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:
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
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.
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
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.
>>> 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:
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
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.
>>> 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.
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.
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.
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
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
spam
spam
bacon = 20
bacon + 1
spam + spamspam
spam * 3
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.