Professional Documents
Culture Documents
Python Osnove Pythona
Python Osnove Pythona
AL SWEIGART
UVOD U PYTHON
Automatizovanje dosadnih poslova
PRAKTINO PROGRAMIRANJE ZA POETNIKE
Al Sweigart
Izdava:
Mihailo J. olaji
Autor: Al Sweigart
Prevod: Slavica Prudkov
Lektura: Milo Jevtovi
Slog : Zvonko Aleksi
Znak Kompjuter biblioteke:
Milo Milosavljevi
tampa: Pekograf, Zemun
Tira: 500
ISBN: 978-1-59327-599-0
2015
Copyright 2015 by Al Sweigart, No Starch Press, Inc.
All right reserved. No part of this book may be reproduced or
transmitted in any form or by means, electronic or mechanical,
including photocopying, recording or by any information storage
retrieval system, without permission from the Publisher.
Autorizovani prevod sa engleskog jezika edicije u izdanju
No Starch Press, Inc., Copyright 2015.
Sva prava zadrana. Nije dozvoljeno da nijedan deo ove knjige
bude reprodukovan ili snimljen na bilo koji nain ili bilo
kojim sredstvom, elektronskim ili mehanikim, ukljuujui
fotokopiranje, snimanje ili drugi sistem presnimavanja
informacija, bez dozvole izdavaa.
Zatitni znaci
Kompjuter Biblioteka i No Starch Press, Inc. su pokuali da u
ovoj knjizi razgranie sve zatitne oznake od opisnih termina, pratei stil isticanja oznaka velikim slovima.
Autor i izdava su uinili velike napore u pripremi ove knjige, iji
je sadraj zasnovan na poslednjem (dostupnom) izdanju softvera.
Delovi rukopisa su moda zasnovani na predizdanju softvera
dobijenog od strane proizvoaa. Autor i izdava ne daju nikakve
garancije u pogledu kompletnosti ili tanosti navoda iz ove knjige,
niti prihvataju ikakvu odgovornost za performanse ili gubitke,
odnosno oteenja nastala kao direktna ili indirektna posledica
korienja informacija iz ove knjige.
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
vi
Sadraj
POGLAVLJE 2
31
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
viii
Sadraj
POGLAVLJE 6
123
DEO II
POGLAVLJE 7
147
Sadraj
ix
POGLAVLJE 8
173
Sadraj
POGLAVLJE 9
197
Sadraj
POGLAVLJE 10
xi
215
POGLAVLJE 11
233
xii
Sadraj
POGLAVLJE 12
265
Sadraj
xiii
POGLAVLJE 13
295
xiv
Sadraj
POGLAVLJE 14
319
POGLAVLJE 15
335
Sadraj
xv
POGLAVLJE 16
361
xvi
Sadraj
POGLAVLJE 17
387
Sadraj
POGLAVLJE 18
xvii
413
DODATAK A
441
xviii
Sadraj
DODATAK B
443
DODATAK C
447
UVOD
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.
preuzimanje fajlova ili kopija teksta sa web sajta kad god je auriran
Ovi zadaci su jednostavni, ali korisnicima oduzimaju vreme i esto su veoma trivijalni ili
specifini da ne postoji ve napisan softver za njihovo izvrenje. Naoruani sa malo programerskog znanja, moete da obezbedite da raunar izvri ove zadatke umesto vas.
Konvencije
Ova knjiga nije dizajnirana kao referentni prirunik; ovo je vodi za poetnike. Stil programiranja 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 napisana 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 programiranje, 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?
moe da se promeni i pobolja efikasnost, ali ova knjiga iskljuivo je fokusirana na pokretanje 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 misteriozno. Programiranje je jednostavan in unoenja instrukcija koje raunar treba da izvri.
Ove instrukcije mogu da ukljuuju neke brojeve, modifikovanje teksta ili potragu za informacijama u fajlovima ili da komuniciraju sa drugim raunarima posredstvom Interneta.
Svi programi koriste osnovne instrukcije kao gradivne blokove. Evo nekoliko najee upotrebljavanih (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 jednostavan program koji je napisan Python programskim jezikom. Poevi od vrha, Python softver 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 |.
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 Python 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
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 pronai u svakom poglavlju:
Deo I: Osnove Python programiranja
Poglavlje 1: Osnove Pythona Obuhvaeni su izrazi, najosnovnije vrste Python instrukcija i naini na koje moete da upotrebite Python interaktivnu konzolu programa za eksperimentisanje 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 organizuje 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 prikazani su napredniji naini za organizovanje podataka.
Poglavlje 6: Manipulisanje nizovima Opisana je upotreba tekstualnih podaka (u Pythonu 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 sadraje tekstualnih fajlova i snimaju informacije u fajlove na hard drajvu.
UVOD
Pokretanje IDLE-a
Na OS X sistemu kliknite na Apple eni, selektujte About This Mac 4 More Info
4 System Report 4 Hardware, a zatim potraite polje Processor Name. Ako
je napisano bilo ta drugo (ukljuujui Intel Core 2 Duo), imate 64-bitnu mainu.
Na Ubuntu Linux sistemu otvorite Terminal i pokrenite komandu uname -m. Odgovor
i686 znai da je sistem 32-bitni, a odgovor x86_64 znai da je sistem 64-bitni.
Na Mac OS X sistemu preuzmite .dmg fajl koji odgovara vaoj verziji OS X-a i dvostruko
kliknite na njega. Pratite instrukcije koje instalacioni program prikazuje na ekranu da biste
instalirali Python, kao to je ovde izlistano:
1. Kada se DMG paket otvori u novom prozoru, dvostruko kliknite na fajl Python.
prihvatili licencu.
3. Selektujte HD Macintosh (ili koji god naziv ima va hard drajv) i kliknite na Install.
Ako koristite Ubuntu sistem, moete da instalirate Python iz Terminala pratei sledee korake:
1. Otvorite prozor Terminal.
2. Ukucajte sudo apt-get install python3.
3. Ukucajte sudo apt-get install idle3.
4. Ukucajte sudo apt-get install python3-pip.
Pokretanje IDLE-a
Iako je Python prevodilac program koji pokree Python programe, interactive development
environment (IDLE) softver je mesto na koje ete uneti programe, kao u procesor rei.
Pokrenite sada IDLE.
Na Windows 7 sistemu ili novijem kliknite na ikonicu Start u donjem levom uglu
ekrana, u polje za pretragu ukucajte IDLE i selektujte IDLE (Python GUI).
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:
Python 3.4.0 (v3.4.0:04f714765c13, Mar 16 2014, 19:25:23) [MSC v.1600 64 bit
(AMD64)] on win32Type "copyright", "credits" or "license()" for more information.
>>>
Ovaj prozor se naziva interaktivna konzola. Konzola je program koji omoguava da unosite
instrukcije u raunar, kao to su Terminal ili Command Prompt na OS X i Windows sistemima. Pythonova interaktivna konzola omoguava unos instrukcija za pokretanje softvera
Python prevodioca. Raunar ita instrukcije koje unesete i odmah ih pokree.
Na primer, u interaktivnu konzolu pored stavke >>> prompt unesite sledee:
>>> print('Hello world!')
Nakon to ukucate ovu liniju i pritisnete ENTER, interaktivna konzola treba da prikae
sledei odgovor:
>>> print('Hello world!')
Hello world!
Pronalaenje pomoi
Samostalno reavanje programerskih problema je lake nego to moda mislite. Ako ne
verujete, hajde namerno da izazovemo greku: unesite 42 + 3 u interaktivnu konzolu. Ne
treba da znate ta znai ova instrukcija, ali bi rezultat trebalo da izgleda ovako:
>>> '42' + 3
u Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
'42' + 3
v TypeError: Can't convert 'int' object to str implicitly
>>>
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 Python 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 implicitly (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.
UVOD
10
Ovi web sajtovi olakavaju deljenje velike koliine koda sa ljudima preko Weba,
bez rizika od gubitka formatiranja teksta. Moete, nakon toga, da postavite URL
postavljenog koda u e-mail ili post na forumu. Na primer, ovo su delovi koda koje
sam ja postavio: http://pastebin.com/SzP2DbFx/ i https://gist.github.com/
asweigart/6912168/.
Objasnite ta ste ve pokuali da uradite da biste reili problem. To e onima od
kojih traite pomo dati do znanja da ste ve uloili trud da reite sami problem.
Napiite koju verziju Pythona koristite (postoje neke kljune razlike izmeu
verzije 2 Python prevodioca i verzije 3 Python prevodioca). Navedite i koji
operativni sistem i verziju koristite.
Ako se greka javi nakon to izvrite promene u kodu, objasnite tano ta ste
promenili.
Napomenite da li se greka javlja svaki put kada pokrenete program ili samo
nakon to izvrite odreene akcije (opiite te akcije).
Uvek pratite online bonton. Na primer, nemojte da postavljate pitanje napisano velikim
slovima ili da postavljate nerazumne zahteve ljudima koji pokuaju da vam pomognu.
Rezime
Za veinu ljudi raunar je samo ureaj, ali ne i alat. Meutim, uenjem programiranja dobiete pristup jednoj od najmonijih alatki modernog sveta, a uz to ete se i zabaviti. Programiranje 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
OSNOVE PYTHON
PROGRAMIRANJA
11
OSNOVE PYTHONA
PROGRAMSKI
JEZIK
PYTHON
13
14
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.
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
Modul/ostatak
Deljenje celog broja/kolinik
Deljenje
Mnoenje
Oduzimanje
Sabiranje
2 ** 3
22 % 8
22 // 8
22 / 8
3*5
5-2
2+2
8
6
2
2.75
15
3
4
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
(5 - 1) * ((7 + 1) / (3 - 1))
4 * ((7 + 1) / (3 - 1))
4 * (
) / (3 - 1))
4 * (
) / (
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
17
int) ukazuje na vrednosti koje su ceo broj. Brojevi sa decimalnim takama, kao to je 3.14,
Primeri
-2, -1, 0, 1, 2, 3, 4, 5
-1.25, -1.0, --0.5, 0.0, 0.5, 1.0, 1.25
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, verovatno nije ukucan krajnji karakter navodnika na kraju niza, kao u ovom primeru:
>>> Hello world!
SyntaxError: EOL while scanning string literal
Izraz se svodi na jednu vrednost - novu vrednost niza koja kombinuje tekst dva niza. Meutim, 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
Poruka o greci Cant convert int object to str implicitly znai da Python pretpostavlja da ste pokuali da spojite ceo broj sa nizom Alice. Kod treba da eksplicitno konvertuje ceo broj u niz, zato to Python to ne moe da uradi automatski (konvertovanje vrsta
podataka e biti opisano u odeljku Razlaganje programa kada budemo govorili o str(),
int() i float() funkcijama).Operator * se koristi za mnoenje kada vri operaciju za dva
cela broja ili broja sa pokretnom takom. Meutim, kada se koristi u jednoj vrednosti niza i
jednoj vrednosti celog broja, on postaje operator ponavljanja niza. Unesite niz pomnoen sa
brojem u interaktivnu konzolu da biste videli ovu operaciju u akciji.
>>> Alice * 5
AliceAliceAliceAliceAlice
Izraz se svodi na jednu vrednost niza koja replicira originalni broj jednak sa vrednou celog
broja. Ponavljanje niza je koristan trik, ali se ne upotrebljava toliko esto kao spajanje niza.
Operator * moe da se koristi samo sa dve numerike vrednosti (za mnoenje) ili za jednu
vrednost niza i jednu vrednost celog broja (za ponavljanje niza). U suprotnom, Python e
samo prikazati poruku o greci.
>>> Alice * Bob
Traceback (most recent call last):
File <pyshell#32>, line 1, in <module>
Alice * Bob
TypeError: cant multiply sequence by non-int of type str
>>> Alice * 5.0
Traceback (most recent call last):
File <pyshell#33>, line 1, in <module>
Alice * 5.0
TypeError: cant multiply sequence by non-int of type float
Jasno je zato Python ne razume ove izraze: ne moete da pomnoite dve rei, a teko je
ponoviti proizvoljni niz za frakcioni broj puta.
Iskazi dodele
Vrednosti ete uvati u promenljivim sa iskazom dodele. Iskaz dodele sadri naziv promenljive, 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.
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.
spam = 40
spam
eggs = 2
spam + eggs
spam + eggs + spam
spam = spam + 2
spam
Promenljiva je zapoeta (ili kreirana) kada je prvi put vrednost sauvana u njoj u. Nakon
toga, moete da je upotrebite u izrazu sa drugim promenljivim i vrednostima v. Kada je
promenljivoj dodeljena nova vrednost w, stara vrednost je zaboravljena i zbog toga je spam
promenljiva procenjena na 42, umesto na 40 na kraju primera. To se naziva prepisivanje
promenljive. U interaktivnu konzolu unesite sledei kod da biste pokuali da prepiete niz:
>>> spam = Hello
>>> spam
Hello
>>> spam = Goodbye
>>> spam
Goodbye
Kao i kutija na slici 1-3, spam promenljiva u ovom primeru uva Hello, dok ovaj niz ne
zamenite sa Goodbye.
20
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
balance
currentBalance
current_balance
_spam
SPAM
account4
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 ukazujem 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 editorima 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 omoguava 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.
Sada je vreme da kreirate svoj prvi program! Kada se otvori prozor fajl editora, ukucajte u
njega sledee:
u # This program says hello and asks for my name.
v print(Hello world!)
print(What is your name?)
# ask for their name
w myName = input()
x print(It is good to meet you, + myName)
y print(The length of your name is:)
print(len(myName))
z print(What is your age?)
# ask for their age
myAge = input()
print(You will be + str(int(myAge) + 1) + in a year.)
22
Kada unesete izvorni kod, snimite ga da ne biste morali da ga kucate svaki put kada pokreete IDLE. Iz menija na vrhu prozora fajl editora selektujte opciju File4 Save As. U prozoru 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 uitali 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 testiraju 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 Python izvri ovu liniju, moete da kaete da je pozvao funkciju print() i da je vrednost niza
prosleena funkciji. Vrednost koja je prosleena funkciji naziva se argument. Videete da
navodnici nisu odtampani na ekranu. Oni samo oznaavaju gde je poetak i kraj niza; nisu
deo vrednosti niza.
NAPOMENA
Takoe moete da upotrebite ovu funkciju za postavljanje prazne linije na ekranu; samo pozovite funkciju print(),
bez ikakvog teksta izmeu zagrada.
Kada piete naziv funkcije, otvorena i zatvorena zagrada na krajuidentifikuju funkciju.Zbog toga ete u ovoj knjizi videti print() umesto print. U Poglavlju 2 detaljnije su
opisane funkcije.
Funkcija input()
Funkcija input() eka da korisnik ukuca tekst na tastaturi i pritisne ENTER.
w myName = input()
Pozivanje ove funkcije svodi vrednost na niz jednak sa tekstom korisnika, a prethodna linija
koda dodeljuje promenljivu myName u ovu vrednost niza.
O pozivanju funkcije input() moete da razmiljate kao o izrazu koji izraunava bilo koji
niz koji korisnik unese. Ako je korisnik uneo Al, onda bi izraz trebalo da se svede kao
myName = Al.
24
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 odtampati na ekranu.
Funkcija len()
Funkciji len() moete da prosledite vrednost niza (ili promenljivu koja sadri niz), a funkcija je izraunava do vrednosti celog broja za broj karaktera u odreenom nizu.
y print(The length of your name is:)
print(len(myName))
Kao i ovi primeri, funkcija len(myName) svodi vrednost na ceo broj. Zatim se ta vrednost
prosleuje funkciji print() da bi bila odtampana na ekranu. Vidite da funkcija print()
omoguava da prosledite vrednosti celog broja ili vrednosti niza. Meutim, vidite i greku
koja se prikazuje kada u interaktivnu konzolu ukucate sledee:
>>> print(I am + 29 + years old.)
Traceback (most recent call last):
File <pyshell#6>, line 1, in <module>
print(I am + 29 + years old.)
TypeError: Cant convert int object to str implicitly
Funkcija print() ne izaziva ovu greku, ve je izaziva izraz koji ste pokuali da prosledite
toj funkciji. Istu poruku o greci dobiete ako u interaktivnu konzolu ukucate izraz kao
samostalan.
Analiza programa
25
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.
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
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 korisnik unese broj. Unesite spam = input() u interaktivnu konzolu i unesite 101 kada program
zatrai tekst.
>>> spam = input()
101
>>> spam
101
Vrednost koja je sauvana unutar spama nije ceo broj 101, ve je to niz 101. Ako elite da
izvrite izraunavanje koristei vrednost u spamu, upotrebite funkciju int() da biste dobili
oblik celog broja spama, a zatim sauvajte ceo broj kao novu vrednost u spamu.
>>> spam = int(spam)
>>> spam
101
Sada bi trebalo da moete da tretirate promenljivu spam kao ceo broj, umesto kao niz.
>>> spam * 10 / 5
202.0
Zapamtite: ako prosledite vrednost funkciji int() koju ona ne moe da svede na ceo broj,
Python e prikazati poruku o greci.
>>> int(99.99)
Traceback (most recent call
File <pyshell#18>, line
int(99.99)
ValueError: invalid literal
>>> int(twelve)
Traceback (most recent call
File <pyshell#19>, line
int(twelve)
ValueError: invalid literal
last):
1, in <module>
for int() with base 10: 99.99
last):
1, in <module>
for int() with base 10: twelve
Funkcija int() je takoe korisna ako treba da zaokruite broj sa pokretnom takom.
Analiza programa
27
>>> int(7.7)
7
>>> int(7.7) + 1
8
U programu ste upotrebili funkcije int() i str() u najmanje tri linije da biste dobili vrednost
odgovarajue vrste podataka za kod.
z print(What is your age?) # ask for their age
myAge = input()
print(You will be + str(int(myAge) + 1) + in a year.)
Promenljiva myAge sadri vrednost koju je vratila funkcija input(). Poto funkcija input()
uvek vraa niz (ak i ako korisnik ukuca broj), moete da upotrebite kod int(myAge) da biste
vratili vrednost celog broja niza u promenljivoj myAge. Ova vrednost celog broja se, zatim,
dodaje jedinici (1) i izrazu int(myAge) + 1.
Rezultat ovog dodavanja je prosleen funkciji str() function: str(int(myAge) + 1). Vrednost
niza koja je vraena je, zatim, spojena sa nizovima You will be i in a year. da bi se
svela na jednu vrednost velikog niza. Ovaj veliki niz je na kraju prosleen funkciji print()
da bi bio prikazan na ekranu.
Recimo da korisnik unese niz 4 za promenljivu myAge. Niz 4 je konvertovan u ceo broj
da biste mogli da mu dodate 1. Rezultat je 5. Funkcija str() konvertuje rezultat nazad na
niz, pa moete da ga spojite sa drugim nizom in a year., da biste kreirali finalnu poruku.
Ovi koraci procene bi izgledali slino onima na slici 1-4.
E K V I VALE N T N OS T T E K S TA I B R OJA
Iako se vrednost niza broja smatra potpuno drugaijom vrednou od verzije celog
broja ili broja sa pokretnom takom, ceo broj moe da bude jednak sa brojem
pokretne take.
>>> 42 == 42
False
>>> 42 == 42.0
True
>>> 42.0 == 0042.000
True
Python razlikuje ovo zato to su nizovi tekstualni, dok su celi brojevi i brojevi
pokretnog zareza brojevi.
28
4 + 1
) + ' in a year.')
) + ' in a year.')
'5'
+ ' in a year.')
+ ' in a year.')
Rezime
Moete da izraunate izraze pomou kalkulatora ili da ukucate nadovezane nizove u procesoru rei. Moete ak da ponovite niz jednostavnim kopiranjem i pejstovanjem teksta. Meutim, 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 jednostavnim 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 pokrenuti, 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
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.