Uvod

Ovaj tekst je sačinjen na bazi delova knjige profesora Brajana Heinholda: A Practical Introduction to Python Programming i knjige How To Think Like a Computer Scientists, grupe autora.

Programiranje se može izučavati uz pomoć raznih programskih jezika. Danas su na univerzitetim širom sveta popularni jezici kao što su C, C++, C#, Java, a u poslednje vreme i Python.

Programski jezik Python je privlačan iz više razloga:

  • Može se izvršavati na svim platformama (uključujući i mobilne platforme)
  • Ima jednostavnu sintaksu
  • Uključuje osnovne strukture podataka kao deo jezika (liste, tuplovi, setovi, rečnici)
  • Ima bogate biblioteke (internu i eksterne)
  • Ima podršku velikog broja korisnika
  • Izučava se kao prvi jezik na poznatim univerzitetima (MIT, Harvard)

Tekst je sačinjen u obliku tutorijala sa mnogo primera i vežbi. Cilj je da studenti što više praktikuju koncepte sa kojima se susreću u tekstu. Programiranje je kao rešavanje zagonetki, pa su i vežbe osmišljene tako da pored ilustracije osnovnog koncepta sadrže i problemski orjentisane zadatke.

Od studenata se očekuje da samostalno urade što više zadataka koji su dati na kraju svakog poglavlja.

Šta je programiranje?

Cilj ovog kursa je da vas nauči da razmišljate kao programeri. Programeri razmišljaju tako što kombinuju znanje iz matematike, inženjerstva i prirodnih nauka. Slično matematičarima, oni koriste formalne jezike da pomoću njih izraze svoje ideje. Slično inženjerima oni projektuju sisteme, spajaju komponente sistema, procenjuju alternative. Slično naučnicima, programeri izučavaju ponašanje složenih sistema, prave hipoteze i testiraju predviđanja.

Najvažnija sposobnot koju programeri imaju je sposobnost rešavanja problema. Sposobnost rešavanja problema znači sposobnost formulisanja problema, kreativno razmišljanje o mogućim rešenjima, i prikazivanje rešenja na jasan i precizan način. Učenje programiranja je jedan od najboljih načina da se vežba sposobnost rešavanja problema.

Programski jezik Python

Python je primer jezika višeg nivoa ( high-level ) kao što su i jezici C++, PHP, i Java, na primer. Postoje i jezici nižeg nivoa koji se obično nazivaju mašinskim ili asemblerskim jezicima. Kompjuteri mogu da izvršavaju samo naredbe u mašinskom jeziku, pa zato jezici višeg nivoa moraju biti prevedeni ma mašinski jezik. To, naravno, malo usporava izvršavanje programa pisanih u višim jezicima, ali su prednosti pisanja programa u višim jezicima monogo veće od tog malog usporenja.

Pre svega, mnogo je lakše pisati programe u višim jezicima. Pisanje programa u višim jezicima uzima manje vremena, programi su kraći i lakši za čitanje. Osim toga, programi u višim jezicima su portabilni, što znači da se mogu izvršavati na raznim kompjuterima ( jer ne zavise od mašinskog jezika ). Zbog svega toga, danas se skoro svi programi pišu u jezicima višeg nivo. Mašinski jezici se koriste samo za vrlo specifične aplikacije.

Postoje dva načina prevođenja viših jezika u niže jezike: interpreteri i kompajleri. Interpreter čita naredbe programa višeg novoa i odmah ih izvršava. Drugim rečima, interpreter čas čita, čas izvršava linije programa. Rad intrepretera ilustruje sledeća alika:

_images/interpreter.png

Kompajler učitava ceo program pre engo što počne izvršavanje naredbi iz programa. Program napisan u višem jeziku nazivamo izvornim kodom (source code), a prevedeni program nazivamo objektnim kodom (object code) ili izvršnim kodom (executable). Nakon što se program prevede u izvršni kod, on se može izvršavati više puta bez daljeg prevođenja. Proces kompiliranja ilustrovan je sledećom slikom:

