UVOD U PYTHON Automatizovanje dosadnih poslova PRAKTIČNO PROGRAMIRANJE ZA POČETNIKE
AL SWEIGART
UVOD U PYTHON Automatizovanje dosadnih poslova PRAKTIČNO PROGRAMIRANJE ZA POČETNIKE
Al Sweigart
Izdavač:
Automate the Boring Stuff with Python by Al Sweigart,
Obalskih radnika 15, Beograd Tel: 011/2520272 e-mail:
[email protected] internet: www.kombib.rs Urednik: Mihailo J. Šolajić Za izdavača, direktor:
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 zadržana. Nije dozvoljeno da nijedan deo ove knjige bude reprodukovan ili snimljen na bilo koji način ili bilo kojim sredstvom, elektronskim ili mehaničkim, uključujući fotokopiranje, snimanje ili drugi sistem presnimavanja informacija, bez dozvole izdavača. Zaštitni znaci Kompjuter Biblioteka i „No Starch Press, Inc.” su pokušali da u ovoj knjizi razgraniče sve zaštitne oznake od opisnih termina, prateći stil isticanja oznaka velikim slovima. Autor i izdavač su učinili velike napore u pripremi ove knjige, čiji je sadržaj zasnovan na poslednjem (dostupnom) izdanju softvera. Delovi rukopisa su možda zasnovani na predizdanju softvera dobijenog od strane proizvođača. Autor i izdavač ne daju nikakve garancije u pogledu kompletnosti ili tačnosti navoda iz ove knjige, niti prihvataju ikakvu odgovornost za performanse ili gubitke, odnosno oštećenja nastala kao direktna ili indirektna posledica korišćenja informacija iz ove knjige.
Godina izdanja: 2016. Broj knjige: 482 Izdanje: Prvo ISBN: 978-86-7310-505-5 CIP - Каталогизација у публикацији Народна библиотека Србије, Београд
Kratak sadržaj
UVOD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
DEO I POGLAVLJE 1 Osnove Pythona . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13 POGLAVLJE 2 Kontrola toka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31 POGLAVLJE 3 Funkcije . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .61 POGLAVLJE 4 Liste. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79 POGLAVLJE 5 Rečnici i strukturiranje podataka. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 POGLAVLJE 6 Manipulisanje nizovima . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
DEO I POGLAVLJE 7 Podudaranje šablona pomoću regularnih izraza . . . . . . . . . . . . . . . . . . . . . . . 147 POGLAVLJE 8 Čitanje i pisanje fajlova. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
iii
iv
Kratak sadržaj
POGLAVLJE 9 Organizovanje fajlova . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 POGLAVLJE 10 Ispravljanje grešaka. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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, raspoređivanje zadataka i pokretanje programa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335 POGLAVLJE 16 Slanje e-maila i tekstualnih poruka. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361 POGLAVLJE 17 Manipulisanje slikama. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387 POGLAVLJE 18 Kontrolisanje tastature i miša pomoću GUI automatizacije. . . . . . . . . . . . . . 413 DODATAK A Instaliranje nezavisnih modula. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441 DODATAK B Pokretanje programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443 DODATAK C Odgovori na praktična pitanja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447 INDEKS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461
Sadržaj
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 Pronalaženje pomoći ..................................................................................................................................... 8 „Pametno“ postavljanje programerskih pitanja .................................................................................. 9 Rezime...............................................................................................................................................................10
DEO I POGLAVLJE 1
13
Osnove Pythona . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13 Unošenje izraza u interaktivnu konzolu ..............................................................................................14 Vrste podataka celog broja, pokretne tačke 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
Sadržaj
Funkcije str(), int() i float()...................................................................................................................25 Rezime ...............................................................................................................................................................28 Praktična pitanja ............................................................................................................................................29
POGLAVLJE 2
31
Kontrola toka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31 Bulove (logičke) vrednosti .........................................................................................................................32 Operatori poređenja ....................................................................................................................................33 Bulovi (logički) operatori ............................................................................................................................35 Binarni Bulovi operatori .....................................................................................................................35 Operator not ..........................................................................................................................................36 Mešanje Bulovih operatora i operatora poređenja ..........................................................................36 Elementi kontrole toka ................................................................................................................................37 Uslovi ........................................................................................................................................................37 Blokovi koda ...........................................................................................................................................37 Izvršavanje 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 početak, zaustavljanje i korake funkcije range().................................56 Importovanje modula .................................................................................................................................57 Iskazi from import ................................................................................................................................58 Ranije završavanje programa pomoću funkcije sys .exit()............................................................58 Rezime ...............................................................................................................................................................59 Praktična pitanja.............................................................................................................................................59
POGLAVLJE 3..............................................................................................61 Funkcije . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .61 Iskazi def sa parametrima ..........................................................................................................................63 Vraćene vrednosti i iskazi return .............................................................................................................63 Vrednost None................................................................................................................................................65 Argumenti ključne reči 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
Sadržaj
vii
Rezime ...............................................................................................................................................................76 Praktična pitanja ............................................................................................................................................76 Praktični projekti ...........................................................................................................................................77 The Collatz Sequence .........................................................................................................................77 Provera ispravnosti unosa..................................................................................................................77
POGLAVLJE 4
79
Liste. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79 Vrsta podataka liste ......................................................................................................................................80 Dobijanje pojedinačnih vrednosti u listi pomoću indeksa ...................................................80 Negativni indeksi ..................................................................................................................................82 Dobijanje podliste pomoću isečaka ..............................................................................................82 Dobijanje dužine liste pomoću funkcije len().............................................................................83 Menjanje vrednosti u listi pomoću indeksa ................................................................................83 Spajanje i ponavljanje liste ...............................................................................................................83 Uklanjanje vrednosti iz liste pomoću iskaza del ........................................................................84 Upotreba listi ..................................................................................................................................................84 Upotreba petlji for u listama ............................................................................................................86 Operatori in i not in .............................................................................................................................87 Trik višestruke dodele .........................................................................................................................87 Operatori naglašene dodele .....................................................................................................................88 Metodi ...............................................................................................................................................................89 Pronalaženje vrednosti u listi pomoću metoda index()........................................................89 Dodavanje vrednosti u liste pomoću metoda append() i insert().......................................89 Uklanjanje vrednosti iz liste pomoću metoda remove().........................................................90 Sortiranje vrednosti u listi pomoću metoda sort()................................................................... 91 Primer programa: Magic 8 Ball sa listom...............................................................................................92 Vrste slične listama: nizovi i zapisi ...........................................................................................................93 Promenljive i nepromenljive vrste podataka .............................................................................94 Vrsta podataka zapisa .........................................................................................................................96 Konvertovanje vrsta pomoću funkcija list() i tuple().................................................................97 Reference .........................................................................................................................................................97 Prelazne reference ............................................................................................................................ 100 Funkcije copy() i deepcopy() modula copy ......................................................................... 100 Rezime ............................................................................................................................................................ 101 Praktična pitanja ......................................................................................................................................... 102 Praktični projekti ........................................................................................................................................ 102 Comma Code ...................................................................................................................................... 102 Character Picture Grid ..................................................................................................................... 103
POGLAVLJE 5
105
Rečnici i strukturiranje podataka. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 Vrsta podataka rečnika ............................................................................................................................. 105 Rečnici nasuprot listi ........................................................................................................................ 106 Metodi keys(), values() i items()..................................................................................................... 107 Provera da li ključ ili vrednost postoje u rečniku ................................................................... 109 Metod get()........................................................................................................................................... 109 Metod setdefault()............................................................................................................................. 110
viii
Sadržaj
Lepo štampanje........................................................................................................................................... 111 Upotreba struktura podataka za modelovanje stvarnih stvari .................................................. 112 Tabla za Iks-oks igricu ...................................................................................................................... 113 Ugnežđeni rečnici i liste .................................................................................................................. 117 Rezime ............................................................................................................................................................ 119 Praktična pitanja ......................................................................................................................................... 119 Praktični projekti ........................................................................................................................................ 120 Inventar fantazi igre ......................................................................................................................... 120 Lista za funkcije rečnika za inventar fantazi igre..................................................................... 120
POGLAVLJE 6
123
Manipulisanje nizovima. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 Upotreba nizova ......................................................................................................................................... 123 Literali niza............................................................................................................................................ 124 Dvostruki navodnici.................................................................................................................. 124 Karakteri izlazne sekvence...................................................................................................... 124 Neprerađeni nizovi ................................................................................................................... 125 Višelinijski nizovi sa trostrukim navodnicima ................................................................. 125 Višelinijski 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 pomoću rjust(), ljust() i center() metoda .............................................. 133 Uklanjanje karaktera razmaka pomoću strip(), rstrip() i lstrip() metoda ........................ 134 Kopiranje i pejstovanje nizova pomoću 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 Praktična pitanja ......................................................................................................................................... 142 Praktični projekti ........................................................................................................................................ 143 Stoni štampač ..................................................................................................................................... 143
DEO II POGLAVLJE 7
147
Podudaranje šablona pomoću regularnih izraza. . . . . . . . . . . . . . . . . . . . . . . . 147 Pronalaženje šablona teksta bez regularnih izraza ........................................................................ 148 Pronalaženje šablona teksta pomoću regularnih izraza .............................................................. 150
Sadržaj
ix
Kreiranje regex objekata ................................................................................................................. 150 Podudaranje regex objekata ......................................................................................................... 151 Pregled podudaranja regularnih izraza ..................................................................................... 152 Više podudaranja šablona upotrebom regularnih izraza ............................................................ 152 Grupisanje pomoću zagrada ......................................................................................................... 152 Podudaranje više grupa pomoću vertikalne crte................................................................... 153 Opciono podudaranje upotrebom upitnika ............................................................................ 154 Podudaranje nula ili više primera teksta pomoću zvezdice .............................................. 155 Podudaranje jednog ili više primera teksta pomoću znaka plus...................................... 155 Podudaranje specifičnih ponavljanja upotrebom velikih zagrada ................................. 156 „Gramzivo“ i „negramzivo“ podudaranje .......................................................................................... 156 Metod findall().............................................................................................................................................. 157 Klase karaktera ............................................................................................................................................ 158 Kreiranje sopstvenih klasa karaktera ................................................................................................... 159 Karakteri znaka za umetanje i znaka za dolar .................................................................................. 159 Karakter zamene ......................................................................................................................................... 160 Podudaranje svega upotrebom tačke i zvezdice ................................................................... 161 Podudaranje novih linija pomoću karaktera tačke ............................................................... 162 Pregled regex simbola ............................................................................................................................. 162 Podudaranje neosetljivo na veličinu slova ....................................................................................... 163 Zamena nizova pomoću metoda sub()............................................................................................... 163 Upravljanje složenim regexima ............................................................................................................ 164 Kombinovanje promenljivih re .IGNORECASE, re .DOTALL i re.VERBOSE .............................. 164 Projekat: Ekstraktor telefonskog broja i e-mail adrese ................................................................. 165 Korak 1: Kreiranje regexa za brojeve telefona ......................................................................... 166 Korak 2: Kreiranje regexa za e-mail adrese ............................................................................... 166 Korak 3: Pronalaženje svih podudaranja u klipbord tekstu................................................ 167 Korak 4: Spajanje podudaranja u niz za klipbord................................................................... 168 Pokretanje programa ....................................................................................................................... 169 Ideje za slične programe ................................................................................................................. 169 Rezime ............................................................................................................................................................ 169 Praktična pitanja ......................................................................................................................................... 170 Praktični projekti ........................................................................................................................................ 172 Detekcija jake lozinke ...................................................................................................................... 172 Regex verzija metoda strip()........................................................................................................... 172
POGLAVLJE 8
173
Čitanje i pisanje fajlova. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 Fajlovi i putanje fajlova ............................................................................................................................ 173 Obrnuta kosa crta na Windowsu i kosa crta na OS X i Linuxu ........................................... 174 Aktuelni radni direktorijum ........................................................................................................... 175 Apsolutne, nasuprot relativnih putanja .................................................................................... 175 Kreiranje novih direktorijuma pomoću funkcije os .makedirs()........................................ 176 Modul os.path ............................................................................................................................................. 177 Rukovanje apsolutnim i relativnim putanjama ...................................................................... 177 Pronalaženje veličina fajla i sadržaja direktorijuma .............................................................. 179 Provera validnosti putanje ............................................................................................................. 180 Proces čitanja/pisanja fajla ..................................................................................................................... 180 Otvaranje fajlova pomoću funkcije open()............................................................................... 181
x
Sadržaj
Čitanje sadržaja fajlova .................................................................................................................... 182 Pisanje u fajlove ................................................................................................................................. 183 Snimanje promenljivih pomoću modula shelve ............................................................................ 184 Snimanje promenljivih pomoću funkcije pprint .pformat()........................................................ 185 Projekat: Generisanje nasumičnih fajlova za test ........................................................................... 186 Korak 1: Čuvanje podataka testa u rečniku .............................................................................. 187 Korak 2: Kreiranje fajla testa i mešanje redosleda pitanja .................................................. 188 Korak 3: Kreiranje opcija za odgovor .......................................................................................... 189 Korak 4: Pisanje sadržaja za test i fajlova za odgovore ........................................................ 189 Projekat: Multiklipbord ............................................................................................................................ 191 Korak 1: Komentari i podešavanja ............................................................................................... 192 Korak 2: Snimanje sadržaja klipborda pomoću ključnih reči ............................................. 192 Korak 3: Listanje ključnih reči i učitavanje sadržaja ključne reči ....................................... 193 Rezime ............................................................................................................................................................ 194 Praktična pitanja ......................................................................................................................................... 194 Praktični projekti ........................................................................................................................................ 194 Proširenje multiklipborda ............................................................................................................... 194 Mad Lib program ............................................................................................................................... 195 Pretraživanje regexa.......................................................................................................................... 195
POGLAVLJE 9
197
Organizovanje fajlova . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 Modul shutil ................................................................................................................................................. 198 Kopiranje fajlova i direktorijuma ................................................................................................. 198 Pomeranje i promena naziva fajlova i direktorijuma ........................................................... 199 Trajno brisanje fajlova i direktorijuma ....................................................................................... 200 Bezbedno brisanje pomoću modula send2trash .................................................................. 201 Pregled stabla direktorijuma ................................................................................................................. 202 Kompresovanje fajlova pomoću 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 američkom stilu na datum u evropskom stilu ....................................................................... 206 Korak 1: Kreiranje regexa za datume u američkom stilu ..................................................... 206 Korak 2: Identifikovanje delova datuma iz naziva fajlova ................................................... 207 Korak 3: Formiranje novih i promena postojećih naziva fajlova ...................................... 209 Ideje za slične 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 slične programe ................................................................................................................. 212 Rezime ............................................................................................................................................................ 213 Praktična pitanja ......................................................................................................................................... 213 Praktični projekti ........................................................................................................................................ 213 Selektivno kopiranje ......................................................................................................................... 213 Brisanje nepotrebnih fajlova ......................................................................................................... 214 Popunjavanje praznina.................................................................................................................... 214
Sadržaj
POGLAVLJE 10
xi
215
Ispravljanje grešaka. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 Podizanje izuzetaka ................................................................................................................................... 216 Dobijanje povratne informacije kao niza .......................................................................................... 217 Navodi ............................................................................................................................................................ 219 Upotreba navoda u simulaciji semafora ................................................................................... 219 Isključivanje navoda ......................................................................................................................... 221 Evidentiranje ................................................................................................................................................ 221 Upotreba modula logging ............................................................................................................. 221 Nemojte ispravljati grešku pomoću funkcije print().............................................................. 223 Nivoi evidentiranja ............................................................................................................................ 223 Isključivanje evidentiranja .............................................................................................................. 224 Evidentiranje u fajl ............................................................................................................................ 225 IDLE-ova funkcija za ispravljanje greške ............................................................................................ 225 Go ............................................................................................................................................................ 226 Step ........................................................................................................................................................ 226 Over ........................................................................................................................................................ 226 Out .......................................................................................................................................................... 227 Quit ......................................................................................................................................................... 227 Ispravljanje grešaka u programu za dodavanje brojeva ..................................................... 227 Tačke prekida ...................................................................................................................................... 229 Rezime ............................................................................................................................................................ 231 Praktična pitanja i zadaci.......................................................................................................................... 231 Praktični projekti ........................................................................................................................................ 232 Ispravljanje grešaka u programu bacanja novčića................................................................. 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 sadržajem klipborda i pokretanje pretraživača ............................... 236 Ideje za slične programe ................................................................................................................. 236 Preuzimanje fajlova sa Weba pomoću modula Requests ........................................................... 237 Preuzimanje web stranica pomoću funkcije requests.get()................................................ 237 Provera grešaka .................................................................................................................................. 238 Snimanje preuzetih fajlova na hard drajv ......................................................................................... 239 HTML ............................................................................................................................................................... 240 Izvori za učenje HTML-a .................................................................................................................. 240 Kratak podsetnik................................................................................................................................. 240 Pregled izvornog HTML-a web stranice .................................................................................... 241 Otvaranje alatki za programiranje u pretraživaču ................................................................. 242 Upotreba alatki za programiranje za pronalaženje HTML elemenata ........................... 244 Analiza HTML-a pomoću modula Beautiful Soup .......................................................................... 245 Kreiranje Beautiful Soup objekta iz HTML-a ............................................................................ 245 Pronalaženje elementa pomoću metoda select().................................................................. 246 Dobijanje podataka iz atributa elementa ................................................................................. 248
xii
Sadržaj
Projekat: “I’m Feeling Lucky” Google pretraga ............................................................................... 248 Korak 1: Upotreba argumenta komandne linije i traženje pretrage stranice .............. 249 Korak 2: Pronalaženje svih rezultata ........................................................................................... 249 Korak 3: Otvaranje web pretraživača za svaki rezultat ......................................................... 250 Ideje za slične programe ................................................................................................................. 251 Projekat: Preuzimanje svih XKCD stripova ........................................................................................ 251 Korak 1: Dizajniranje programa .................................................................................................... 252 Korak 2: Preuzimanje web stranice ............................................................................................. 253 Korak 3: Pronalaženje i preuzimanje slike stripa .................................................................... 254 Korak 4: Snimanje slike i pronalaženje prethodnog stripa ................................................. 255 Ideje za slične programe ................................................................................................................. 256 Kontrola pretraživača pomoću modula Selenium ......................................................................... 256 Pokretanje pretraživača kontrolisanog modulom Selenium ............................................. 256 Pronalaženje elemenata na stranici ............................................................................................ 257 Klik na stranicu ................................................................................................................................... 259 Popunjavanje i slanje formulara .................................................................................................. 259 Slanje specijalnih ključeva ............................................................................................................. 260 Klik na dugmad pretraživača ......................................................................................................... 261 Više informacija o Seleniumu ........................................................................................................ 261 Rezime............................................................................................................................................................. 261 Praktična pitanja ......................................................................................................................................... 261 Praktični projekti ........................................................................................................................................ 262 Program za slanje e-mailova iz komandne linije ................................................................... 262 Program za preuzimanje slika ....................................................................................................... 263 2048 ........................................................................................................................................................ 263 Potvrđivanje linka............................................................................................................................... 263
POGLAVLJE 12
265
Upotreba Excel tabela . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 Excel dokumenti ......................................................................................................................................... 266 Instaliranje modula openpyxl ................................................................................................................ 266 Čitanje Excel dokumenata ...................................................................................................................... 266 Otvaranja Excel dokumenata pomoću openpyxla ................................................................ 267 Dobijanje radnih listova iz radne sveske ................................................................................... 268 Dobijanje ćelija iz listova ................................................................................................................ 268 Konvertovanje između 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 slične programe ................................................................................................................. 276 Pisanje Excel dokumenata ...................................................................................................................... 277 Kreiranje i snimanje Excel dokumenata .................................................................................... 277 Kreiranje i uklanjanje radnih listova ........................................................................................... 278 Pisanje vrednosti u ćelije ................................................................................................................ 278 Projekat: Ažuriranje tabele ..................................................................................................................... 279
Sadržaj
xiii
Korak 1: Podešavanje strukture podataka sa ažuriranim informacijama ...................... 280 Korak 2: Provera svih redova i ažuriranje nepravilnih cena ............................................... 281 Ideje za slične programe ................................................................................................................. 281 Podešavanje stila fonta ćelija ................................................................................................................. 282 Font objekti .................................................................................................................................................. 282 Formule ......................................................................................................................................................... 284 Podešavanje redova i kolona ................................................................................................................. 285 Podešavanje visine reda i širine kolone ..................................................................................... 286 Spajanje i rastavljanje ćelija ........................................................................................................... 286 „Zamrznuta“ okna ............................................................................................................................. 287 Grafikoni ........................................................................................................................................................ 288 Rezime ............................................................................................................................................................ 290 Praktična pitanja ......................................................................................................................................... 291 Praktični projekti ........................................................................................................................................ 291 Kreator tablice množenja ............................................................................................................... 291 Ubacivač praznog reda ................................................................................................................... 292 Invertor ćelije tabele ........................................................................................................................ 292 Konvertovanje tekstualnih fajlova u tabelu ............................................................................. 293 Konvertovanje tabele u tekstualne fajlove .............................................................................. 293
POGLAVLJE 13
295
Upotreba PDF i Word dokumenata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295 PDF dokumenti ........................................................................................................................................... 295 Ekstrahovanje teksta iz PDF fajlova ............................................................................................ 296 Dekodiranje PDF fajlova ................................................................................................................. 297 Kreiranje PDF fajlova ........................................................................................................................ 298 Kopiranje stranica...................................................................................................................... 299 Rotiranje stranica....................................................................................................................... 300 Preklapanje stranica ................................................................................................................. 301 Kodiranje PDF fajlova............................................................................................................... 302 Projekat: Kombinovanje selektovanih stranica iz više PDF fajlova ................................................................................................................................. 303 Korak 1: Pronađite sve PDF fajlove .............................................................................................. 304 Korak 2: Otvorite svaki PDF ............................................................................................................ 304 Korak 3: Dodajte svaku stranicu ................................................................................................... 305 Korak 4: Snimite rezultate .............................................................................................................. 305 Ideje za slične 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
Sadržaj
Praktična pitanja ......................................................................................................................................... 316 Praktični projekti ........................................................................................................................................ 317 PDF paranoja ....................................................................................................................................... 317 Pozivnice kao Word dokumenti ................................................................................................... 317 Brutalni „rušitelj“ PDF lozinke........................................................................................................ 318
POGLAVLJE 14
319
Upotreba CSV fajlova i JSON podataka. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319 Modul csv ...................................................................................................................................................... 320 Objekti Reader .................................................................................................................................... 321 Čitanje podataka iz objekata Reader u petlji for .................................................................... 322 Objekti Writer ...................................................................................................................................... 322 Argumenti ključnih reči delimiter i lineterminator ............................................................... 323 Projekat: Uklanjanje zaglavlja iz CSV fajlova .................................................................................... 324 Korak 1: Kruženje kroz svaki CSV fajl .......................................................................................... 325 Korak 2: Učitavanje CSV fajla ......................................................................................................... 325 Korak 3: Ispisivanje CSV fajla bez prvog reda .......................................................................... 326 Ideje za slične programe ................................................................................................................. 327 JSON i API ...................................................................................................................................................... 327 Modul json .................................................................................................................................................... 328 Čitanje JSON-a pomoću funkcije loads().................................................................................... 328 Pisanje JSON-a pomoću 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: Učitavanje JSON podataka i štampanje vremenske prognoze ........................ 331 Ideje za slične programe ................................................................................................................. 332 Rezime ............................................................................................................................................................ 333 Praktična pitanja.......................................................................................................................................... 333 Praktični projekat ....................................................................................................................................... 333 Konvertor Excel-u-CSV...................................................................................................................... 333
POGLAVLJE 15
335
Evidencija vremena, raspoređivanje zadataka i pokretanje programa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335 Modul time ................................................................................................................................................... 336 Funkcija time .time().......................................................................................................................... 336 Funkcija time.sleep()......................................................................................................................... 337 Zaokruživanje brojeva .............................................................................................................................. 338 Projekat: Super štoperica ........................................................................................................................ 338 Korak 1: Podešavanje programa da prati vreme .................................................................... 339 Korak 2: Praćenje i štampanje vremena kruga ........................................................................ 339 Ideje za slične programe ................................................................................................................. 340 Modul datetime .......................................................................................................................................... 341 Vrsta podataka timedelta ............................................................................................................... 342 Pauziranje do specifičnog datuma ............................................................................................. 344 Konvertovanje datetime objekata u nizove ............................................................................ 344 Konvertovanje nizova u datetime objekte ............................................................................... 345
Sadržaj
xv
Pregled Pythonovih funkcija Time ....................................................................................................... 346 Višenitni rad ................................................................................................................................................. 347 Prosleđivanje argumenata u ciljnu funkciju niti .................................................................... 348 Problemi konkurencije .................................................................................................................... 349 Projekat: Višenitni XKCD program za preuzimanje ........................................................................ 349 Korak 1: Modifikovanje programa da koristi funkciju .......................................................... 350 Korak 2: Kreiranje i pokretanje niti .............................................................................................. 351 Korak 3: Sačekajte da se sve niti završe ..................................................................................... 352 Pokretanje drugih programa iz Pythona ........................................................................................... 352 Prosleđivanje argumenata komandne linije u funkciju Popen()....................................... 354 Task Scheduler, launchd i cron ..................................................................................................... 354 Otvaranje web sajtova pomoću Pythona ................................................................................. 355 Pokretanje drugih Python skriptova .......................................................................................... 355 Otvaranje programa pomoću standardnih aplikacija .......................................................... 355 Projekat: Jednostavan program za odbrojavanje .......................................................................... 357 Korak 1: Odbrojavanje ..................................................................................................................... 357 Korak 2: Reprodukovanje zvučnog fajla .................................................................................... 358 Ideje za slične programe ................................................................................................................. 358 Rezime ............................................................................................................................................................ 359 Praktična pitanja ......................................................................................................................................... 359 Praktični projekti ........................................................................................................................................ 360 „Ulepšana“ štoperica ........................................................................................................................ 360 Program za preuzimanje web stripova sa rasporedom........................................................ 360
POGLAVLJE 16
361
Slanje e-maila i tekstualnih poruka. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361 SMTP ............................................................................................................................................................... 362 Slanje e-maila .............................................................................................................................................. 362 Povezivanje na SMTP server .......................................................................................................... 363 Slanje SMTP „Hello“ poruke ........................................................................................................... 364 Pokretanje TLS enkripcije ............................................................................................................... 364 Prijava na SMTP server ..................................................................................................................... 364 Slanje e-maila ...................................................................................................................................... 365 Diskonektovanje sa SMTP servera ............................................................................................... 366 IMAP ................................................................................................................................................................ 366 Vraćanje i brisanje e-mailova pomoću IMAP-a ................................................................................ 366 Konektovanje na IMAP server ....................................................................................................... 367 Prijava na IMAP server ..................................................................................................................... 368 Pretraživanje e-maila ........................................................................................................................ 368 Biranje direktorijuma................................................................................................................ 368 Izvršavanje pretrage................................................................................................................. 369 Ograničenja veličine................................................................................................................. 371 Preuzimanje i označavanje e-maila kao pročitanog ............................................................. 372 Dobijanje e-mail adrese iz neobrađene poruke ..................................................................... 373 Dobijanje teksta iz neobrađene poruke .................................................................................... 374 Brisanje e-mailova ............................................................................................................................. 375 Diskonektovanje sa IMAP servera ............................................................................................... 375 Projekat: Slanje podsetnika za plaćanje članarine e-mailom ..................................................... 376
xvi
Sadržaj
Korak 1: Otvaranje Excel fajla ........................................................................................................ 376 Korak 2: Pronalaženje svih članova koji nisu platili članarinu ........................................... 378 Korak 3: Slanje prilagođenih podsetnika e-mailom .............................................................. 378 Slanje tekstualnih poruka pomoću servisa Twilio .......................................................................... 380 Prijava za Twilio nalog ..................................................................................................................... 380 Slanje tekstualnih poruka ............................................................................................................... 381 Projekat: Just Text Me modul ................................................................................................................ 383 Rezime ............................................................................................................................................................ 384 Praktična pitanja ......................................................................................................................................... 384 Praktični projekti ........................................................................................................................................ 385 Program koji nasumično šalje e-mailove za izvršavanje zadataka................................... 385 Podsetnik za kišobran ...................................................................................................................... 385 Automatska odjava ........................................................................................................................... 385 Kontrolisanje računara korišćenjem e-maila............................................................................ 386
POGLAVLJE 17
387
Manipulisanje slikama. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387 Osnove računarskih slika ......................................................................................................................... 388 Boje i RGBA vrednosti ...................................................................................................................... 388 Koordinate i torke okvira ................................................................................................................ 389 Manipulisanje slikama pomoću modula Pillow .............................................................................. 390 Upotreba vrste podataka slika ...................................................................................................... 392 Opsecanje slika ................................................................................................................................... 393 Kopiranje i pejstovanje slika u druge slike ............................................................................... 394 Promena veličine slike ..................................................................................................................... 397 Rotiranje i preslikavanje slika ........................................................................................................ 398 Menjanje pojedinačnih piksela .................................................................................................... 400 Projekat: Dodavanje logotipa ................................................................................................................ 401 Korak 1: Otvaranje slike logotipa ................................................................................................. 401 Korak 2: Kruženje kroz sve fajlove i otvaranje slika ............................................................... 402 Korak 3: Promena veličine slike .................................................................................................... 403 Korak 4: Dodavanje logotipa i snimanje promena ................................................................ 404 Ideje za slične programe ................................................................................................................. 406 Crtanje na slikama....................................................................................................................................... 406 Crtanje oblika ...................................................................................................................................... 406 Tačke.............................................................................................................................................. 406 Linije............................................................................................................................................... 406 Pravougaonici............................................................................................................................. 407 Elipse.............................................................................................................................................. 407 Mnogougaonici.......................................................................................................................... 407 Primer crtanja.............................................................................................................................. 407 Crtanje teksta ...................................................................................................................................... 408 Rezime ............................................................................................................................................................ 410 Praktična pitanja ......................................................................................................................................... 410 Praktični projekti ........................................................................................................................................ 411 Proširenje i ispravljanje programa iz projekta poglavlja...................................................... 411 Identifikovanje direktorijuma koji sadrže fotografije na hard drajvu ............................. 411 Posebne kartice za sedišta.............................................................................................................. 412
Sadržaj
POGLAVLJE 18
xvii
413
Kontrolisanje tastature i miša pomoću GUI automatizacije. . . . . . . . . . . . . . 413 Instaliranje modula pyautogui .............................................................................................................. 414 Ostajanje na putu ....................................................................................................................................... 414 Isključivanje svega odjavljivanjem .............................................................................................. 414 Pauze i bezbednost sistema u slučaju otkaza ......................................................................... 415 Kontrolisanje pokreta miša ..................................................................................................................... 415 Pomeranje miša ................................................................................................................................. 416 Dobijanje pozicije miša ................................................................................................................... 417 Projekat: „Gde je moj miš trenutno?“ .................................................................................................. 417 Korak 1: Importovanje modula ..................................................................................................... 418 Korak 2: Podešavanje koda za zatvaranje i beskonačne petlje ......................................... 418 Korak 3: Dobijanje i štampanje koordinata miša ................................................................... 418 Kontrolisanje interakcije miša ............................................................................................................... 419 Klik mišem ............................................................................................................................................ 420 Prevlačenje miša ................................................................................................................................ 420 Skrolovanje točkića miša ................................................................................................................ 422 Upotreba ekrana ........................................................................................................................................ 423 Dobijanje snimka ekrana ................................................................................................................ 423 Analiziranje snimka ekrana ............................................................................................................ 424 Projekat: Proširenje programa mouseNow ...................................................................................... 424 Prepoznavanje slike .................................................................................................................................. 425 Kontrolisanje tastature ............................................................................................................................. 426 Slanje niza sa tastature .................................................................................................................... 426 Nazivi tastera........................................................................................................................................ 427 Pritiskanje i otpuštanje tastature ................................................................................................. 428 Kombinacije „vrućih“ tastera ......................................................................................................... 429 Pregled funkcija PyAutoGUI ................................................................................................................... 430 Projekat: Automatsko popunjavanje formulara ............................................................................. 430 Korak 1: Otkrivanje koraka ............................................................................................................. 432 Korak 2: Podešavanje koordinata ................................................................................................ 432 Korak 3: Početak kucanja podataka ............................................................................................ 434 Korak 4: Rukovanje listama za selekciju i radio-dugmadima ............................................. 435 Korak 5: Prosleđivanje formulara i čekanje .............................................................................. 436 Rezime ............................................................................................................................................................ 437 Praktična pitanja ......................................................................................................................................... 438 Praktični 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
Sadržaj
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 isključenim izjavama ................................................................ 445
DODATAK C
447
Odgovori na praktična pitanja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447 Poglavlje 1..................................................................................................................................................... 448 Poglavlje 2..................................................................................................................................................... 448 Poglavlje 3..................................................................................................................................................... 450 Poglavlje 4..................................................................................................................................................... 450 Poglavlje 5..................................................................................................................................................... 451 Poglavlje 6..................................................................................................................................................... 452 Poglavlje 7..................................................................................................................................................... 452 Poglavlje 8..................................................................................................................................................... 453 Poglavlje 9..................................................................................................................................................... 454 Poglavlje 10................................................................................................................................................... 454 Poglavlje 11................................................................................................................................................... 455 Poglavlje 12................................................................................................................................................... 456 Poglavlje 13................................................................................................................................................... 457 Poglavlje 14................................................................................................................................................... 458 Poglavlje 15................................................................................................................................................... 458 Poglavlje 16................................................................................................................................................... 458 Poglavlje 17................................................................................................................................................... 459 Poglavlje 18................................................................................................................................................... 459
INDEKS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461
UVOD
MOJ CIMER JE RADIO U PRODAVNICI ELEKTRONIKE. POVREMENO, PRODAVNICA JE PRIMALA TABELE SA CENAMA HILJADA PROIZVODA PO KOJIMA SU KONKURENTI PRODAVALI PROIZVODE. TIM OD TRI RADNIKA BI ŠTAMPAO TABELU I DOBILI BI VELIKU GOMILU PAPIRA. ZA SVAKU CENU PROIZVODA U TABELI ONI BI POTRAŽILI CENU PO KOJOJ NJIHOVA PRODAVNICA PRODAJE PROIZVOD I BELEŽILI SVE PROIZVODE KOJE SU KONKURENTI PRODAVALI JEFTINIJE. OVAJ POSAO JE, OBIČNO, TRAJAO NEKOLIKO DANA. „Mogao bih da napišem 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 označavao da li je cena konkurenta niža. Ovaj program je zahtevao svega nekoliko sekundi za pokretanje. To je moć računarskog programiranja. Računar je kao švajcarski vojni nož koji možete da konfigurišete za bezbroj zadataka. Mnogi ljudi provode sate klikćući i kucujući za
1
UVOD
2
izvršavanje ponavljajućih zadataka i nisu svesni da mašina koju koriste može da obavi taj posao za nekoliko sekundi ako joj se daju odgovarajuće instrukcije.
Za koga je ova knjiga? Softver je, u osnovi, skup raznih alata koje danas koristimo. Skoro svako koristi društvene mreže za komunikaciju, mnogi ljudi imaju računare povezane na Internet u svojim telefonima i većina kancelarijskih poslova uključujе interakciju sa računarom da bi posao bio izvršen. Kao rezultat svega toga, potražnja za ljudima koji znaju da programiraju je u ogromnom porastu. Reklame za nebrojene knjige, interaktivne web tutorijale i kampove za programere obećavaju da će ambiciozne početnike pretvoriti u softverske inženjere sa šestocifrenim zaradama. Ova knjiga nije za ljude koji u to veruju. Ona je za sve ostale. Ova knjiga vas neće pretvoriti u profesionalnog programera više nego što će nekoliko časova sviranja na gitari da vas pretvori u rok zvezdu. Međutim, ako obavljate kancelarijske poslove, poslove administratora, predavača ili neki drugi posao za koji je potreban računar za rad ili zabavu, naučićete osnove programiranja da biste mogli da automatizujete jednostavne zadatke, kao što su sledeći: ●●
pomeranje i promena naziva hiljada fajlova i sortiranje tih fajlova u direktorijume
●●
popunjavanje online formulara, bez kucanja
●●
preuzimanje fajlova ili kopija teksta sa web sajta kad god je ažuriran
●●
podešavanje računara da šalje određena obaveštenja
●●
ažuriranje i formatiranje Excel tabela
●●
provera e-maila i slanje unapred napisanih odgovora
Ovi zadaci su jednostavni, ali korisnicima oduzimaju vreme i često su veoma trivijalni ili specifični da ne postoji već napisan softver za njihovo izvršenje. „Naoružani“ sa malo programerskog znanja, možete da obezbedite da računar izvrši ove zadatke umesto vas.
Konvencije Ova knjiga nije dizajnirana kao referentni priručnik; ovo je vodič za početnike. Stil programiranja je ponekad suprotan najboljoj praksi (na primer, neki programi koriste globalne varijable), ali to je kompromis da bi kod bio jednostavniji za učenje. Ova knjiga je napisana za ljude koji žele da napišu jednostavan kod, pa se ne troši 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 složenosti koju oni dodaju programu. Iskusni programeri mogu da ukažu na načine na koji kod u ovoj knjizi
Šta je programiranje?
3
može da se promeni i poboljša efikasnost, ali ova knjiga isključivo je fokusirana na pokretanje programa sa najmanje moguće uloženog truda.
Šta je programiranje? U TV emisijama i filmovima često se prikazuju programeri koji furiozno kucaju zagonetne nizove jedinica i nula na blještavim ekranima, ali moderno programiranje nije toliko misteriozno. Programiranje je jednostavan čin unošenja instrukcija koje računar treba da izvrši. Ove instrukcije mogu da uključuju neke brojeve, modifikovanje teksta ili potragu za informacijama u fajlovima ili da komuniciraju sa drugim računarima posredstvom Interneta. Svi programi koriste osnovne instrukcije kao gradivne blokove. Evo nekoliko najčešće 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 tačan, izvrši ovu akciju; u suprotnom, izvrši onu akciju.) Do this action that number of times. (Izvrši ovu akciju toliko puta.) Keep doing that until this condition is true. (Nastavi izvršenje dok je ovaj uslov tačan.) Takođe možete da kombinujete ove gradivne blokove da biste implementirali složenije odluke. Na primer, ovo su programerske instrukcije, pod nazivom izvorni kod, za jednostavan program koji je napisan Python programskim jezikom. Počevši od vrha, Python softver pokreće svaku liniju koda (neke linije se pokreću samo ako je određeni uslov tačan; u suprotnom, Python pokreće neku drugu liniju), dok ne dođe 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')
Možda ne znate ništa o programiranju, ali verovatno, ako pročitate prethodni kod, možete razumno da pretpostavite šta izvršava. Prvo, otvoren je fajl SecretPasswordFile.txt u i pročitana je tajna lozinka u njemu v. Zatim se od korisnika traži da unese lozinku (pomoću tastature) w. Ove dve lozinke se upoređuju x, a ako su iste, program prikazuje na ekranu Access granted y. Zatim, program proverava da li je lozinka 12345 z i prikazaće da ovaj izbor možda 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 prevođenje koji čita izvorni kod (napisan u Python programskom jeziku) i izvršava njegove instrukcije. Python softver za prevođenje može se preuzeti besplatno na adresi http://python.org/; postoje verzije za Linux, OS X i Windows. Naziv Python potiče od naziva britanske komedijaške grupe Monty Python, a ne od zmije. Python programeri se od milja zovu Pythonistas, a reference Monty Pythona i zmije obično su šaljivi deo Python uputstava i dokumentacije.
Programerima nije potrebno veliko poznavanje matematike Mnogi ljudi misle da je za učenje programiranja neophodno veliko poznavanje matematike. Međutim, programiranje uglavnom ne zahteva matematiku, osim osnovne aritmetike. U stvari, biti dobar u programiranju je slično kao i biti dobar u rešavanju sudoku slagalica. Da biste rešili sudoku slagalicu, brojevi od 1 do 9 treba da se popune u svakom redu, svakoj koloni i svakom unutrašnjem kvadratu veličine 3x3, na tabli koja je veličine 9x9. Rešenje pronalazite primenom oduzimanja i logike, koristeći početne brojeve. Na primer, pošto se broj 5 prikazuje u gornjem levom uglu sudoku slagalice koja je prikazana na slici 0-1, ne može da se prikaže nigde u gornjem redu, u koloni sa leve strane table ili u gornjem levom 3x3 kvadratu. Rešavanje jednog reda, kolone ili kvadrata će pružiti više nagoveštaja za ostatak slagalice.
Slika 0-1 Nova sudoku slagalica (levo) i njeno rešenje (desno) - bez obzira na upotrebu brojeva, sudoku ne uključuje matematiku (Images © Wikimedia Commons).
Samo zato što sudoku uključuje brojeve ne znači da treba da budete dobar matematičar da biste otkrili rešenje. Isto važi i za programiranje. Kao i rešavanje sudoku slagalice, pisanje programa uključuje razbijanje problema na pojedinačne, detaljne korake. Slično tome, kada ispravljate grešku u programima (odnosno, pronalazite i ispravljate greške), pažljivo ćete posmatrati šta program radi i pronaći uzrok greške. Kao i za sve druge veštine, što više programirate, postaćete sve bolji.
O ovoj knjizi
5
Programiranje je kreativna aktivnost Programiranje je kreativan zadatak, sličan konstruisanju zamka od LEGO kockica. Započinjete sa osnovnom idejom kako želite da zamak izgleda i pripremite dostupne blokove. Zatim, počinjete gradnju. Kada završite gradnju programa, možete da ulepšate kod isto kao što biste ulepšali i zamak. Razlika između programiranja i drugih kreativnih aktivnosti je što, kada programirate, u računaru imate sav „sirovi“ materijal koji vam je neophodan; ne treba da kupite dodatno platno, boju, film, predivo, LEGO kocke ili elektronske komponente. Kada je program napisan, može lako da se deli online sa celim svetom. I, mada ćete praviti greške prilikom programiranja, ta aktivnost je i dalje veoma zabavna.
O ovoj knjizi Prvi deo ove knjige obuhvata osnovne koncepte Python programiranja, a drugi deo različite zadatke koje možete da automatizujete na računaru. Svako poglavlje u drugom delu ima programe projekta koje možete da prostudirate. Evo kratkog pregleda onoga što ćete pronaći u svakom poglavlju: Deo I: Osnove Python programiranja Poglavlje 1: Osnove Pythona – Obuhvaćeni su izrazi, najosnovnije vrste Python instrukcija i načini na koje možete da upotrebite Python interaktivnu konzolu programa za eksperimentisanje sa kodom. Poglavlje 2: Kontrola procesa – Opisano je kako program odlučuje koju instrukciju da izvrši tako da kod može inteligentno da odgovara na različite uslove. Poglavlje 3: Funkcije – Opisano je kako se definišu funkcije tako da možete da se organizuje kod u više blokova kojima se lako rukuje. Poglavlje 4: Liste – Predstavljena je vrsta podataka liste i opisano je kako se organizuju podaci. Poglavlje 5: Rečnici i strukturiranje podataka – Predstavljena je vrsta podataka i prikazani su napredniji načini 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 može da manipuliše nizovima i pretražuje tekstualne šablone koji sadrže regularne izraze. Poglavlje 8: Čitanje i pisanje fajlova – Opisano je kako programi mogu da čitaju sadržaje tekstualnih fajlova i snimaju informacije u fajlove na hard drajvu.
6
UVOD
Poglavlje 9: Organizovanje fajlova – Prikazano je kako Python može da kopira, pomera, menja naziv i briše veliki broj fajlova mnogo brže nego korisnik. Takođe su opisani kompresovanje i dekompresovanje fajlova. Poglavlje 10: Ispravljanje grešaka – Prikazano je kako se upotrebljavaju različite alatke Pythona za pronalaženje i ispravljanje grešaka. Poglavlje 11: Web isecanje – Prikazano je kako se pišu programi koji mogu automatski da preuzmu web stranice i raščlane ih za informacije. To se naziva web isecanje. Poglavlje 12: Upotreba Excel tabela – Opisano je programsko manipulisanje Excel tabelama da ne bi trebalo da ih čitate. Ovo je korisno kada imate stotine i hiljade dokumenata koje treba da analizirate. Poglavlje 13: Upotreba PDF i Word dokumenata – Opisano je programsko čitanje Word i PDF dokumenata. Poglavlje 14: Upotreba CSV fajlova i JSON podataka – Nastavljeno je objašnjenje kako se programski manipuliše dokumentima za CSV i JSON fajlove. Poglavlje 15: Zadržavanje vremena, raspoređivanje zadataka i pokretanje programa – Opisano je kako Python programi rukuju vremenom i datumom i kako se zadaje računaru da izvršava zadatke u određeno vreme. U ovom poglavlju je opisano i kako Python programi mogu da pokreću druge programe. Poglavlje 16: Slanje e-maila i tekstualnih poruka – Opisano je kako da pišete programe koji mogu da šalju e-mailove i tekstualne poruke u svoje ime. Poglavlje 17: Manipulisanje slikama – Opisano je kako da programski manipulišete slikama kao što su JPEG ili PNG fajlovi. Poglavlje 18: Kontrolisanje tastature i miša pomoću GUI automatizacije – Opisano je kako da programski kontrolišete miš i tastaturu za automatizaciju klikova i pritiska tastera.
Preuzimanje i instaliranje Pythona Možete da preuzmete Python za Windows, OS X ili Ubuntu besplatno sa adrese http://python.org/downloads/. Ako preuzmete najnoviju verziju sa stranice za preuzimanje na web sajtu, svi programi u ovoj knjizi bi trebalo da funkcionišu. UPOZORENJE Obavezno preuzmite verziju Python 3 (kao što je 3.4.0). Programi u ovoj knjizi su pisani za pokretanje na verziji Python 3 i možda se neće pravilno pokretati na verziji Python 2.
Na stranici za preuzimanje pronaći ćete Python instalacioni program za 64-bitne i 32-bitne računare za svaki operativni sistem, pa prvo proverite koji instalacioni program je vama potreban. Ako ste računar kupili 2007. godine ili kasnije, verovatno imate 64-bitni sistem. U suprotnom, imate 32-bitnu verziju. Evo kako se vrši provera:
Pokretanje IDLE-a
7
●●
Na Windows sistemu selektujte Start 4 Control Panel 4 System i proverite da li za opciju System Type piše 64-bit ili 32-bit.
●●
Na OS X sistemu kliknite na Apple eni, selektujte About This Mac 4 More Info 4 System Report 4 Hardware, a zatim potražite polje Processor Name. Ako je napisano bilo šta drugo (uključujući Intel Core 2 Duo), imate 64-bitnu mašinu.
●●
Na Ubuntu Linux sistemu otvorite Terminal i pokrenite komandu uname -m. Odgovor i686 znači da je sistem 32-bitni, a odgovor x86_64 znači da je sistem 64-bitni.
Na Windows sistemu preuzmite Python instalacioni program (naziv fajla će se završavati ekstenzijom .msi) i dvostruko kliknite na njega. Pratite instrukcije koje instalacioni program prikazuje na ekranu da biste instalirali Python, kao što je ovde izlistano: 1. Selektujte Install for All Users, a zatim kliknite na Next. 2. Instalirajte program u direktorijum C:\Python34 klikom na dugme Next. 3. Ponovo kliknite na Next da biste preskočili odeljak Customize Python.
Na Mac OS X sistemu preuzmite .dmg fajl koji odgovara vašoj verziji OS X-a i dvostruko kliknite na njega. Pratite instrukcije koje instalacioni program prikazuje na ekranu da biste instalirali Python, kao što je ovde izlistano: 1. Kada se DMG paket otvori u novom prozoru, dvostruko kliknite na fajl Python.
mpkg. Možda će biti potrebno da unesete lozinku administratora.
2. Kliknite na dugme Continue u odeljku Welcome i kliknite na Agree da biste
prihvatili licencu.
3. Selektujte HD Macintosh (ili koji god naziv ima vaš hard drajv) i kliknite na Install.
Ako koristite Ubuntu sistem, možete da instalirate Python iz Terminala prateći sledeće 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 pokreće Python programe, interactive development environment (IDLE) softver je mesto na koje ćete uneti programe, kao u procesor reči. 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
8 ●●
Na Windows XP sistemu kliknite na dugme Start, a zatim selektujte Programs 4 Python 3.4 4 IDLE (Python GUI).
●●
Na Mac OS X sistemu otvorite prozor Finder, kliknite na Applications, pa na Python 3.4 a zatim na ikonicu IDLE.
●●
Na Ubuntu sistemu selektujte Applications 4 Accessories 4 Terminal, a zatim unesite idle3 (možda ćete moći da kliknete na Applications na vrhu ekrana, da selektujete Programming i da kliknite na IDLE 3).
Interaktivna konzola Bez obzira koji operativni sistem koristite, IDLE prozor koji će biti prikazan treba da bude uglavnom prazan, osim teksta koji izgleda otprilike ovako: Python 3.4.0 (v3.4.0:04f714765c13, Mar 16 2014, 19:25:23) [MSC v.1600 64 bit (AMD64)] on win32Type "copyright", "credits" or "license()" for more information. >>>
Ovaj prozor se naziva interaktivna konzola. Konzola je program koji omogućava da unosite instrukcije u računar, kao što su Terminal ili Command Prompt na OS X i Windows sistemima. Pythonova interaktivna konzola omogućava unos instrukcija za pokretanje softvera Python prevodioca. Računar čita instrukcije koje unesete i odmah ih pokreće. Na primer, u interaktivnu konzolu pored stavke >>> prompt unesite sledeće: >>> print('Hello world!')
Nakon što ukucate ovu liniju i pritisnete ENTER, interaktivna konzola treba da prikaže sledeći odgovor: >>> print('Hello world!') Hello world!
Pronalaženje pomoći Samostalno rešavanje programerskih problema je lakše nego što možda mislite. Ako ne verujete, hajde namerno da izazovemo grešku: unesite ‘42‘ + 3 u interaktivnu konzolu. Ne treba da znate šta znači ova instrukcija, ali bi rezultat trebalo da izgleda ovako: >>> '42' + 3 u Traceback (most recent call last): File "", line 1, in '42' + 3 v TypeError: Can't convert 'int' object to str implicitly >>>
„Pametno“ postavljanje programerskih pitanja
9
Poruka o grešci v prikazana je ovde zato što Python nije mogao da razume instrukciju. U delu istorije steka u poruke o grešci prikazana je specifična instrukcija i broj linije sa kojom Python ima problem. Ako niste sigurni šta da uradite sa određenom porukom o grešci, potražite na Internetu tačnu poruku. Unesite „TypeError: Can‘t convert ‚int‘ object to str implicitly“ (uključujući i navodnike) u omiljeni pretraživač i trebalo bi da vidite veliki broj linkova koji objašnjavaju šta znači ova poruka i šta je izaziva, kao što je prikazano na slici 0-2.
Slika 0-2 Google rezultati za poruku o grešci mogu da budu veoma korisni.
Često ćete pronaći da je neko drugi već postavio isto pitanje i da su neki drugi korisnici već odgovorili na njega. Ni jedna osoba ne može znati sve o programiranju, pa je, stoga, potrebno da programer svakodnevno traži odgovore na tehnička pitanja.
„Pametno“ postavljanje programerskih pitanja Ako ne možete da pronađete odgovor pretraživanjem Interneta, pokušajte da pitate ljude na web forumima, kao što su Stack Overlow (http://stackoverflow.com/) ili “learn programming” subreddit na adresi http://reddit.com/r/learnprogramming/. Ali imajte na umu da postoje „pametni“ načini za postavljanje programerskih pitanja koji će pomoći i drugima i vama. Obavezno pročitajte odeljak Frequently Asked Questions koje ovi web sajtovi imaju o pravilnom načinu postavljanja pitanja.
UVOD
10
Kada postavljate programersko pitanje, ne zaboravite da uradite sledeće: ●●
Objasnite šta pokušavate da uradite, a ne samo šta ste uradili. To će onima kojima ste se obratili za pomoć pomoći da odrede da li ste na pogrešnom putu.
●●
Specifikujte tačku u kojoj se greška desila. Da li se desila na samom početku programa ili samo nakon određene akcije koju ste izvršili?
●●
Kopirajte i pejstujte celu poruku o grešci i kod na stranicu http://pastebin.com/ ili http://gist.github.com/.
●●
Ovi web sajtovi olakšavaju deljenje velike količine koda sa ljudima preko Weba, bez rizika od gubitka formatiranja teksta. Možete, 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ć pokušali da uradite da biste rešili problem. To će onima od kojih tražite pomoć dati do znanja da ste već uložili trud da rešite sami problem.
●●
Napišite koju verziju Pythona koristite (postoje neke ključne razlike između verzije 2 Python prevodioca i verzije 3 Python prevodioca). Navedite i koji operativni sistem i verziju koristite.
●●
Ako se greška javi nakon što izvršite promene u kodu, objasnite tačno šta ste promenili.
●●
Napomenite da li se greška javlja svaki put kada pokrenete program ili samo nakon što izvršite određene akcije (opišite te akcije).
Uvek pratite online bonton. Na primer, nemojte da postavljate pitanje napisano velikim slovima ili da postavljate nerazumne zahteve ljudima koji pokušaju da vam pomognu.
Rezime Za većinu ljudi računar je samo uređaj, ali ne i alat. Međutim, učenjem programiranja dobićete pristup jednoj od najmoćnijih 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 grešaka. Ja volim da pomažem ljudima da otkriju Python. Pišem tutorijale za programiranje na mom blogu na adresi http://inventwithpython.com/blog/, a pitanja mi možete postaviti na adresi
[email protected]. U toku upoznavanja programiranja ćete možda imati neka pitanja koja su van delokruga ove knjige. Ne zaboravite da su postavljanje efektivnog pitanja i poznavanje načina kako da se pronađu odgovori veoma vredni na ovom programerskom putovanju. Započnimo to putovanje!
DEO
I
OSNOVE PYTHON PROGRAMIRANJA
11
1
OSNOVE PYTHONA
PROGRAMSKI
JEZIK
PYTHON
IMA ŠIROK SPEKTAR SINTAKSNE KONSTRUKCIJE,
STANDARDNE FUNKCIJE BIBLIOTEKE I INTERAKTIVNE FUNKCIJE RAZVOJNOG OKRU-
ŽENJA. SREĆOM, MOŽETE DA IGNORIŠETE VEĆINU OVIH STAVKI; TREBA SAMO DA
NAUČITE ONO ŠTO JE DOVOLJNO ZA PISANJE KORISNIH MALIH PROGRAMA.
Međutim, neophodno je najpre da naučite osnovne koncepte programiranja. Možda ćete pomisliti da su ovi koncepti tajnoviti i dosadni, ali kada budete stekli neko znanje i praksu, moći ćete da zapovedate vašem računaru da izvršava neverovatne podvige. U ovom poglavlju dato je nekoliko primera koji će vas ohrabriti da kucate u interaktivnu konzolu, što će omogućiti da izvršavate Python instrukcije jednu po jednu, a rezultat će vam biti odmah prikazan. Upotreba interaktivne konzole je odlična da biste naučili šta rade osnovne Python instrukcije, pa, stoga, isprobajte neke od njih dok čitate ovo poglavlje. Mnogo bolje ćete zapamtiti sve ako i uradite zadatak nego ako ga samo pročitate.
13
14
POGLAVLJE 1 Osnove Pythona
Unošenje izraza u interaktivnu konzolu Interaktivnu konzolu pokrenite tako što ćete pokrenuti IDLE, koji je instaliran u uvodu ove knjige zajedno sa Pythonom. Na Windows sistemu otvorite meni Start, pa selektujte All Programs 4 Python 3.3 i IDLE (Python GUI). Na OS X sistemu selektujte Applications 4 MacPython 3.3 4 IDLE. Na Ubuntu sistemu otvorite novi prozor Terminala i unesite idle3.Trebalo bi da se otvori prozor koji sadrži >>> prompt; to je interaktivna konzola. Unesite 2 + 2 u prompt da bi Python izvršio jednostavno izračunavanje. >>> 2 + 2 4
IDLE prozor bi sada trebalo da prikazuje tekst sličan ovome: Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:06:53) [MSC v.1600 64 bit (AMD64)] on win32 Type „copyright“, „credits“ or „license()“ for more information. >>> 2 + 2 4 >>>
U Pythonu 2 + 2 se naziva izraz, što je i najosnovnija vrsta programerske instrukcije u jeziku. Izraz se sastoji od vrednosti (kao što je 2) i operatora (kao što je +); oni uvek mogu da se smanje na jednu vrednost. To znači da možete da upotrebite izraze bilo gde u Python kodu gde možete da upotrebite vrednost. U prethodnom primeru izraz 2 + 2 je vrednovan kao jedna vrednost - 4. Jedna vrednost bez operatora se takođe smatra izrazom, mada se on svodi samo na sebe samog, kao što je ovde prikazano: >>> 2 2
G R E Š K E SU D O B R E ! Program će pasti ako sadrži kod koji računar ne može da „razume“, što će izazvati da Python prikaže poruku o grešci. Ta poruka neće pokvariti vaš računar, pa ne treba da se plašite ako napravite grešku. Pad sistema samo znači da je program neočekivano prestao da radi. Ako želite da saznate više o poruci o grešci, možete da potražite tu tekstualnu poruku online i otkrijete više o specifičnoj grešci. Takođe možete da pogledate izvore na adresi http://nostarch.com/automatestuff/ i vidite listu uobičajenih Python poruka o greškama i njihova značenja.
Unošenje izraza u interaktivnu konzolu
15
Postoji mnogo drugih operatora koje možete da upotrebite u Python izrazima. Na primer, u tabeli 1-1 izlistani su svi matematički operatori u Pythonu. Tabela 1-1 Matematički operatori od najvišeg do najnižeg prioriteta Operator ** % // / * - +
Operacija
Primer
Procenjuje se…
Eksponent Modul/ostatak Deljenje celog broja/količnik Deljenje Množenje Oduzimanje Sabiranje
2 ** 3 22 % 8 22 // 8 22 / 8 3*5 5-2 2+2
8 6 2 2.75 15 3 4
Redosled operatora (takođe se naziva prioritet) za Pythonove matematičke operatore je sličan kao u matematici. Prvo se izračunava operator **, zatim operatori *, /, //, i %, (sleva nadesno), a na kraju operatori + i - (takođe sleva nadesno). Možete da upotrebite zagrade da biste prepisali uobičajeni prioritet ako je to potrebno. U interaktivnu konzolu unesite sledeći izraz: >>> 2 + 3 * 6 20 >>> (2 + 3) * 6 30 >>> 48565878 * 578453 28093077826734 >>> 2 ** 8 256 >>> 23 / 7 3.2857142857142856 >>> 23 // 7 3 >>> 23 % 7 2 >>> 2 + 2 4 >>> (5 - 1) * ((7 + 1) / (3 - 1)) 16.0
U svakom slučaju, vi, kao programer, treba da unesete izraz, ali Python obavlja teži deo izračunavanja i svođenja na jednu vrednost. On će nastaviti da izračunava delove izraza, dok ne dobije jednu vrednost, kao što je prikazano na slici 1-1.
16
POGLAVLJE 1 Osnove Pythona
(5 - 1) * ((7 + 1) / (3 - 1)) 4 * ((7 + 1) / (3 - 1)) 4 * (
8
) / (3 - 1))
4 * (
8
) / (
2
)
4 * 4.0 16.0
Slika 1-1 Izračunavanjem izraz se svodi na jednu vrednost.
Ova pravila za spajanje operatora i vrednosti za formiranje izraza su osnovni deo Pythona kao programskog jezika, isto kao i gramatička pravila, koja nam pomažu u komunikaciji. Evo primera: This is a grammatically correct English sentence. This grammatically is sentence not English correct a. Drugu liniju je teško raščlaniti, zato što ne prati pravila engleskog jezika. Slično tome, ako ukucate pogrešnu Python instrukciju, Python neće moći da je „razume“ i prikazaće poruku o grešci SyntaxError, kao što je prikazano ovde: >>> 5 + File „“, line 1 5 + ^ SyntaxError: invalid syntax >>> 42 + 5 + * 2 File „“, line 1 42 + 5 + * 2 ^ SyntaxError: invalid syntax
Uvek možete da testirate i vidite da li instrukcija funkcioniše, tako što ćete je ukucati u interaktivnu konzolu. Ne brinite da ćete pokvariti računar: najgore što može da se desi je da Python odgovori porukom o grešci. Profesionalni programeri stalno dobijaju poruke o grešci dok pišu kodove.
Vrste podataka celog broja, pokretne tačke i niza Zapamtite da su izrazi samo vrednosti kombinovane sa operatorima i uvek će se izračunavati do jedne vrednosti. Vrsta podataka je kategorija za vrednosti, a svaka vrednost pripada samo jednoj vrsti podataka. Najčešće vrste podataka u Pythonu su izlistane u tabeli 1-2. Vrednosti -2 i 30, na primer, nazivaju se vrednosti celog broja. Podatak celog broja (ili
Spajanje i ponavljanje niza
17
int) ukazuje na vrednosti koje su ceo broj. Brojevi sa decimalnim tačkama, kao što je 3.14,
nazivaju se brojevi sa pokretnom tačkom (ili plutajućom tačkom). Čak i ako je vrednost 42 ceo broj, vrednost 42.0 je broj sa pokretnom tačkom. Tabela 1-2 Uobičajene vrste podataka Vrsta podatka Ceo broj Brojevi sa pokretnom tačkom Nizovi
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 takođe 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 počinje i gde se završava. Možete č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 grešci 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
Spajanje i ponavljanje niza Značenje operatora može da se promeni na osnovu vrste podatka vrednosti pored njega. Na primer, + je operator sabiranja kada vrši operaciju za dva cela broja ili broja sa pokretnom tačkom. Međutim, kada je + upotrebljen za dve vrednosti niza, on spaja nizove kao operator spajanja niza. U interaktivnu konzolu unesite sledeće: >>> ’Alice’ + ’Bob’ ’AliceBob’
Izraz se svodi na jednu vrednost - novu vrednost niza koja kombinuje tekst dva niza. Međutim, ako pokušate da upotrebite operator + u nizu i celom broju, Python neće „znati“ kako da time rukuje i prikazaće poruku o grešci. >>> ’Alice’ + 42 Traceback (most recent call last): File „“, line 1, in ’Alice’ + 42 TypeError: Can’t convert ’int’ object to str implicitly
18
POGLAVLJE 1 Osnove Pythona
Poruka o grešci Can’t convert ’int’ object to str implicitly znači da Python „pretpostavlja“ da ste pokušali da spojite ceo broj sa nizom ‚Alice‘. Kod treba da eksplicitno konvertuje ceo broj u niz, zato što Python to ne može 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 množenje kada vrši operaciju za dva cela broja ili broja sa pokretnom tačkom. Međutim, kada se koristi u jednoj vrednosti niza i jednoj vrednosti celog broja, on postaje operator ponavljanja niza. Unesite niz pomnožen 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 vrednošću celog broja. Ponavljanje niza je koristan trik, ali se ne upotrebljava toliko često kao spajanje niza. Operator * može da se koristi samo sa dve numeričke vrednosti (za množenje) ili za jednu vrednost niza i jednu vrednost celog broja (za ponavljanje niza). U suprotnom, Python će samo prikazati poruku o grešci. >>> ’Alice’ * ’Bob’ Traceback (most recent call last): File „“, line 1, in ’Alice’ * ’Bob’ TypeError: can’t multiply sequence by non-int of type ’str’ >>> ’Alice’ * 5.0 Traceback (most recent call last): File „“, line 1, in ’Alice’ * 5.0 TypeError: can’t multiply sequence by non-int of type ’float’
Jasno je zašto Python ne „razume “ ove izraze: ne možete da pomnožite dve reči, a teško je ponoviti proizvoljni niz za frakcioni broj puta.
Čuvanje vrednosti u promenljivim Promenljiva je kao kutija u memoriji računara, gde možete da čuvate pojedinačne vrednosti. Ako želite da kasnije upotrebite rezultat izračunatog izraza u programu, možete da ga sačuvate unutar promenljive.
Iskazi dodele Vrednosti ćete čuvati u promenljivim sa iskazom dodele. Iskaz dodele sadrži naziv promenljive, znak jednakosti (koji se naziva operator dodele) i vrednost koja će biti sačuvana. Ako unesete iskaz dodele spam = 42, onda će promenljiva pod nazivom spam imati u sebi sačuvanu 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 znači da kažete programu: „Promenljiva spam sada ima u sebi vrednost celog broja 42“.
Na primer, u interaktivnu konzolu unesite sledeće: u >>> >>> 40 >>> v >>> 42 >>> 82 w >>> >>> 42
spam = 40 spam eggs = 2 spam + eggs spam + eggs + spam spam = spam + 2 spam
Promenljiva je započeta (ili kreirana) kada je prvi put vrednost sačuvana u njoj u. Nakon toga, možete 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 sledeći kod da biste pokušali da prepišete niz: >>> spam = ’Hello’ >>> spam ’Hello’ >>> spam = ’Goodbye’ >>> spam ’Goodbye’
Kao i kutija na slici 1-3, spam promenljiva u ovom primeru čuva ‚Hello‘, dok ovaj niz ne zamenite sa ‚Goodbye‘.
20
POGLAVLJE 1 Osnove Pythona
Slika 1-3 Kada je nova vrednost dodeljena u promenljivu, stara vrednost je zaboravljena.
Nazivi promenljivih Tabela 1-3 sadrži primere pravilnih naziva promenljivih. Možete da imenujete promenljivu kako god želite dok poštujete sledeća tri pravila: 1. Može biti samo jedna reč. 2. Mogu da se koriste samo karakteri slova, brojevi i donje crtice. 3. Ne može počinjati brojem. Tabela 1-3 Pravilni i nepravilni nazivi promenljivih Pravilni nazivi promenljivih balance currentBalance current_balance _spam SPAM account4
Nepravilni nazivi promenljivih current-balance (crtice nisu dozvoljene) current balance (razmaci nisu dozvoljeni) 4account (ne može se na početku nalaziti broj) 42 (ne može se na početku nalaziti broj) total_$um (specijalni karakteri, kao što je $, nisu dozvoljeni) ’hello’ (specijalni karakteri, kao što je ‚, nisu dozvoljeni)
Nazivi promenljivih su zavisni od veličine slova, što znači da su spam, SPAM, Spam i sPaM četiri različite promenljive. Pravilo u Pythonu je da se nazivi promenljivih pišu 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 možda će istaći da zvanični 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 izmišljotina malih umova“ u samom PEP-u 8: „Doslednost praćenja vodiča za stil je važna. Ali je najvažnije 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 sadrži. Zamislite da se selite u novu kuću i sve kutije za selidbu označite sa „stvari“. Kako da pronađete u toj hrpi kutija ako vam je nešto hitno potrebno? Nazivi promenljivih spam, eggs i bacon se koriste kao generički nazivi za primere u ovoj knjizi i u većem delu Python dokumentacije (nazivi su inspirisani Monty Pythonovim skečom „Spam“), ali u vašim programima opisni naziv će vam pomoći 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 sličan editorima teksta, kao što su Notepad ili TextMate, ali postoje neke specifične 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 sadrži kursor koji čeka vaš unos, ali se razlikuje od interaktivne konzole, koja pokreće Python instrukcije čim pritisnete Enter. Fajl editor omogućava da kucate više instrukcija, snimite fajl i pokrenete program. Evo kako možete da razlikujete fajl editor i interaktivnu konzolu: ●●
Prozor interaktivne konzole će uvek biti onaj u kojem se nalazi >>> prompt.
●●
Prozor fajl editora neće imati >>> prompt.
Sada je vreme da kreirate svoj prvi program! Kada se otvori prozor fajl editora, ukucajte u njega sledeće: u # This program says hello and asks for my name. v print(’Hello world!’) print(’What is your name?’) # ask for their name w myName = input() x print(’It is good to meet you, ’ + myName) y print(’The length of your name is:’) print(len(myName)) z print(’What is your age?’) # ask for their age myAge = input() print(’You will be ’ + str(int(myAge) + 1) + ’ in a year.’)
22
POGLAVLJE 1 Osnove Pythona
Kada unesete izvorni kod, snimite ga da ne biste morali da ga kucate svaki put kada pokrećete IDLE. Iz menija na vrhu prozora fajl editora selektujte opciju File4 Save As. U 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, nećete izgubiti kod kad sistem padne ili slučajno zatvorite IDLE. Kao prečicu za snimanje možete 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 zatraži. 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 više linija koda za izvršavanje, Python program se isključuje; odnosno, prestaje da se pokreće (takođe može da se kaže da se Python program zatvara). Možete da zatvorite fajl editor, tako što ćete kliknuti na X na vrhu prozora. Da biste ponovo učitali 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 Sledeća linija naziva se komentar.
Analiza programa
23
u # This program says hello and asks for my name.
Python ignoriše komentare, koje možete da upotrebite za pisanje beležaka ili da biste se podsetili šta određena linija koda pokušava da izvrši. 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 obeležavanje komentara, koje može biti veoma korisno kada pokušavate da shvatite zašto program ne funkcioniše. Možete kasnije da uklonite # oznaku kada budete spremni da vratite liniju koda u program. Python takođe ignoriše praznu liniju iza komentara. Možete da dodate onoliko praznih linija u program koliko želite. To će olakšati č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!’) znači „Odštampaj tekst u nizu ’Hello world!’“. Kada Python izvrši ovu liniju, možete da kažete da je pozvao funkciju print() i da je vrednost niza prosleđena funkciji. Vrednost koja je prosleđena funkciji naziva se argument. Videćete da navodnici nisu odštampani na ekranu. Oni samo označavaju gde je početak i kraj niza; nisu deo vrednosti niza. NAPOMENA Takođe možete da upotrebite ovu funkciju za postavljanje prazne linije na ekranu; samo pozovite funkciju print(), bez ikakvog teksta između zagrada.
Kada pišete naziv funkcije, otvorena i zatvorena zagrada na kraju identifikuju 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() možete da razmišljate kao o izrazu koji izračunava bilo koji niz koji korisnik unese. Ako je korisnik uneo ’Al’, onda bi izraz trebalo da se svede kao myName = ’Al’.
24
POGLAVLJE 1 Osnove Pythona
Štampanje imena korisnika Poziv sledeće funkcije print() sadrži, u stvari, izraz ‚It is good to meet you, ’ + myName između zagrada. x print(’It is good to meet you, ’ + myName)
Ne zaboravite da izraz uvek može da se svede na jednu vrednost. Ako je ’Al’ vrednost koja je sačuvana u izrazu myName u prethodnoj liniji, onda se ovaj izraz svodi na ’It is good to meet you, Al’. Ova vrednost jednog niza se prosleđuje funkciji print(), koja će je odštampati na ekranu.
Funkcija len() Funkciji len() možete da prosledite vrednost niza (ili promenljivu koja sadrži niz), a funkcija je izračunava do vrednosti celog broja za broj karaktera u određenom nizu. y print(’The length of your name is:’) print(len(myName))
Da biste to isprobali, u interaktivnu konzolu unesite sledeće: >>> 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 prosleđuje funkciji print() da bi bila odštampana na ekranu. Vidite da funkcija print() omogućava da prosledite vrednosti celog broja ili vrednosti niza. Međutim, vidite i grešku koja se prikazuje kada u interaktivnu konzolu ukucate sledeće: >>> print(’I am ’ + 29 + ’ years old.’) Traceback (most recent call last): File „“, line 1, in print(’I am ’ + 29 + ’ years old.’) TypeError: Can’t convert ’int’ object to str implicitly
Funkcija print() ne izaziva ovu grešku, već je izaziva izraz koji ste pokušali da prosledite toj funkciji. Istu poruku o grešci dobićete ako u interaktivnu konzolu ukucate izraz kao samostalan.
Analiza programa
25
>>> ’I am ’ + 29 + ’ years old.’ Traceback (most recent call last): File „“, line 1, in ’I am ’ + 29 + ’ years old.’ TypeError: Can’t convert ’int’ object to str implicitly
Python prikazuje grešku, zato što operator + možete da upotrebite samo za sabiranje dva cela broja ili za spajanje dva niza. Ne možete da dodate ceo broj nizu, jer to u Pythonu nije gramatički tačno. To možete da ispravite upotrebom verzije niza celog broja, kao što je opisano u sledećem odeljku.
Funkcije str(), int() i float() Ako želite da spojite ceo broj, kao što je 29, sa nizom da biste ih prosledili funkciji print(), treba da upišete vrednost ‚29‘, što je, u stvari, niz od 29. Funkcija str() može da se prosledi celom broju i svešće ga na verziju vrednosti niza na sledeći način: >>> str(29) ’29’ >>> print(’I am ’ + str(29) + ’ years old.’) I am 29 years old.
Pošto 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 prosleđuje funkciji print().Funkcije str(), int() i float() će svesti niz, ceo broj i oblike pokretne tačke vrednosti koje prosleđujete. Pokušajte da konvertujete neke vrednosti u interaktivnoj konzoli pomoću 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 prosleđuju im vrednosti drugih vrsta podataka za dobijanje niza, celog broja ili oblika pokretne tačke tih vrednosti.
26
POGLAVLJE 1 Osnove Pythona
Funkcija str() je korisna kada imate ceo broj ili pokretnu tačku koju želite da dodate nizu. Funkcija int() je takođe korisna ako imate broj kao vrednost niza koji želite da upotrebite u nekim drugim izračunavanjima. Na primer, funkcija input() uvek vraća niz, čak i ako korisnik unese broj. Unesite spam = input() u interaktivnu konzolu i unesite 101 kada program zatraži tekst. >>> spam = input() 101 >>> spam ’101’
Vrednost koja je sačuvana unutar spama nije ceo broj 101, već je to niz ’101’. Ako želite da izvršite izračunavanje koristeći vrednost u spamu, upotrebite funkciju int() da biste dobili oblik celog broja spama, a zatim sačuvajte ceo broj kao novu vrednost u spamu. >>> spam = int(spam) >>> spam 101
Sada bi trebalo da možete da tretirate promenljivu spam kao ceo broj, umesto kao niz. >>> spam * 10 / 5 202.0
Zapamtite: ako prosledite vrednost funkciji int() koju ona ne može da svede na ceo broj, Python će prikazati poruku o grešci. >>> int(’99.99’) Traceback (most recent call File „“, line int(’99.99’) ValueError: invalid literal >>> int(’twelve’) Traceback (most recent call File „“, line int(’twelve’) ValueError: invalid literal
last): 1, in for int() with base 10: ’99.99’ last): 1, in for int() with base 10: ’twelve’
Funkcija int() je takođe korisna ako treba da zaokružite broj sa pokretnom tačkom.
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 odgovarajuće 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 sadrži vrednost koju je vratila funkcija input(). Pošto funkcija input() uvek vraća niz (čak i ako korisnik ukuca broj), možete 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 prosleđen funkciji str() function: str(int(myAge) + 1). Vrednost niza koja je vraćena 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 prosleđen 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 možete da ga spojite sa drugim nizom ’in a year.’, da biste kreirali finalnu poruku. Ovi koraci procene bi izgledali slično 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 drugačijom vrednošću od verzije celog broja ili broja sa pokretnom tačkom, ceo broj može da bude jednak sa brojem pokretne tačke. >>> 42 == ’42’ False >>> 42 == 42.0 True >>> 42.0 == 0042.000 True
Python razlikuje ovo zato što su nizovi tekstualni, dok su celi brojevi i brojevi pokretnog zareza brojevi.
28
POGLAVLJE 1 Osnove Pythona print('You will be ' + str(int(myAge) + 1) + ' in a year.') print('You will be ' + str(int( '4' ) + 1) + ' in a year.') print('You will be ' + str(
4 + 1
) + ' in a year.')
print('You will be ' + str(
5
) + ' in a year.')
'5'
+ ' in a year.')
print('You will be ' + print('You will be 5'
+ ' in a year.')
print('You will be 5 in a year.')
Slika 1-4 Koraci svođenja ako je broj 4 sačuvan u promenljivoj myAge
Rezime Možete da izračunate izraze pomoću kalkulatora ili da ukucate nadovezane nizove u procesoru reči. Možete čak da ponovite niz jednostavnim kopiranjem i pejstovanjem teksta. Međutim, izrazi i vrednosti njihovih komponenata (operatori, promenljive i pozivanje funkcija) su osnovni gradivni blokovi koji čine programe. Kada znate kako da rukujete ovim elementima, moći ćete da date instrukcije Pythonu da izračuna velike količine podataka umesto vas. Dobro je da zapamtite različite vrste operatora (+, -, *, /, //, % i ** za matematičke operacije i + i * za operacije sa nizovima) i tri vrste podataka (cele brojeve, brojeve plutajuće tačke i nizove) koji su predstavljeni u ovom poglavlju. Takođe su predstavljene neke različite funkcije. Funkcije print() i input() rukuju jednostavnim ispisom teksta (na ekranu) i unosom (pomoću 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 plutajuće tačke za vrednost koja im je prosleđena. U sledećem poglavlju naučićete kako da ukažete Pythonu da inteligentno odluči koji kod će pokrenuti, koji kod će preskočiti i koji kod će ponoviti na osnovu vrednosti koje sadrži. To je poznato kao kontrola toka, koja omogućava da pišete programe koji će donositi inteligentne odluke.
Praktična pitanja
29
Praktična pitanja 1. Koji od prikazanih su operatori, a koje su vrednosti? * ’hello’ -88.8 / + 5
2. Koji od prikazanih je promenljiva, a koje je niz? spam ’spam’
3. Navedite tri vrste podataka. 4. Od čega je sastavljen izraz? Šta rade svi izrazi? 5. U ovom poglavlju predstavljeni su iskazi dodele, kao što je spam = 10. U čemu je
razlika između izraza i iskaza?
6. Šta sadrži promenljiva bacon nakon pokretanja sledećeg koda? bacon = 20 bacon + 1
7. Na šta bi trebalo da se svede sledeći izraz? ’spam’ + ’spamspam’ ’spam’ * 3
8. Zašto je egg pravilan naziv promenljive, a 100 nepravilan? 9. Koje tri funkcije mogu da se upotrebe za dobijanje vrednosti celog broja, broja
pokretne tačke ili niza za vrednost?
10. Zašto ovaj izraz izaziva grešku? Kako možete da ga ispravite? ’I have eaten ’ + 99 + ’ burritos.’
Dodatni kredit: Potražite online Python dokumentaciju za funkciju len(). Pronaći ćete je na web stranici pod naslovom „Built-in Functions“. Preuzmite listu funkcija koje Python sadrži, potražite šta radi funkcija round() i eksperimentišite njome u interaktivnoj konzoli.