_images/compiler.png

Većina modernih jezika koriste oba gornja načina procesiranja jezika višeg nivoa. Programi se najčešće prevode do nekog jezika nižeg nivoa ( koji se obično naziva bajt kodom ), a onda se bajt kod intrepretira programom koji se naziva virtelna mašina. Python koristi oba ova procesa, ali zbog načina na koji programeri interaguju sa Python-om, obično se smatra da je Python interpretativan jezik.

Instalacija Python-a

Idite na sajt python.org i preuzmite poslednju verziju Python-a (verziju 3.6 ). To bi trebalo da bude jednostavno i bez muke, kako za Windows tako i za Linux operativni sistem.

IDLE

IDLE je integrisano razvojno okruženje (Integrated Development Environment – IDE) koje dolazi sa Python instalacijom. To je program koji vam omogućava da editujete i izvršavate Python programe. Postoje i druga razvojna okruženja za Python, ali preporučujemo IDLE-a zbog njegove jednostavnosti.

Kada startujete IDLE, otvoriće se poseban interaktivni prozor (shell) u kojem možete da unostite Python naredbe, kao i da odmah vidite rezultat izvršavanja tih naredbi. Ovaj prozor se najčešće koristi kao kalkulator ili za testiranje manjih programa. Međutim, vi ćete najčešće želeti da iz IDLE-a otvorite još jedan prozor u kojem ćete moći da unosite i editujete vaše programe.

Dakle, postoje dva načina kako možemo da korsitimo Python jezik: šel (shell) način i skript (script) način. U šel načinu, Python naredbe ukucavamo u Python šelu i one se odmah izvršavaju. Na primer

$ python
Python 3.5.2 (default, Jul  7 2016, 08:52:01)
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print(1 + 1)
2

Prva linija u gornjem primeru je komanda kojom se startuje Python interpreter na Unix promptu (slično se radi u Windows komanderu). Sledeće tri linije su poruke od interpretera. Četvrta linija koja počinaje sa >>> je Python prompt znak koji nas obaveštava da je Python interpreter spreman da prihvata naše naredbe. Ukucali smo print(1 + 1) na šta nam je interpreter odgovorio sa 2.

U drugom načinu korišćenja interpetera mi bismo sačinili jedan fajl u koji bismo uneli naš program, a zatim pozvali interpreter da izvrši taj program. Takav fajl se naziva skript. Na primer, recimo da smo uz pomoć editora kreirali fajl pod imenom prviprogram.py sa sledečim sadržajem:

print(1 + 1)

Po konvenciji fajlovi koji sadrže Python programe imaju na kraju ekstenziju .py

Da izvršimo program koji se nalazi u fajlu prviprogra.py dovlojlnjo je da u na komand promptu izdamo naredbu:

$ python prviprogram.py
2

Rad sa Python šelom je pogodan za testiranje vrlo kratkih programa, jer se odmah dobija odgovor. Ali svaki program koji je duži od par linija treba uneti u skript fajl.

Šta je program?

Program je niz instrukcija (naredbi) kojima se opisuju koraci koje treba preduzeti da bi se ostvarilo neko izračunavanje (computation). Izračunavanje može biti neko matematičko računanje, kao što je na primer rešavanje neke jednačine. Ali, izračunavanje može biti i simboličko, kao što je na primer pronalaženje i promena teksta u nekom dokumentu, ili (još apstraktnije) kompiliranje programa.

Programske instrukcije (naredbe)

Programske instrukcije u različitim jezicima mogu izgledati različito, ali se sledeće osnovne instrukcije nalaze u svim jezicima:

  • input - za preuzimanje podataka sa tastature, iz fajla ili sa nekog uređaja.
  • output - za prikaz podataka na ekranu, ili memorisanju u fajl ili neki drugi uređaj.
  • math - za osnovne matematičke operacije kao što su sabiranje i množenje.
  • conditional execution - za proveru da li su ispunjeni uslovi za izvršavanje niza naredbi.
  • repetition - za ponavljanje nekog niza instrukcija, uz moguću modifikaciju pri svakom ponavljanju.

Verovali ili ne, ali to je otprilike sve što nam terba pri programiranju. Svaki program, bez obzira koliko komplikovan, sačinjen je od gore navedenih instrukcija.

Debagiranje programa

Programiranje je kompleksan proces, i pošto taj proces vrše ljudi, obično je podložan greškama.

Iz istorisjkih razloga, programske greške se nazivaju bagovima (bugs), a proces njihovog pronalaženja i otklanjanja se naziva debagiranje.

U programima se mogu pojaviti tri vrste grešaka: sintaksne greške, greške pri izvršavanju (runtime) i semantičke greške. Važno je napraviti razliku među njima, jer se tako lakše pronalaze i otklanjaju.

Sintaksne greške

Python iterpreter može izvršavati program ako je on sintaksno ispravan; u suprotnom interpreter javlja grešku i prekida rad. Sintaksa se odnosi na strukturu programa i pravila o toj strukturi. Na primer u sprskom jeziku rečenica mora početi velikim slovom i završiti sa tačkom. Za ljude takve sitne greške ne predstavljaju značajan problem, pa su za njih takve rečenice i dalje čitljive. Paython takve greške ne oprašta. Kada uoči sintaksnu grešku Python štampa poruku o grešci i prekida dalji rad. Programeri početnici prave puno sintaksnih grešaka, ali sa iskustvom takve greške su sve ređe.

Greške izvršavanja

Drugi tip greške je greška pri izvršavanju, koja se tako naziva jer se ne može uočiti pre izvršavanja programa. Ove greške se takođe nazivaju izuzetcima (exception) jer obično se dešavaju kada nastupi neki izuzetak ( na primer kada pokušate da delite sa nulom ). Ova vrsta grešaka je retka u jednostavnim programiama, pa će možda proći dosta vremena pre nego što se sretnete sa takvom greškom u vašim programima.

Semantičke greške

Treća vrsta grešaka su takozvane semantičke greške. Ako vaš program ima semantičku grešku, takav program će se uspešno izvršavati, u smislu da kompjuter neće uočiti bilo kakvu grešku, ali će rezultat rada programa biti pogrešan. Drugim rečima, takav program ne radi ono što ste vi želeli da on uradi. Otklanjanje takvih grešaka je naravno najteže, jer morate dobro analizirati svaki korak da bi pronašli mesto gde nastaje semantička greška.

Eksperimentalno debagiranje

Najvažnija veština koju morate izgraditi je debagiranje - pronalaženje i otklanjanje svih vrsta grešaka u programu. Iako može biti frustrirajuće, debagiranje je intelektualno najbogatiji, najizazovniji i najinteresntniji deo programiranja.

Na neki način, debagiranje je kao detektivski posao. Vi se tu suočavate sa tragovima, i treba da rezonujete o procesima i događajima koji su doveli do rezultata koje posmatrate.

Debagiranje je takođe i kao eksperimetisanje. Kada dobijete ideju šta bi moglo da bude pogrešno u vašem programu, vi modifikujete program i ponovo ga izvršavate da proverite da li radi ispravno.

Python reči (keywords)

Python ima 33 reči sa posebnim značenjem.Ove reči se koriste u programskim naredbama u skladu sa propisanom sintaksom. One se nazivaju ključnim rečima zato što imaju posebnu namenu i ne mogu se koristiti u druge svrhe (kao imena varijabli, na primer).

Ključne reči su prikazane u sledećoj listi:

['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue',
 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global',
 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass',
 'raise', 'return', 'try', 'while', 'with', 'yield']

Mi ćemo tokom izučavanja Python-a razmatrati upotrebu svake od ovih reči.

Kad kažete da poznajete Python, to može da znači da razumete upotrebu većine gornjih reči u Python programima.

Nadamo se da ćete najmanje takvo pznavanje Python-a imati posle ovog kursa.