33
OSNOVE PROGRAMIRANJA PROGRAMSKI JEZIK PYTHON [osnovni kurs] Sačuvajmo drveće. Ako nije neophodno, nemojte štampati ovaj dokument. Čitajte u digitalnoj formi! Datum poslednje promene: 12.04.2020. [verzija: 1 (revizija 0)] [kurs je na srpskom jeziku]

OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON programiranja... · poznavaocima zanata zvanog programiranje u Pythonu! Ovaj kreativni kurs je pre svega namenjen onima koji žele

  • Upload
    others

  • View
    35

  • Download
    5

Embed Size (px)

Citation preview

Page 1: OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON programiranja... · poznavaocima zanata zvanog programiranje u Pythonu! Ovaj kreativni kurs je pre svega namenjen onima koji žele

OSNOVE PROGRAMIRANJA

PROGRAMSKI JEZIK PYTHON [osnovni kurs]

Sačuvajmo drveće.

Ako nije neophodno, nemojte štampati ovaj dokument.

Čitajte u digitalnoj formi!

Datum poslednje promene: 12.04.2020. [verzija: 1 (revizija 0)] [kurs je na srpskom jeziku]

Page 2: OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON programiranja... · poznavaocima zanata zvanog programiranje u Pythonu! Ovaj kreativni kurs je pre svega namenjen onima koji žele

OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON

HËLLO – THE FREELANCE PROJECT 2

SADRŽAJ

NASLOV POGLAVLJA STRANA 1. UVOD 3 2. PRVI KORAK – INSTALACIJA RAZVOJNOG OKRUŽENJA ZA PYTHON 5 3. SINTAKSA PROGRAMSKOG JEZIKA PYTHON 7 4. TIPOVI PODATAKA, OPERATORI I FUNKCIJE 8 5. KONTROLA TOKA PROGRAMA 16 6. STRUKTURE PODATAKA 18 7. FUNKCIJE 25 8. KLASE 27 LITERATURA 32

Page 3: OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON programiranja... · poznavaocima zanata zvanog programiranje u Pythonu! Ovaj kreativni kurs je pre svega namenjen onima koji žele

OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON

HËLLO – THE FREELANCE PROJECT 3

1. UVOD

Python se danas smatra idealnim programskim jezikom za učenje programiranja jer predstavlja jedan

od najjednostavnijih programskih jezika, pre svega zbog svoje jednostavne sintakse, interaktivnosti,

fleksibilnosti i skalabilnosti.

Python spada u grupe interpreterskih i objektno-orijentisanih programskih jezika visokog nivoa, što

znači da se kod direktno izvršava uz pomoć interpretatora bez potrebe za kompajliranjem odnosno

prevođenjem u izvršni oblik i da dozvoljava korisnicima da manipulišu objektima kao entitetima.

Stvorio ga je Guido van Rossum, nizozemski programer, krajem osamdesetih, odnosno početkom

devedesetih godina prošlog veka. Gospodin van Rossum kao da je samim izborom njegovog imena hteo

da nam stavi do znanja da programiranje može da bude zabavno koliko i istoimena britanska serija

Monty Python’s Flying Circus. Neki teoretičari zavere misle, sa druge strane, da je ovaj programski jezik

poneo naziv koji ima po zmiji (pitonu), na šta asocira i njegov zaštitni znak. Bez obzira na poreklo imena,

možemo slobodno konstatovati da je jedna od njegovih glavnih odlika je izuzetna čitljivost koda što

olakšava dokumentovanje koda i njegovo lakše održavanje. Ovaj programski jezik dosledno podržava

modularnost programa, odnosno mogućnost da se delovi koda ponovo koriste. Podržan je od strane

najvažnijih operativnih sistema na tržištu i jedan je od najpopularnijih programskih jezika u svetu.

Python se danas koristi, pored za učenje programiranja i izradu osnovnih rešenja onih koji ulaze u svet

programiranja, i za razvoj profesionalnih softverskih rešenja, samostalnih aplikacija i veb usluga. Ovaj

programski jezik se koristi i u sofisticiranoj analizi podataka i u procesu mašinskog učenja.

Page 4: OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON programiranja... · poznavaocima zanata zvanog programiranje u Pythonu! Ovaj kreativni kurs je pre svega namenjen onima koji žele

OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON

HËLLO – THE FREELANCE PROJECT 4

Ukoliko ste početnik u svetu programiranja, bitno je da izaberete onaj programski jezik koji zadovoljava

neke (ili većinu) od ovih kriterijuma:

- Da spada u grupu mainstream programskih jezika koji su čvrsto etablirani u industriji razvoja

softverskih rešenja

- Da je dobro rangiran na listama najpopularnijih programskih jezika i da je ta popularnost

stabilna unazad nekoliko godina

- Da ima veliki broj razvijenih biblioteka, odličnu podršku i široku zajednicu korisnika

- Da su programeri koji ga koriste u svom radu traženi na tržištu rada i da njegovo poznavanje u

perspektivi donosi odličnu zaradu

Python zadovoljava sve ove kriterijume i mnogo više. Prema indeksu trendova pretraživanja materijala

za učenje programskih jezika PYPL (PopularitY of Programming Language Index) programski jezik

Python je izuzetno popularan. Takođe, prema veoma cenjenom TIOBE indeksu koji rangira programske

jezike prema broju stručnjaka obučenih za rad, broju dostupnih kurseva i primenjenih rešenja, Python

zauzima jednu od pozicija na vrhu.

Trenutno stanje na listama možete pogledati na veb lokacijama http://pypl.github.io/PYPL.html,

odnosno https://www.tiobe.com/tiobe-index/.

Kao i u svakom programskom jeziku, svaka nova verzija nosi sa sobom poboljšanja, brže izvršavanje

koda i otklanjanje uočenih nedostataka prethodne verzije. Pravo mesto na kome možete obezbediti

aktuelnu verziju je matična stranica Python projekta https://www.python.org/. Na ovoj veb lokaciji

možete naći i uputstvo namenjeno početnicima Beginner’s Guide, dokumentaciju vezanu za

standardne biblioteke ovog programskog jezika, brojne tutorijale ali i berzu poslova koji se nude vrsnim

poznavaocima zanata zvanog programiranje u Pythonu! Ovaj kreativni kurs je pre svega namenjen

onima koji žele da uđu u svet programiranja i obezbede snažnu osnovu za dalje napredovanje u ovoj

oblasti. Kada ovim kreativnim kursom budete savladali osnove programiranja u programskom jeziku

Python, bićete spremni da krenete dalje. Prvi korak u ovom osnovnom kursu u kome ćete naučiti svoje

prve programerske korake biće, kao i u svakoj programerskoj priči, instalacija razvojnog okruženja za

Python. Preporuka je da ga formirate pomoću Microsoft Visual Studio Code (VS Code).

Page 5: OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON programiranja... · poznavaocima zanata zvanog programiranje u Pythonu! Ovaj kreativni kurs je pre svega namenjen onima koji žele

OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON

HËLLO – THE FREELANCE PROJECT 5

2. PRVI KORAK – INSTALACIJA RAZVOJNOG OKRUŽENJA ZA PYTHON

Pre početka naše Python avanture potrebno je instalirati razvojno okruženje. Dakle, potreban nam je

editor u kome ćemo unositi kod i interpreter za programski jezik Python koji će izvršavati kod. Na adresi

https://code.visualstudio.com nalazi se sjajno besplatno rešenje iz Microsoft kuhinje, Visual Studio

Code (VS Code). Ovo je u osnovi višenamenski editor namenjen pisanju koda na Windows, macOS i

Linux platformama. VS Code dolazi sa podrškom za brojne napredne tehnologije kada je u pitanju

programiranje, IntelliSense (automatsko popunjavanje), debugging, formatiranje koda i drugo, tako da

predstavlja pravi temelj za ono što sledi – pisanje koda. U editor je ugrađena native podrška za neke

programske jezike dok je za druge (među kojima je i Python) podrška definisana na nivou ekstenzija

koje je potrebno aktivirati.

Pošto smo instalirali VS Code možemo ga privremeno isključiti i pristupiti instalaciji samog Python

interpretera. Instalaciju poslednje stabilne verzije Python interpretera možemo izvršiti sa veb lokacije

https://www.python.org/downloads/ ili preuzeti sa lokacije www.anaconda.com. Preporuka je da to

uradite sa lokacije Anaconda. Uz ovo dobijate i samu Anacondu (trebaće vam). Nijedna zmija ne ide

sama!

U sledećem koraku ponovo ćemo pokrenuti VS Code i instalirati ekstenziju za Python sa VS Code

Marketplace. Najpre treba kliknuti na odgovarajuću ikonu (nalazi se na toolbaru sa leve strane) koja će

nas odvesti na ekstenziju koja nam je potrebna.

Kada u polju za pretraživanje ekstenzija ukucamo python dobićemo više mogućnosti. Treba izabrati

ekstenziju pod nazivom Python (ms-python.python) i pokrenuti njenu instalaciju.

Sada je red na aktiviranje Python interpretera koji ćemo prethodno instalirati pristupom lokaciji

Anaconda. Nakon instalacije Anaconda pakovanja koji sadrži i Python interpreter, krećemo na samo

aktiviranje u VS Code. To ćemo učiniti preko opcije Command Palette (View > Command Palette) ili

kombinacijom tastera CTRL+SHIFT+P, tako što ćemo ukucati python, a potom izabrati ponuđenu

komadu Python: Select Interpreter. Sistem će nam ponuditi mogućnost da izaberemo instaliranu

verziju interpretera. Ukoliko je sve u redu u donjem levom uglu ekrana VS Code trebali bi da vidite

nešto ovako:

Page 6: OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON programiranja... · poznavaocima zanata zvanog programiranje u Pythonu! Ovaj kreativni kurs je pre svega namenjen onima koji žele

OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON

HËLLO – THE FREELANCE PROJECT 6

Sve je spremno za početak!

Krećemo na realizaciju Hello World projekta. Najpre treba otvoriti radno okruženje (workspace) tako

što ćemo „otvoriti“ folderu koji smo izabrali za ovaj i druge primere koji ćemo raditi (File > Open

Folder). Otvaramo potom novu datoteku, izborom opcije New File iz File menija (File > New File).

Projektu odmah treba dodeliti ime uz iniciranje snimanja datoteke izborom opcije Save iz File menija

(File > Save), uz obavezan izbor tipa Python u Save as Type polju. Projekat ćemo nazvati hello.py

(zapamtite da se ekstenzija .py se koristi za programe pisane u Pythonu). Projektni folder bi nakon

ovoga morao da ima podfolder .vscode i formiranu datoteku hello.py:

Krećemo sa pravim programiranjem! U editoru kucamo naredbu koja će ispisati pozdrav Hello World:

Snimićemo program (CTRL + S) i pokrenuti direktno klikom na ikonu Play u gornjem desnom uglu:

Ubrzo ćemo na ekranu (ili preciznije rečeno na delu ekrana koji se naziva terminal) dobiti i rezultat

izvršenja koda, odnosno željeni natpis Hello World.

Ovaj način izvršavanja podrazumeva da se ne vrši provera koda – debagovanje. Debagovanje programa

je proces identifikovanja izvora grešaka i njihovog otklanjanja. Debagovanje ne treba mešati sa

testiranjem koje predstavlja proces detektovanja grešaka. Hajde da onda isprobamo i debagovanje…

Kliknite na poslednju (u našem slučaju i jedinu) liniju koda. Sa leve strane će se prikazati tačka koja

označava Breakpoint. Kliknite na nju, pritisnite taster F9 da to potvrdite a zatim i taster F5 (ovo je

ekvivalent izbora opcije Start Debugging iz menija Run). Krenuće proces debagovanja, uz prethodni klik

na ponuđenu opciju Python File (Debug the currently active Python file). Debagovanje se vrši

upotrebom opcija iz kutije sa alatkama (toolbar) koje nas vode kroz sam proces (continue - step over -

step into - step out - restart - stop):

NAPOMENA: Manje primere programa možete pisati i isprobati i u samom Python GUI okruženju koje

dobijate čistom instalacijom Pythona (sa lokacije https://www.python.org/). U tom slučaju nema

potrebe da instalirate VS Code editor. Programe pišete na taj način što, nakon startovanja Pythona, u

meniju File izaberete opciju New File (File > New File) čime vam se otvara novi ekran u kome možete

napisati program. Pre nego što ga isprobate datoteku ćete morati da snimite (sa File > Save).

Pokrenućete ga izborom opcije Run Module iz menija Run (Run > Run Module) ili klikom na taster F5.

Rezultat izvršavanja dobijate u Python Shellu.

Page 7: OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON programiranja... · poznavaocima zanata zvanog programiranje u Pythonu! Ovaj kreativni kurs je pre svega namenjen onima koji žele

OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON

HËLLO – THE FREELANCE PROJECT 7

3. SINTAKSA PROGRAMSKOG JEZIKA PYTHON

Svaki jezik, kako prirodni, tako i veštački ima svoju sintaksu i semantiku. Sintaksa programskog jezika

predstavlja niz pravila koja definišu kombinaciju simbola za koje se smatra da daju ispravno struktuiran

izvorni kod u traženom programskom jeziku. Sintaksa, dakle, određuje šta su ispravne konstrukcije

(rečenice) u tom jeziku, dok im semantika pridružuje značenje. Osnovni sintaksni elementi koji se

koriste pri izgradnji programa su izrazi (numerički i logički) i naredbe. Programski jezik Python ima

jednostavnu sintaksu što programerima omogućava da brže dođu do rešenja. Važno je napomenuti da

je sintaksa i semantika (proces izvršavanja programa) ovog programskog jezika definisana tako da

odgovara više načinu na koji mi razmišljamo i rešavamo probleme nego načinu na koji funkcionišu

mašine. Takođe, što je i najbitnije, Python je živ programski jezik koji se stalno razvija. To garantuje da

će još dugo biti veoma važna alatka u razvoju aplikacija, pogotovo što je sve u vezi Pythona besplatno.

Filozofija pisanja programa u Pythonu počiva na tako zvanoj PEP specifikaciji. Ukoliko ste Python

interpreter instalirali na „Anaconda način“ već imate ugrađen PyLint (linter za Python) alat koji će

pratiti način na koji formatirate vaše programe. Gledajte na njega kao na anđela čuvara koji će voditi

računa o svemu (u Pythonu se ta pravila vode pod pomenutim nazivom PEP).

Python je organizovan je tako da ima relativno jednostavno jezgro a da se sve „komplikovanije“ stvari

rešavaju preko modula. U tome je i lepota programiranja u ovom jeziku jer postoji ogroman broj

modula koji rešavaju određene stvari (većina njih potiče iz same open source zajednice programera i

odlično su dokumentovani tako da znate šta možete očekivati od njih). Znači, bitno je da zapamtite dve

činjenice: verovatno nećete biti u prilici da ponovo „izmišljate točak“ i sigurno nećete morati da jurite

te module po Internetu jer veliku većinu njih već imate preinstalirane zahvaljujući tome što ste izabrali

da Python interpreter instalirate preko Anaconde. Modulima upravljate preko programa Anaconda

Navigator koji ste instalirali pri potrazi za Python interpreterom. Ukoliko kliknete na Environments sa

leve strane otvoriće vam se lista na kojoj ćete videti sve module koje imate instalirane (naziv, opis i

verziju). Ukoliko pored broja verzije vidite i strelicu to znači da je dostupna novija verzija tog modula i

da je možete automatski preuzeti. U programskom kodu module uvozimo upotrebom naredbe import.

Bitno je da se svi potrebni moduli uvezu na početku koda kako bi bili dostupni za korišćenje kasnije u

kodu.

import naziv_modula as naziv_koji_ćemo_koristiti

Page 8: OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON programiranja... · poznavaocima zanata zvanog programiranje u Pythonu! Ovaj kreativni kurs je pre svega namenjen onima koji žele

OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON

HËLLO – THE FREELANCE PROJECT 8

4. TIPOVI PODATAKA, OPERATORI I FUNKCIJE

Počećemo sa jednim vrlo važnim pravilom: uvek dodajte u kod koji pišete komentare! Oni će vam

pomoći da se kasnije setite šta ste uradili u nekom delu koda a ukoliko radite u timu mogu da budu od

koristi i onima koji zajedno sa vama učestvuju u pisanju koda. Na ovaj način ćete doprineti boljem

dokumentovanju posla na kome radite. Komentari se u Pythonu pišu upotrebom znaka # iza kog sledi

prazan karakter i sam komentar. Bitno je napomenuti da se su komentari delovi koda koji se ne

izvršavaju. Primer: # Ovo je komentar

Napomena: Postoji mogućnost pisanja i dužih komentara (u više redova koda). Ovakvi komentari

počinju i završavaju se specijalnom oznakom """ (tri dvostruka navodnika).

Pre nego što krenemo sa tipovima podataka i operatorima, nekoliko reči o jednoj vrlo važnoj

komponenti svih programskih jezika. U pitanju su promenljivame (variables). Promenljive služe za

čuvanje vrednosti koje se menjaju (ili ne menjaju, u kom slučaju kažemo da se radi o konstantama).

Postoje određena pravila pri davanju naziva promenljivama. Nazivi mogu početi malim slovom abecede

ili specijalnim znakom donja crta (_). Nazivi promenljivih ne mogu da sadrže jednostruke ili dvostruke

navodnike. Pravila „lepog“ pisanja koda u Pythonu (PEP) kažu da u nazivima promenljivih treba

upotrebljavati samo mala slova abecede i da se reči trebaju odvajati donjom crtom (primer:

moj_naziv). Međutim, često se koristi i tako zvana Camel caps konvencija u kojoj svaka nova reč u

nazivu promenljive počinje velikim slovom (primer: mojNaziv). Važi i pravilo da su imena case-sensitive,

odnosno da je recimo x različito od X u nazivu. Promenljiva se definiše svojom vrednošću koja joj se

dodeljuje korišćenjem znaka jednakosti (primer: x = 5). Vrednost može biti bilo koji tip podataka o

kojima priča počinje upravo sada…

TIPOVI PODATAKA

Brojevi

Brojevi u Pythonu mogu da počnu ciframa od 0 do 9, decimalnom tačkom ili znakom – (za negativne

brojeve). Postoje sledeći tipovi:

▪ Integer (pozitivni i negativni celi brojevi koji ne sadrže decimalnu tačku u zapisu)

▪ Floats (pozitivni i negativni decimalni brojevi koji sadrže decimalnu tačku u zapisu, kao i

brojevi bez decimalne tačke koji u zapisu sadrže slovo e kojim se označava stepenovanje,

kao na primer 123e1000 – ovaj broj je u stvari 123000)

▪ Complex Numbers (kompleksni brojevi namenjeni matematičkim geekovima koji se

obavezno završavaju slovom j u zapisu)

Nizovi karaktera (stringovi)

String predstavlja niz karaktera (slova, brojeva i specijalnih znakova, uključujući i prazne karaktere).

Stringovi počinju i završavaju se znacima navoda (jednostrukim ili dvostrukim). Ukoliko u stringu

moramo da navedemo dvostruki znak navoda (na primer ukoliko uključujemo neki citat), onda se

ispred ovog unutrašnjeg znaka navoda obavezno piše znak \. Još jedna važna napomena… Ako tekst

moramo prikazati u više redova koristimo oznaku \n.

Primeri: "Ovo je string. " "Ovo je citat: \"Da, jeste\"." "Prvi red stringa,\nDrugi red stringa. "

Logički tip podataka (boolean)

Logički tip podataka može imati dve vrednosti: tačno (True) i netačno (False), primer: x = True

Page 9: OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON programiranja... · poznavaocima zanata zvanog programiranje u Pythonu! Ovaj kreativni kurs je pre svega namenjen onima koji žele

OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON

HËLLO – THE FREELANCE PROJECT 9

OPERATORI

Pomoću operatora se u Pythonu, kao i u drugim programskim jezicima, obavljaju određene operacije

nad podacima. Postoji više tipova operatora:

- Aritmetički operatori

- Operatori poređenja

- Logički operatori

Aritmetički operatori

Aritmetički operatori se koriste za obavljanje aritmetičkih operacija nad podacima. U ovaj tip operatora

spadaju sledeći:

operator opis primer

+ Sabiranje. 1 + 1 = 2

- Oduzimanje. 3 – 2 = 1

* Množenje. 4 * 5 = 20

/ Deljenje. 10 / 5 = 2

% Ostatak pri deljenju. 14 / 5 = 4 (14 – 5 x 2 = 4)

** Eksponent. 2 ** 3 = 8 (2 x 2 x 2 = 23 = 8)

// Celobrojno deljenje. 14 / 5 = 2 (5 x 2 = 10, 5 x 3 = 15)

Operatori poređenja

Operatori poređenja se koriste kada u programskom kodu želimo napraviti neko poređenje (vrednosti

promenljivih ili rezultata izvršavanja nekih funkcija). U ovaj tip operatora spadaju sledeći (nisu

navedeni operatori koji se koriste za objekte: is i is not):

operator opis

< Manje od.

<= Manje ili jednako od.

> Veće od.

>= Veće ili jednako od.

== Jednako.

!= Različito.

Logički operatori

Logički operatori služe za poređivanje logičkih vrednosti (True/False). U ovaj tip operatora spadaju

sledeći:

operator opis primer

and Logičko i (tačno ako su oba operanda tačna). a and b

or Logičko ili (tačno ako je prvi ili drugi operand tačan). a or b

not Logičko ne (negacija logičke vrednosti operanda). not a

FUNKCIJE

Ugrađene funkcije u Pythonu imaju sledeću sintaksu: nazivpromenljive = nazivfunkcije (spisak

parametara). Primer matematičke funkcije abs koja vraća apsolutnu vrednost nekog broja:

x = -4

y = abs(x)

# rezultat je y = 4

Page 10: OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON programiranja... · poznavaocima zanata zvanog programiranje u Pythonu! Ovaj kreativni kurs je pre svega namenjen onima koji žele

OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON

HËLLO – THE FREELANCE PROJECT 10

Primer matematičke funkcije round koja ima dva parametra (promenljivu i broj decimala na koliko je

treba zaokružiti) i vraća zaokruženu vrednost nekog broja:

x = 5.14327

y = round(x,3)

# rezultat je y = 5.143

Python ima veliki broj ugrađenih funkcija koje služe za rad sa brojevima. Treba napomenuti da je

moguće i definisanje funkcija unutar funkcija. Pregled svih ugrađenih funkcija možete naći na:

https://docs.python.org/3/library/functions.html.

Pored ugrađenih funkcija mogu se koristiti i funkcije koje su deo nekog spoljnjeg modula. Pre korišćenja

takvih funkcija potrebno je izvršiti uvoz modula u programski kod.

Primer:

# uvoz modula math sa dodatnim matematičkim funkcijama

import math

x = 9

# funkcija iz spoljnjeg modula se koristi tako što se navede naziv modula, tačka i onda naziv funkcije

y = math.sqrt(x)

# rezultat je 3.0 (kvadratni koren broja 9)

Napomena: pregled svih funkcija ovog korisnog modula https://docs.python.org/3/library/math.html

F-string (funkcija za rad sa stringovima)

Posebnu grupu funkcija čini tako zvana f-string funkcija. Ona se koriste za formatiranje i izuzetno je

korisna u mnogim slučajevima (kada treba inkorporirati vrednost neke promenljive u ispis). Koristi se

u okviru print naredbe, pri čemu u zagradi prvo navodimo slovo f, potom string koji želimo da ispišemo

unutar dvostrukih navodnika. U okviru stringa se ubacuje naziv promenljive unutar vitičastih zagrada.

F-string funkcija se može zgodno iskoristiti i za formatiranje ispisa novčanih iznosa, na primer.

Primer (sa iskorišćenom f-string funkcijom i ispisom naredbi jedna pored druge uz specijalni znak ;):

x = 5; y = 4

# ispis stringa i promenljive, odnosno rezultata (primenom operatora nad promenljivom)

# mogu se koristiti svi tipovi podataka

print(f"Zbir x i y je: {x + y}")

Primer (za novčane iznose):

osnovna_cena = 300

nova_cena = 330

količina = 5

ukupna_cena = osnovna_cena * količina

# ispis ukupne cene sa separatorom hiljada i dve decimale (uz dodatak… :,.2f)

# ovde u oznaci :,.2f slovo f je iskorišćeno da označi broj (fixed number)

# ukoliko želimo procentualni ispis iskoristićemo znak % umesto f i nećemo koristiti separator hiljada

print(f"Ukupna cena je: {ukupna_cena:,.2f} RSD")

print(f"Odnos nove i stare cene: {nova_cena/osnovna_cena:.2%}")

# dobićemo ispis… Ukupna cena je: 1,500.00 RSD

# a potom… Odnos nove i stare cene: 110.00%

Page 11: OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON programiranja... · poznavaocima zanata zvanog programiranje u Pythonu! Ovaj kreativni kurs je pre svega namenjen onima koji žele

OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON

HËLLO – THE FREELANCE PROJECT 11

Ukoliko želimo da u jednom koraku definišemo izlazne podatke to možemo uraditi sledećom

modifikacijom programa (obratite pažnju na trostruko korišćenje dvostrukih navoda):

osnovna_cena = 300

nova_cena = 330

količina = 5

ukupna_cena = osnovna_cena * količina

odnos = nova_cena / osnovna_cena

izlazni_podatak = f"""

Ukupna cena je: {ukupna_cena:,.2f} RSD

Odnos nove i stare cene: {odnos:.2%}

"""

print(izlazni_podatak)

Ispis će biti:

Ukupna cena je: 1,500.00 RSD

Odnos nove i stare cene: 110.00%

Sledeći korak je malo naprednije formatiranje, odnosno usklađivanje izlaznog podatka tako da u našem

slučaju brojevi budu jedan ispod drugog. Za formatiranje se inače koriste sledeći znaci: ^ (centriranje),

< (poravnanje ulevo) i > (poravnanje udesno) uz obično navođenje broja karaktera. Broj karaktera se

ovde odnosi na sadržaj koji se nalazi samo unutar vitičastih zagrada. Definisaćemo u novom primeru

deo koda vezan za formiranje izlaznog podatka (poravnanje udesno za 10 karaktera):

podatak1 = 125

podatak2 = 1234.567

podatak3 = 9

izlazni_podatak = f"""

Prva stavka: {podatak1:>10,.2f}

Druga stavka: {podatak2:>10,.2f}

Treća stavka: {podatak3:>10,.2f}

"""

print(izlazni_podatak)

Ispis će biti:

Prva stavka: 125.00

Druga stavka: 1,234.57

Treća stavka: 9.00

Ukoliko se radi o podacima koji se odnose na novac trebali bi uključiti i oznaku novčane jedinice. U tom

slučaju izmenićemo string koji se treba ispisati:

# za oznake koje idu ispred iznosa

podatak1 = 125; podatak2 = 1234.567

s_podatak1 = "$" + f"{podatak1:,.2f}"

s_podatak2 = "$" + f"{podatak2:,.2f}"

izlazni_podatak = f"""

Prva stavka: {s_podatak1:>10}

Druga stavka: {s_podatak2:>10}

"""

Page 12: OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON programiranja... · poznavaocima zanata zvanog programiranje u Pythonu! Ovaj kreativni kurs je pre svega namenjen onima koji žele

OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON

HËLLO – THE FREELANCE PROJECT 12

# za oznake koje idu iza iznosa

podatak1 = 125

podatak2 = 1234.567

s_podatak1 = f"{podatak1:,.2f}"

s_podatak2 = f"{podatak2:,.2f}"

izlazni_podatak = f"""

Prva stavka: {s_podatak1:>10} RSD

Druga stavka: {s_podatak2:>10} RSD

"""

Manipulacije sa stringovima

Postoje brojni scenariji manipulacije sa stringovima, odnosno nizovima karaktera. Možemo ih spajati,

odrediti njihovu dužinu, pretraživati (utvrditi da li neki karakter ili niz karaktera nalazi u stringu)…

Spajanje stringova se vrši upotrebom operatora +. Primer:

ime = "Srdjan"

prezime = "Ilic"

prazan_string = " "

autor_kursa = ime + prazan_string + prezime

Dužina stringa (broj karaktera u stringu pri čemu se i prazan karakter računa) se određuje upotrebom

ugrađene funkcije len. Karakteri u nizu imaju redne brojeve 0, 1, 2 itd. Primer:

print(len(prazan_string))

print(len(autor_kursa))

Dobićemo ispis:

0

11

Page 13: OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON programiranja... · poznavaocima zanata zvanog programiranje u Pythonu! Ovaj kreativni kurs je pre svega namenjen onima koji žele

OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON

HËLLO – THE FREELANCE PROJECT 13

Pregled ostalih korisnih operacija sa stringovima:

operator rezultat izvršene operacije

a[p:q] Isečak stringa a od pozicije p do pozicije q.

a * n Ponavljanje stringa a n-puta.

b in a Vraća True ukoliko se string b sadrži u stringu a (alternativno: b not in a).

Nad stringovima se mogu primenjivati i metode pri čemu se string u ovom slučaju posmatra kao objekt.

Sintaksa je: string.nazivmetoda(parametri). Pregled ugrađenih metoda za rad sa stringovima:

metoda rezultat izvršene operacije

a.count(b,p.q) Broj ponavljanja stringa b u stringu a (b je kraći string od a) sa opcionim

parametrima p i q (početna i krajnja pozicija).

a.find(b, p, q)

Redni broj pozicije prvog pojavljivanja stringa b u stringu a (p i q su opcioni parametri i koriste se ukoliko želimo da ograničimo pretraživanje,

od pozicije p do pozicije q); vraća vrednost -1 ukoliko stringa b nema u stringu a.

a.replace(b,c) Vraća string a u kome su svi karakteri b zamenjeni karakterima c.

a.isupper() Vraća True ukoliko su sva slova u stringu a velika.

a.islower() Vraća True ukoliko su sva slova u stringu a mala.

a.upper() Sva mala slova u stringu a zamenjuje velikim slovima.

a.lower() Sva velika slova u stringu a zamenjuje malim slovima.

a.strip() Uklanja sve prazne karaktere iz stringa a.

a.lstrip() Uklanja vodeće prazne karaktere iz stringa a.

a.capitalize() Prvi karakter u stringu postaje veliko slovo a ostala mala.

a.isalpha() Vraća True ukoliko u stringu a postoje slova.

a.isnumeric() Vraća True ukoliko u stringu a postoje brojevi.

Levo i desno poravnanje stringova možemo izvršiti korišćenjem metoda .ljust() i .rjust():

iznos = 5.355; ukupna_sirina = 10

s = f"${iznos:,.2f}"; s = s.rjust(ukupna_sirina)

Manipulacije sa podacima vezanim za datum i vreme

Python nema ugrađen tip podataka vezan za datum i vreme pa su ovi tipovi, kao i mogućnost

manipulacije nad njima definisani preko spoljnog modula datetime. Zbog toga je potrebno, ukoliko

planiramo da radimo sa bilo kakvim podacima vezanim za datum i vreme, izvršiti uvoz ovog modula na

početku programskog koda (uz opciono dodavanje aliasa zbog lakšeg pozivanja):

import datetime as dv

U okviru ovog modula, odnosno apstraktne klase, definisani su sledeći tipovi podataka koji se koriste

za datum i vreme:

datetime.date (ili dv.time ako je upotrebljen alias), .time i .datetime

Za operacije sa isključivo datumskim podacima koristi se tip podataka .date. Upotrebom metoda

.today() nad ovim tipom podataka dobijamo današnji datum a postoji mogućnost zadavanja i

proizvoljnog datuma kao osnove za dalju manipulaciju tim podatkom.

Primer:

import datetime as dv

danasnji_dan = dv.date.today()

datum_rodjenja = dv.date(1972, 4, 16) # ispis bi bio: … 1972-04-16 (godina-mesec-dan)

Page 14: OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON programiranja... · poznavaocima zanata zvanog programiranje u Pythonu! Ovaj kreativni kurs je pre svega namenjen onima koji žele

OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON

HËLLO – THE FREELANCE PROJECT 14

Ukoliko želimo možemo preuzeti (ili direktno ispisati) delove datuma – godinu, mesec i dan.

U postojećem primeru to možemo učiniti na sledeći način:

print (datum_rodjenja.month) # ekvivalentno za godinu bi koristili year a za dan day

Format datuma možemo promeniti da bi ga prilagodili lokalnom načinu pisanja. U tu svrhu se koristi

ranije pomenuta f-string funkcija. Pregled najvažnijih dostupnih opcija (direktiva):

opcija značenje i primer

%a Skraćeni naziv dana u nedelji (Mon, Tue, Wed, Thu, Fri, Sat, Sun).

%A Pun naziv dana (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday).

%d Dan (numerička vrednost).

%m Mesec (numerička vrednost).

%Y Godina (numerička vrednost). Ukoliko umesto %Y napišemo %y dobićemo u ispisu samo poslednje dve cifre za svaku godinu.

%w Broj koji odgovara danu u nedelji (po standardu da sednica počinje od nedelje, 0).

%b Skraćeni naziv meseca (Jan … Dec).

%j Redni broj dana u godini (0-366).

%B Pun naziv meseca (January … December).

%H Prikaz sati u formatu 0-24.

%I Prikaz sati u formatu 0-12.

%M Prikaz minuta.

%S Prikaz sekundi.

%p Ubacivanje oznake AM/PM u prikaz (ide uz %I).

Primer: Prikaz datuma u našem formatu dan.mesec.godina.

import datetime as dv

danasnji_datum = dv.date.today(); danasnji_datum = f"{danasnji_datum:%d.%m.%Y.}"

print(danasnji_datum)

Primer: Prikaz trenutnog vremena

import datetime as dv

trenutno_vreme = dv.time.now()

# vreme se ispisuje u formatu 00:00:00 (sati:minuti:sekundi ukoliko f-string funkcijom ne promenimo)

Za određivanje perioda između dva datuma ili vremena koristi se klasa timedelta iz timedate modula.

Njena sintaksa je: datetime.timedelta(days=…). Možemo navesti i argumente weeks, hours, seconds,…

pri čemu ih odvajamo zarezom ukoliko ih kombinujemo.

Page 15: OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON programiranja... · poznavaocima zanata zvanog programiranje u Pythonu! Ovaj kreativni kurs je pre svega namenjen onima koji žele

OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON

HËLLO – THE FREELANCE PROJECT 15

Primer: Određivanje starosti neke osobe (preko broja proteklih dana)

import datetime as dv

danasnji_dan = dv.date.today()

datum_rodjenja = dv.date(1972, 4, 16)

starost = danasnji_dan - datum_rodjenja

# ukoliko želimo da izbegnemo da se za starost ispiše i vreme (0:00:00) napisaćemo:

# starost_samo_dana = starost.days, ili u godinama starost_godina = starost_samo_dana // 365

# ako znamo i čas rođenja, recimo 22:55 možemo napisati:

# danasnji_dan = dv.datetime.now(), ovde uzimamo pored datuma i trenutno vreme

# datum_rodjenja = dv.datetime(1972, 4, 16, 22, 55), 16.04.1972 u 22:55

# u slučaju da smo upisali i vreme dobićemo vrlo precizan podatak o starosti :)

Primer: Dodavanje i oduzimanje broja dana

import datetime as dv

danasnji_dan = dv.date.today(); trajanje = dv.timedelta(days=100)

# možemo sada definisati zbir danasnji_dan + trajanje ili razliku danasnji_dan - trajanje

# kao vrednost dobijamo datum

Page 16: OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON programiranja... · poznavaocima zanata zvanog programiranje u Pythonu! Ovaj kreativni kurs je pre svega namenjen onima koji žele

OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON

HËLLO – THE FREELANCE PROJECT 16

5. KONTROLA TOKA PROGRAMA

Kontrola toka programa je važan segment svakog programskog jezika, pa i Pythona. Kontrola toka se u

osnovi oslanja na donošenju određenih odluka, odnosno izvršavanju određenih blokova programskog

koda na osnovu poređenja nekih vrednosti ili proveri ispunjenosti postavljenih uslova. U tu svrhu

koristimo operatore poređenja i logičke operatore koji su ranije pomenuti.

Uslovno grananje

Naredba If omogućuje da se određeni blok koda izvrši ukoliko je neki uslov ispunjen, a drugi ako nije

(ovaj deo nije obavezan i ide iza else). Postoji i mogućnost višestrukog provera uslova. U tu svrhu se

koristi naredba elif (skraćeno od else if). Najbolje je sve sagledati na primerima, jednom uz upotrebu

operatora poređenja i drugom uz upotrebu logičkog operatora.

Primer: upotreba operatora poređenja

x = 4

y = 6

if y > x:

print("y je veće od x")

elif y == x:

print("y je jednako x")

else:

print("x je veće od y")

print("nastavak")

Primer: upotreba logičkog operatora

a = 5

b = 0.2

popust = True

# sledeću liniju koda možemo napisati i kao if popust == True

if popust:

a = (1 - b) * a

print(f"cena sa popustom: {a}")

else:

print(f"cena: {a}")

print("nastavak")

Primer: upotreba operatora poređenja i logičkog operatora

starost = 15

if starost >= 13 and starost < 20:

print("tinejdžer")

elif starost < 13:

print("dete")

else:

print("omladinac")

print("nastavak")

Page 17: OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON programiranja... · poznavaocima zanata zvanog programiranje u Pythonu! Ovaj kreativni kurs je pre svega namenjen onima koji žele

OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON

HËLLO – THE FREELANCE PROJECT 17

For petlja

Naredba For omogućava ponavljanje određenog bloka programskog koda dogod je zadati uslov

ispunjen. Upotrebom ove naredbe dakle formiramo programsku petlju, što se najbolje može sagledati

na primerima koji slede. Ne zaboravite samo na oznaku dvotačka (:). Ja (skoro) uvek zaboravim…

Primer: ispis jednocifrenih brojeva (1..9)

for x in range(1, 10):

print(x)

print("nastavak")

# privi broj u uslovu koji se zadaje unutar službene reči range (opseg) je broj od kog počinje provera

# drugi broj je izlazni uslov (za x od x=1 do x<10)

Primer: ispis svih slova u reči (stringu)

moja_rec = "hello"

for x in moja_rec:

print(x)

print("nastavak")

# obratite pažnju na „nazubljivanje“ koda jer to povećava njegovu čitljivost (razmak je 4 karaktera)

# u slučaju položaja print(x) ovo utiče i na tačnost izvršavanja koda jer je to deo petlje

Upotrebom službenih reči continue i break unutar for petlje forsiramo

nastavak (ponovni ulazak u petlju) odnosno prekid izvršavanja koda. Još

jedna interesantna mogućnost vezana za mnoge programske jezike, pa i

Python, je ugnježdavanje petlji (nesting). Petlja unutar petlje (uz obavezno

vođenje računa o pomenutom „nazubljivanju“ koda) je čest slučaj u

realizaciji programerskih ideja. Mogućnosti su neograničene, samo vodite

računa da se ne „upetljate“!

While petlja

Za razliku od for petlje kod koje imamo, generalno gledano, unapred utvrđeni broj prolazaka kroz

petlju, kod while petlje se blok naredbi unutar petlje izvršava sve dok je određeni uslov ispunjen.

Teoretski, može se desiti da se blok naredbi unutar While petlje i ne izvrši. Treba voditi računa da uslov

bude „realan“ kako ne bismo dobili beskonačnu petlju. Unutar while petlje takođe možemo koristiti i

naredbe continue i break da bismo dodatno uticali na tok izvršavanja, uz upotrebu uslovnog grananja.

Primer: ispis jednocifrenih brojeva

brojac = 1

while brojac < 10:

print(brojac)

brojac = brojac + 1

# ili brojac += 1

print("nastavak")

Page 18: OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON programiranja... · poznavaocima zanata zvanog programiranje u Pythonu! Ovaj kreativni kurs je pre svega namenjen onima koji žele

OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON

HËLLO – THE FREELANCE PROJECT 18

6. STRUKTURE PODATAKA

Liste

Lista je najjednostavniji tip strukture podataka u Pythonu. Članovi liste se odvajaju zarezom a lista se

otvara i zatvara uglastim zagradama. Primeri listi… [1, 2, 5], ["januar", "maj", "oktobar]. Listi se može

pristupiti kao celini ali se može pristupiti i pojedinačnim članovima (elementima). Svaki član liste se

referencira svojim rednim brojem (počinju od 0).

Primer: ispis članova liste

dani = ["ponedeljak", "utorak", "sreda", "četvrtak", "petak", "subota", "nedelja"]

for x in dani:

print(x)

print("nastavak")

Videli smo da upotrebom službene reči break možemo forsirati izlazak iz petlje. Za prethodni primer bi

recimo mogli da modifikujemo listu i odvojimo radne dane od vikenda praznim stringom a onda

napravimo for petlju koja bi ispisala samo dane koji ne pripadaju vikendu:

dani = ["ponedeljak", "utorak", "sreda", "četvrtak", "petak", " ", "subota", "nedelja"]

for x in dani:

if x == " ":

print("izlazak iz petlje")

break

print(x)

print("nastavak")

primer: utvrđivanje da li se neki član nalazi u listi i kolika je dužina liste (koliko ima članova)

dani = ["ponedeljak", "utorak", "sreda", "četvrtak", "petak", "subota", "nedelja"]

postoji = "sreda" in dani

# promenljiva postoji u ovom slučaju dobija vrednost True

broj_clanova = len(dani)

# promenljiva broj_clanova u ovom slučaju dobija vrednost 7

Primer: pristup pojedinačnom članu liste, dodavanje novog člana na kraj liste i promena člana

lista = [1, 2, 5]

posledni_clan = lista[2]

# rezultat je 5

lista.append(9)

# dodavanje člana 9 na kraj liste

print(lista)

# ispis je [1, 2, 5, 9]

lista.insert(2, 4)

# dodavanje člana 4 na poziciji 2, dakle ispred člana 5

print(lista)

# ispis je [1, 2, 4, 5, 9]

lista[1] = 3 # član na rednoj poziciji 1 (radi se o članu 2) je zamenjen članom 3

print(lista)

# ispis je [1, 3, 4, 5, 9]

Page 19: OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON programiranja... · poznavaocima zanata zvanog programiranje u Pythonu! Ovaj kreativni kurs je pre svega namenjen onima koji žele

OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON

HËLLO – THE FREELANCE PROJECT 19

Primer: proširenje liste spajanjem sa članovima druge liste

lista1 = ["ponedeljak", "utorak", "sreda", "četvrtak", "petak"]

lista2 = ["subota", "nedelja"]

lista1.extend(lista2)

# lista1 je sada ["ponedeljak", "utorak", "sreda", "četvrtak", "petak", "subota", "nedelja"]

Primer: izbacivanje određenog člana iz liste (izbacuje se samo na poziciji prvog pojavljivanja)

dani = ["ponedeljak", "utorak", "sreda", "četvrtak", "petak", "subota", "nedelja"]

dani.remove("subota")

Upotrebom while petlje se iz liste gde imamo više pojavljivanja nekog člana mogu izbaciti svi. Ukoliko

želimo da izbacimo člana liste samo sa određene pozicije koristimo metod .pop(pozicija) umesto

.remove(). Na primer dani.pop(5) izbaciće takođe član "subota" (jer se nalazi na poziciji 5). Izbacivanje

poslednjeg člana liste vrši se metodom .pop(), bez navođenja pozicije. Alternativno, možemo koristiti i

naredbu del koja ima intuitivniji naziv od metoda .pop() ali i sa njom ide i drugačija sintaksa.

Primer: brisanje člana liste na određenoj poziciji i brisanje liste

dani = ["ponedeljak", "utorak", "sreda", "četvrtak", "petak", "subota", "nedelja"]

del dani[5]

del dani

Brisanjem liste u ovom slučaju dobijamo praznu listu, pri čemu se pri pokušaju njenog ispisa dobija

poruka o greški a nemoguće je i pristupiti članovima liste jer ih nema. Zbog toga je u nekim slučajevima

bolje koristiti metod .clear() čime se lista prazni ali i dalje ostaje da postoji. U datom primeru to bi

uradili sa dani.clear().

Primer: određivanje broja pojavljivanja nekog člana u listi

lista = ["A", "B", "A", "C", "A", "D"]

broj = lista.count("A")

# pošto je broj numerički podatak da bi ga prikazali moramo ga pretvoriti u string

print("Slovo A se " + str(broj) + " puta pojavljuje u listi. ")

Poziciju prvog pojavljivanja nekog člana liste možemo saznati upotrebom metoda .index(). Pri tome

treba obezbediti odgovarajući deo koda koji će proveriti da li se naznačeni član uopšte nalazi u listi

kako bi izbegli da pri izvršavanju programa dobijemo poruku o greški.

Primer: provera da li se u toku nedelje pojavila temperatura od 19 stepeni

temperature = [25, 14, 18, 10, 16, 19, 20]

t = 19

if t in temperature:

print("Temperatura " + str(t) + " step. bila je " + str(temperature.index(t)+1) + ". dana.")

else:

print("Ne, nije bila.")

Za sortiranje članova liste koristi se metod .sort(). Moguće je sortirati numeričke i podatke koji

predstavljaju stringove. U datom primeru upotrebićemo temperature.sort() pri čemu ćemo dobiti ispis

[10, 14, 16, 18, 19, 20, 25] upotrebom naredbe print(temperature).

Page 20: OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON programiranja... · poznavaocima zanata zvanog programiranje u Pythonu! Ovaj kreativni kurs je pre svega namenjen onima koji žele

OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON

HËLLO – THE FREELANCE PROJECT 20

Za sortiranje datuma najprikladnije je napraviti prvo praznu listu a potom izvršiti dodavanje datuma,

jednog po jednog, kako bi ceo postupak bio čitljiviji.

Primer: sortiranje datuma

import datetime as dv

lista_datuma = []

lista_datuma.append(dv.date(2020, 6, 18))

lista_datuma.append(dv.date(2020, 4, 16))

lista_datuma.append(dv.date(2019, 12, 30))

lista_datuma.append(dv.date(2020, 7, 14))

lista_datuma.sort()

for datum in lista_datuma:

print(f"{datum:%d.%m.%Y.}")

# ovde je korišten prilagođeni ispis datuma

# ukoliko želimo da sortiranje ide od najskorijeg datuma napisaćemo lista_datuma.sort(reverse = True)

Članove liste možemo poređati u obrnutom redosledu a možemo i celu listu iskopirati u drugu.

Primer:

dani1 = ["ponedeljak", "utorak", "sreda", "četvrtak", "petak", "subota", "nedelja"]

dani2 = dani.copy()

dani2.reverse()

# lista dani2 bila bi ["nedelja", "subota", … , "ponedeljak"]

Tupuli

Tupul (tuple) je sledeći tip strukture podataka u Pythonu. U pitanju je, poput liste, niz vrednosti koje

su povezane u neku logičku celinu, s tom razlikom da se ovde radi o nepromenljivim podacima. To je

između ostalog i jedna od najbitnijih razlika tupula u odnosu na listu. Zbog te činjenice mnoge

operativne akcije i metodi koji su se mogli primeniti nad listama i njenim članovima ne važe za tupule.

Za razliku od članova liste koji se navode unutar srednjih zagrada, članovi tupula se navode unutar

običnih zagrada. Primer: (25, 19, 63). Nad tupulima se mogu primeniti sledeće akcije i metodi:

▪ Određivanje dužine len(naziv_tupula)

▪ Određivanje broja pojavljivanja određenog člana .count(član)

▪ Provera da li se neki član pojavljuje u tupulu (član in naziv_tupula);

vrednost može biti True ili False

▪ Pozicija pojavljivanja nekog člana u tupulu .index(član)

▪ Kretanje kroz članove tupula i njihov ispis

Page 21: OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON programiranja... · poznavaocima zanata zvanog programiranje u Pythonu! Ovaj kreativni kurs je pre svega namenjen onima koji žele

OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON

HËLLO – THE FREELANCE PROJECT 21

Skupovi

Skup takođe spada u strukture podataka. Za razliku od listi gde je redosled članova bitan kod skupova

to nije slučaj - član skupa se ne može identifikovati svojom pozicijom, odnosno na njega se ne može

primeniti metod .index(). Članovi skupova, poput članova tupula, predstavljaju takođe nepromenljive

vrednosti pa tako važe ista (ili slična) ograničenja kada je u pitanju mogućnost primene određenih

operativnih akcija i metoda. Članovi skupova se navode unutar vitičastih zagrada i odvajaju se zarezima.

Primer: {5.00, 4.35, 18.95}.

Nad skupovima se mogu primeniti sledeće akcije i metodi:

▪ Određivanje dužine len(naziv_skupa)

▪ Dodavanje pojedinačnog člana skupu .add(član) i

dodavanje više članova odjednom .update([član1, …])

▪ Provera da li se neki član pojavljuje u skupu (član in naziv_skupa);

vrednost može biti True ili False

▪ Kopiranje skupa upotrebom metoda .copy(), uz napomenu da redosled članova pri ovome

može promeniti

▪ Kretanje kroz članove skupa i njihov ispis

Page 22: OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON programiranja... · poznavaocima zanata zvanog programiranje u Pythonu! Ovaj kreativni kurs je pre svega namenjen onima koji žele

OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON

HËLLO – THE FREELANCE PROJECT 22

Rečnici podataka

Za razliku struktura podataka pomenutih u prethodnim odeljcima, rečnik podataka sadrži podatke koji

se identifikuju isključivo preko ključa koji može biti broj ili string i mora biti jedinstven za svaki podatak

u rečniku. Podaci u rečniku mogu biti brojevi, stringovi, liste, tupoli ili skupovi.

Primeri organizacije rečnika podataka:

> tip 1: rečnik podataka za sve zaposlene

Ključ (ID broj zaposlenog)

Podatak (lista sa podacima: ime i prezime, godina rođenja, stalni radni odnos)

"z15805" ["Petar Petrović", 1976, True]

"z23052" ["Ivana Jovanović", 1990, False]

> tip 2: poseban rečnik podataka za svakog zaposlenog

'z15805' = 'ime_prezime' = 'Petar Petrović'

'god_rodjenja' = 1976

'radni_odnos' = True

'z23052' = 'ime_prezime' = 'Ivana Jovanović'

'god_rodjenja' = 1990

'radni_odnos' = False

Pristup podacima se vrši kombinacijom objekat.ključ:

z15805.ime_prezime = 'Petar Petrović'

z15805.god_rodjenja = 1976

z15805.radni_odnos = True

Primer: formiranje i ispis jednostavnog rečnika podataka

Ključ (ID broj zaposlenog)

Podatak (ime i prezime)

"z15805" "Petar Petrović"

"z23052" "Ivana Jovanović"

zaposleni = {

'z15805' : 'Petar Petrović',

'z23052' : 'Ivana Jovanović'

}

broj_podataka = len(zaposleni)

licnost = 'z15805'

prisutan = licnost in zaposleni

# promenljiva prisutan dobija vrednost True

print(zaposleni.get(licnost))

# Petar Petrović; ukoliko navedenog podatka nema u rečniku dobićemo ispis None

# alternativno možemo upotrebiti i print(zaposleni[licnost]) ali i grešku ako ga nema

zaposleni.update({'z23052': 'Ivana Jovanović-Simić'})

# promena podatka u rečniku; alternativno zaposleni['z23052'] = "Ivana Jovanović-Simić"

zaposleni.update({'z78046': 'Marko Marković'})

del zaposleni["z78046"]

# dodavanje novog podatka u rečnik jer ključ z78046 nije postojao, a potom i njegovo brisanje

Page 23: OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON programiranja... · poznavaocima zanata zvanog programiranje u Pythonu! Ovaj kreativni kurs je pre svega namenjen onima koji žele

OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON

HËLLO – THE FREELANCE PROJECT 23

Kroz rečnik podataka se možemo kretati, recimo da bi ispisali sve podatke. U tom slučaju dodali bi

sledeći deo koda:

for podatak in zaposleni.keys():

print(podatak + " : " + zaposleni[podatak])

# alternativno možemo upotrebiti i metod .items() koji povlači i ključeve i vrednosti:

# for kljuc, vrednost in zaposleni.items(): print(kljuc, " : ", vrednost)

# za ispis samo imena možemo upotrebiti:

# for podatak in zaposleni: print(zaposleni[podatak]) ili

# for podatak in zaposleni.values(): print(podatak)

# za ispis samo ključeva možemo upotrebiti: for podatak in zaposleni: print(podatak)

Pregled svih metoda koji se koriste u rečnicima podataka:

Metod Opis metode Način korišćenja (primer)

copy() Vraća kopiju rečnika. zaposleni2 = zaposleni.copy()

fromkeys() Vraća kopiju rečnika (samo zadatih ključeva i vrednosti).

pop() Izbacuje vrednost opisanu ključem iz rečnika i smešta je u promenljivu ukoliko je tako naznačeno.

otpusten = zaposleni.pop("z15805")

popitem() Izbacuje poslednji par ključ-vrednost iz rečnika. U ranijim verzijama Pythona izbacivan je par po nasumičnom izboru pa treba biti obazriv pri primeni ovog metoda.

otpusten = zaposleni.popitem()

clear() Prazni rečnik podataka. zaposleni.clear()

keys() Vraća listu svih ključeva u rečniku podataka.

values() Vraća listu svih vrednosti u rečniku podataka.

get() Vraća vrednost zadatog ključa.

items() Vraća listu svih stavki (u formi tupla), odnosno parova ključ-vrednost.

update() Menja vrednost povezanu sa zadatim ključem ili ubacuje novu ukoliko zadati ključ ne postoji.

setdefault() Vraća vrednost povezanu sa zadatim ključem, a ako taj ključ ne postoji ubacuje ga zajedno sa definisanom vrednošću.

Primer: formiranje i ispis kompleksnog rečnika podataka

proizvod = {

'kategorija' : 'racunar',

'tip' : 'laptop',

'proizvodjac' : 'Lenovo',

'model' : 'ThinkPad',

'oznaka' : 'L590',

'cena' : 650,

'boja' : ['crna', 'siva', 'crvena'],

}

Page 24: OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON programiranja... · poznavaocima zanata zvanog programiranje u Pythonu! Ovaj kreativni kurs je pre svega namenjen onima koji žele

OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON

HËLLO – THE FREELANCE PROJECT 24

# ispis podataka iz rečnika podataka

print("Kategorija:", proizvod['kategorija'])

print("Tip:", proizvod['tip'])

print("Proizvođač:", proizvod['proizvodjac'])

print("Model:", proizvod['model'])

print("Oznaka:", proizvod['oznaka'])

print("Cena:", f"{proizvod['cena']:.2f} EUR")

print("Dostupne boje:")

for boja_proizvoda in proizvod['boja']:

print(boja_proizvoda)

Skup više kompleksnih rečnika podataka, u ovom slučaju proizvoda, čini ukupno stanje podataka koje

pratimo. Da bi se definisali takvi skupovi podataka koriste se ugnježdeni rečnici. Identifikaciju

pojedinačnih proizvoda možemo izvršiti preko njihovih bar-kodova ili internih ID brojeva, na primer.

Primer:

proizvodi = {

'RL256' : {'kategorija': 'racunar', 'tip': 'laptop', 'proizvodjac': 'Lenovo', 'model': 'ThinkPad',

'oznaka':'L590', 'cena':650, 'boja': ['crna', 'siva', 'crvena']},

'RL114' : {'kategorija': 'racunar', 'tip': 'laptop', 'proizvodjac': 'HP', 'model': 'ProBook',

'oznaka':'650G1', 'cena':420, 'boja': ['siva']},

}

# ispis u vidu formatirane tabele korišćenjem f-string funkcija zbog poravnanja podataka

print(f"{'ID':<6} {'Kat':<17} {'Tip':<8} {'Proiz.':<10} {'Model':<10} {'Oznaka':<6} {'Cena':>12}")

print("-" * 100)

for proizvod in proizvodi.keys():

idp = proizvod

kat = proizvodi[proizvod]['kategorija']

tip = proizvodi[proizvod]['tip']

pro = proizvodi[proizvod]['proizvodjac']

mod = proizvodi[proizvod]['oznaka']

ozn = proizvodi[proizvod]['kategorija']

cen = f"{proizvodi[proizvod]['cena']:,.2f}" + " EUR"

boj = ' '

for b in proizvodi[proizvod]['boja']:

boj = boj + b + ', '

# elinisanje dva poslednja karaktera ukoliko smo naišli na ', ' (nema više boja)

if len(boj) > 2:

boj = boj[:-2]

else:

boj = "<nema>" # nije definisana boja za navedeni proizvod

print(f"{idp:<6} {kat:<17} {tip:<8} {pro:<10} {mod:<10} {ozn:<6} {cen:>12} {boj}")

ID Kat Tip Proiz. Model Oznaka Cena

----------------------------------------------------------------------------------------------------------------------

RL256 racunar laptop Lenovo ThinkPad L590 650.00 EUR crna, siva, crvena

RL114 racunar laptop HP ProBook 650G1 420.00 EUR siva

Page 25: OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON programiranja... · poznavaocima zanata zvanog programiranje u Pythonu! Ovaj kreativni kurs je pre svega namenjen onima koji žele

OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON

HËLLO – THE FREELANCE PROJECT 25

7. FUNKCIJE

Prilikom razvoja većih projektnih rešenja od izuzetne važnosti je da programski kod bude modularan i

skalabilan kako bi članovi razvojnog tima ili sam programer, ukoliko samostalno radi na izradi

programa, mogli da jasno definišu programske celine. U tu svrhu se delovi programskog koda sa jasno

određenom namenom (ulaznim i izlaznim parametrima) odvajaju u celine koje se nazivaju funkcije.

Funkcije se mogu pozvati sa više mesta u toku programa tako da se eliminiše potreba da se taj deo

koda svaki put iznova piše kada je potrebno odraditi neki zadatak. Funkcija se formira upotrebom

službene reči def iza koje sledi naziv funkcije i par zagrada, te znak :. Izuzetno je važno primeniti dobru

praksu pisanja komentara!

Programski kod unutar funkcije (kao i unutar petlji, grananja, definicija rečnika podataka i drugih sličnih

konstrukcija) mora biti uvučen jer Python nema naredbu za njen završetak, te jedino na taj način može

prepoznati da se radi o telu funkcije.

Primer:

# funkcija za ispis poruke uz primenu default parametra; osnovni oblik je hello(ime)

def hello(ime = "niko"):

""" opis funkcije: ispis pozdravne poruke uz ime prosleđeno kao argument funkcije """

print("Hello " + ime)

# poziv funkcije

osoba = "Sonja"

hello(osoba)

# za poziv funkcije bez argumenata biće iskorišćen default parametar definisan u samoj funkciji

hello(), dakle "niko".

Parametri koji se koriste unutar funkcije imaju oblast važenja samo u njoj. Međutim, treba ipak

poštovati praksu da se isti nazivi ne koriste u i izvan funkcija. Vrednosti koje se prosleđuju funkciji

nazivaju se argumenti i pišu se unutar zagrada pored njenog naziva u pozivu.

Page 26: OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON programiranja... · poznavaocima zanata zvanog programiranje u Pythonu! Ovaj kreativni kurs je pre svega namenjen onima koji žele

OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON

HËLLO – THE FREELANCE PROJECT 26

Ukoliko funkcija očekuje neke ulazne vrednosti one se moraju definisati i proslediti prilikom poziva

funkcije. U slučaju da je parametar opcionog karaktera, funkcija mora da zna koju vrednost treba da

ima ukoliko joj se pozivom ne prosledi ništa. U slučaju da se funkciji prosleđuje više od jedne vrednosti,

one moraju biti odvojene zarezima kako u zaglavlju funkcije (kada predstavljaju parametre) tako i u

pozivu funkcije (kada predstavljaju argumente) i mora se voditi računa o njihovom redosledu. Postoji i

način prosleđivanja vrednosti u proizvoljnom redosledu ali se onda pri pozivu funkcije unutar zagrada

moraju navesti i tačni nazivi parametara koji su upotrebljeni u zaglavlju funkcije (tako zvani kwargs u

Python slengu). Primer poziva naše funkcije bio bi hello(ime=osoba). U ovom primeru to nema smisla

ali se nadam da shvatate poentu. Unutar same funkcije možemo kontrolisati ispis proverom da li neki

parametar prosleđen. Najelegantniji način za to je upotrebom if naredbe.

Argument poziva funkcije, odnosno parametar funkcije može biti i lista. Ovde treba imati na umu da se

funkciji prosleđuje samo pokazivač (pointer) na listu te funkcija kao takva ne može menjati elemente

liste koji dolaze iz „stvarnog sveta“, odnosno iz dela programskog koda koji je van funkcije. Zbog toga

je praksa da se unutar funkcije napravi kopija prosleđene liste i da se onda ona obrađuje.

Izlazna vrednost, dobijena nakon obrade podataka u funkciji, vraća se upotrebom službene reči return.

Primer: funkcija kojoj se prosleđuje lista

# funkcija za sortiranje prosleđene liste

def sortiranje(ulazna_lista=[]):

""" opis funkcije: sortiranje liste sa imenima u abecednom redu; default vrednost je prazna lista """

sort_lista = ulazna_lista.copy()

sort_lista.sort()

# pravimo u stvari izlazni string (inicijalna vrednost je prazan string)

izlazni_string = " "

# prolazak kroz imena iz sortirane liste

# sa dodavanjem svakog novog podatka iza zareza i praznog karaktera

for ime in sort_lista:

izlazni_string = izlazni_string + ime + ", "

# elinisanje dva poslednja karaktera ', ' (iza poslednjeg imena)

izlazni_string = izlazni_string [:-2]

# dobićemo ispis (preko funkcije): Aleksa, Marko, Nenad, Sonja

return izlazni_string

# poziv funkcije

lista = ["Marko", "Sonja", "Aleksa", "Nenad"]

# kada se koristi return, pri pozivu funkcije rezultat treba smestiti u neku promenljivu

krajnja_lista = sortiranje(lista)

print(krajnja_lista)

Page 27: OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON programiranja... · poznavaocima zanata zvanog programiranje u Pythonu! Ovaj kreativni kurs je pre svega namenjen onima koji žele

OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON

HËLLO – THE FREELANCE PROJECT 27

8. KLASE

Python je između ostalog i objektno-orijentisani programski jezik u kome se mogu definisati klase,

objekti i metodi. Klasa se definiše svojim atributima i metodima (akcijama, odnosno aktivnostima koje

se mogu preduzeti nad njenim elementima - objektima). Objekat predstavlja određeni pojavni oblik

same klase, odnosno njenu instancu. To je dakle element koji nastaje iz klase. Jedna klasa može imati

više objekata. Klasa se u programskom kodu pojavljuje kao jasno izdvojena celina i ima, kako je već

napomenuto, svoje atribute, metode i ime. Praksa je da ime klase počinje velikim slovom abecede kako

bi se klasa razlikovala od promenljive. Iz nje možemo „stvoriti“ jedinstveni objekat, njenu instancu sa

atributima koji dobijaju svoja svojstva. Metodi su praktično funkcije koje se definišu unutar klase i kao

takvi su dostupne za primenu nad objektima.

Primer: definisanje „prazne“ klase koju ćemo kasnije razviti

class Radnik:

pass

# upotrebom službene reči pass stavljamo do znanja Pythonu da ćemo klasu razviti kasnije

# na ovaj način se izbegava prijava greške prilikom izvršavanja koda

Da bi klasi omogućili formiranje njenih instanci (objekata) moramo definisati inicijalni metod (init

method) kroz koji ćemo klasi proslediti podatke potrebne za kreiranje svakog pojedinačnog objekta. U

navedenom primeru klase Radnik definisaćemo inicijalni metod i tako joj saopštiti da ćemo joj prilikom

svakog kreiranja novog objekta proslediti sledeće podatke: korisničko ime i ime i prezime zaposlenog.

def __init__(self, korisnicko_ime, ime_prezime):

self.korisnicko_ime = korisnicko_ime

self.ime_prezime = ime_prezime

# self je default naziv za promenljivu koja je vezana za objekat koji se u tom trenutku kreira

# prilikom iniciranja objekat self je prazan a potom mu se definišu potrebni atributi

# korisnicko_ime i ime_prezime su atributi

Page 28: OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON programiranja... · poznavaocima zanata zvanog programiranje u Pythonu! Ovaj kreativni kurs je pre svega namenjen onima koji žele

OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON

HËLLO – THE FREELANCE PROJECT 28

Konkretan objekat (instancu klase) kreiramo pozivom klase i prosleđivanjem vrednosti koje njeni

atributi trebaju dobiti:

novi_radnik = Radnik("srdjani", "Srdjan Ilić")

print(novi_radnik.korisnicko_ime)

# ispis bi bio srdjani

# vrednosti atributa se mogu menjati:

novi_radnik.korisnicko_ime = "ilicsr"

Prilikom kreiranja objekta nije obavezno da se klasi proslede sve vrednosti koje treba da definišu njene

atribute. Klasa može iskoristiti predefinisane (dafault) vrednosti koje će usvojiti umesto onih koji nisu

prosleđeni ili se atributima mogu dodeliti vrednosti definisane u samoj klasi na osnovu nekog

kriterijuma. Klasu Radnik možemo proširiti novim atributima datum_zaposlenja (generiše se za svakog

novog radnika čiji se objekat prvi put kreira i dobija vrednost današnjeg datuma) i prisutan (definiše da

li je radnik na poslu ili je na odmoru; predefinisana vrednost biće True). Već znamo da kada koristimo

datum i vreme moramo da izvršiti uvoz spoljnog modula sa import datetime as dv. Unutar klase ćemo

definisati nove atribute kao:

self.datum_zaposlenja = dv.date.today()

self.prisutan = True

Naša klasa Radnik bi sada trebala da izgleda ovako:

class Radnik:

def __init__(self, korisnicko_ime, ime_prezime):

self.korisnicko_ime = korisnicko_ime

self.ime_prezime = ime_prezime

self.datum_zaposljenja = dv.date.today()

self.prisutan = True

Vreme je da definišemo metode vezane za navedenu klasu. Metodi se generišu unutar klase.

Definisaćemo prvi metod koja vraća datum zaposlenja. Ovaj metod neće imati parametre koji mu se

prosleđuju ali je ipak unutar zagrada obavezno navesti self.

def prikazi_datum_zaposlenja(self):

return f"{self.ime_prezime} se zaposlio {self.datum_zaposlenja:%d.%m.%Y.}"

U programu ćemo zatim nad definisanim objektom pozvati ovaj metod:

novi_radnik.prikazi_datum_zaposlenja()

Page 29: OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON programiranja... · poznavaocima zanata zvanog programiranje u Pythonu! Ovaj kreativni kurs je pre svega namenjen onima koji žele

OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON

HËLLO – THE FREELANCE PROJECT 29

Drugi metod će preuzeti prosleđeni parametar iz programa i na osnovu njega potvrditi ili promeniti

atribut prisutan.

def prisutnost(self, da_ne):

self.prisutan = da_ne

Kompletan primer sada izgleda ovako:

import datetime as dv

class Radnik:

def __init__(self, korisnicko_ime, ime_prezime):

self.korisnicko_ime = korisnicko_ime

self.ime_prezime = ime_prezime

self.datum_zaposlenja = dv.date.today()

self.prisutan = True

def prikazi_datum_zaposlenja(self):

return f"{self.ime_prezime} se zaposlio {self.datum_zaposlenja:%d.%m.%Y.}"

def prisutnost(self, da_ne):

self.prisutan = da_ne

novi_radnik = Radnik("srdjani", "Srdjan Ilić")

print(novi_radnik.korisnicko_ime)

novi_radnik.korisnicko_ime = "ilicsr"

print(novi_radnik.korisnicko_ime)

zaposlenje = novi_radnik.prikazi_datum_zaposlenja()

print(zaposlenje)

na_odmoru = True

if na_odmoru == True:

novi_radnik.prisutnost(False)

else:

novi_radnik.prisutnost(True)

if novi_radnik.prisutan == False:

print(f"{novi_radnik.ime_prezime} je na odmoru.")

else:

print(f"{novi_radnik.ime_prezime} je prisutan.")

Alternativni način poziva nekog od definisanih metoda iz programa je:

Radnik.prikazi_datum_zaposlenja(novi_radnik)

Radnik.prisutnost(novi_radnik)

U klasama se mogu definisati klasne promenljive. Ove promenljive se definišu neposredno ispred

definisanja inicijalnog metoda. U navedenom primeru možemo napraviti kompleksnije rešenje koje će

uzeti u obzir i da li je novi radnik primljen na određeno ili neodređeno vreme. U programskom kodu,

prilikom formiranja objekta, klasi Radnik u tom slučaju moramo proslediti i vrednost neke promenljive

koju ćemo nazvati recimo radni_odnos (može imati dve vrednosti "na odredjeno" i "na neodredjeno").

U samoj klasi definisaćemo klasnu promenljivu trajanje i dodeliti joj neku vrednost (recimo 90; misli se

na broj dana trajanja radnog odnosa na određeno vreme). Na osnovu ove vrednosti, odnosno njenim

sabiranjem sa datumom zaposlenja možemo dobiti datumsku promenljivu koja će nam vratiti podatak

kada radni odnos zasnovan na određeno vreme ističe (datum_istice).

Page 30: OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON programiranja... · poznavaocima zanata zvanog programiranje u Pythonu! Ovaj kreativni kurs je pre svega namenjen onima koji žele

OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON

HËLLO – THE FREELANCE PROJECT 30

U klasama se mogu definisati i specifični klasni metodi koji se ne odnose na instance klasa. Ovi metodi

imaju specifičnu sintaksu. Pre njihovog definisanja moramo napisati tako zvani dekorator

@classmethod a unutar zagrada zaglavlja se ne piše self već cls. U našoj klasi ćemo definisati klasni

metod kojim ćemo moći da promenimo internu promenljivu trajanje, pozivom iz samog programskog

koda.

Pored već navedenih metoda koji se koriste u klasama postoje i tako zvani statički metodi. Ovi metodi

se takođe ne odnose na konkretne instance klase i mogu se upotrebljavati nezavisno od njih. Jedini

razlog zašto se pojavljuju u određenoj klasi je zbog konkretne logičke zamisli o organizaciji koda. Pre

njihovog definisanja moramo upotrebiti dekorator @staticmethod a unutar zagrada zaglavlja se ne

piše self već cls. U našoj klasi ćemo definisati statički metod kojim ćemo moći da proverimo trenutno

vreme.

Naš primer bi posle ovih proširenja trebao da izgleda ovako:

import datetime as dv

class Radnik:

trajanje = 90

def __init__(self, korisnicko_ime, ime_prezime, radni_odnos):

self.korisnicko_ime = korisnicko_ime

self.ime_prezime = ime_prezime

self.datum_zaposlenja = dv.date.today()

self.radni_odnos = radni_odnos

if radni_odnos == "na odredjeno":

self.datum_istice = dv.date.today() + dv.timedelta(days = Radnik.trajanje)

else:

self.datum_istice = dv.date.today() + dv.timedelta(days = 365 * 100)

self.prisutan = True

# definisanje metoda

def prikazi_datum_zaposlenja(self):

return f"{self.ime_prezime} se zaposlio {self.datum_zaposlenja:%d.%m.%Y.}"

def prisutnost(self, da_ne):

self.prisutan = da_ne

@classmethod

def odredi_trajanje(cls, broj_dana):

cls.trajanje = broj_dana

@staticmethod

def vreme():

sada_je = dv.datetime.now()

return f"{sada_je:%H:%M}"

novi_radnik = Radnik("srdjani", "Srdjan Ilić", "na odredjeno")

print(novi_radnik.korisnicko_ime)

novi_radnik.korisnicko_ime = "ilicsr"

print(novi_radnik.korisnicko_ime)

zaposlenje = novi_radnik.prikazi_datum_zaposlenja()

print(zaposlenje)

na_odmoru = True

Page 31: OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON programiranja... · poznavaocima zanata zvanog programiranje u Pythonu! Ovaj kreativni kurs je pre svega namenjen onima koji žele

OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON

HËLLO – THE FREELANCE PROJECT 31

if na_odmoru == True:

novi_radnik.prisutnost(False)

else:

novi_radnik.prisutnost(True)

if novi_radnik.prisutan == False:

print(f"{novi_radnik.ime_prezime} je na odmoru.")

else:

print(f"{novi_radnik.ime_prezime} je prisutan.")

print() # prazan red

print(f"{novi_radnik.ime_prezime} radi {novi_radnik.radni_odnos} i radni odnos ističe

{novi_radnik.datum_istice:%d.%m.%Y.}") # trajanje je 90 dana

Radnik.odredi_trajanje(30)

print(novi_radnik.trajanje) # trajanje je 30 dana

print(Radnik.vreme())

Koncept nasleđivanja klasa u Pythonu uvodi pojam sub klasa. Klasa višeg nivoa (roditeljska klasa)

definiše karakteristike (atribute i metode) koje se implicitno prenose na klasu nižeg nivoa koja je

definisana kao njena sub klasa. U sub klasi se potom definišu samo one karakteristike koje su specifične

za nju, nasleđujući opšte karakteristike koje su već definisane u klasi višeg nivoa. Prvi korak pri

definisanju hijerarhije klasa je definisanje osnovne klase. Krećemo sa novim primerom vezanim za

korisnike računara. Definisaćemo osnovnu klasu Korisnik i dve sub klase: Administrator i Ostali. U

osnovnoj klasi uvešćemo neke osnovne atribute (identifikacioni broj, ime i prezime), a preko sub klasa

atribute koju su karakteristični samo za konkretnu sub klasu. Za administratore ćemo imati recimo duže

trajanje pristupnih prava od ostalih korisnika, kao i posebnu lozinku za pristup.

import datetime as dv

# osnovna klasa

class Korisnik:

trajanje_pristupa = 90

def __init__(self, id, ime_prezime):

self.id = id

self.ime_prezime = ime_prezime

self.datum_isteka_prava = dv.datetime.today() + dv.timedelta(days = self.trajanje_pristupa)

def prikazi_datum(self):

return f"Pristup ističe {self.datum_isteka_prava:%d.%m.%Y.}"

# sub klase uz navođenje imena osnovne klase unutar zagrada

class Administrator(Korisnik):

trajanje_pristupa = 365 # menjamo vrednost promenljive definisane u osnovnoj klasi

def __init__(self, id, ime_prezime, lozinka):

super().__init__(id, ime_prezime) # prezimanje atributa iz osnovne klase

self.lozinka = lozinka # definisanje novog atributa, samo za ovu sub klasu

class Ostali(Korisnik):

pass

novi_administrator = Administrator(1972, "Srđan Ilić", "OzGoT!5p@ss")

novi_korisnik = Ostali(2020, "Marija Ilić")

print(novi_administrator.ime_prezime); print(novi_administrator.prikazi_datum())

Page 32: OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON programiranja... · poznavaocima zanata zvanog programiranje u Pythonu! Ovaj kreativni kurs je pre svega namenjen onima koji žele

OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON

HËLLO – THE FREELANCE PROJECT 32

LITERATURA

Python All-in-One Edicija: For Dummies Autori: Alan Simpson, John Shovic Godina izdanja: 2019. Broj strana: 740 Jezik: engleski

Ovaj kreativni kurs dostupan je i u naprednoj verziji. Napredne verzije kurseva iz oblasti programiranja

osmišljene su tako da kreativno učenje podignu na stepenik više. Organizovane su na prepaid principu

sa novim temama i primerima dostupnim na nedeljnoj osnovi ili na drugom, unapred dogovorenom

periodičnom principu. Rad je organizovan putem Google Classroom platforme a radni materijal se šalje

i putem e-pošte. Uz svaki napredni kurs dobijate i pravo na konsultacije preko e-pošte i/ili messaging

grupe za vreme njegovog trajanja. Svaki modul naprednog kursa obrađuje određeni broj povezanih

tema a izbor modula je proizvoljan – možete aplicirati za sve ili se opredeliti samo za neke. Opciono se

u napredni kurs može, kao inicijalna tema, uvrstiti i obnavljanje celokupnog kurikuluma obuhvaćenog

osnovnim kursom. Više o ovom i ostalim naprednim kursevima možete saznati na veb lokaciji

www.portalis.rs ili putem e-pošte, slanjem upita na adresu [email protected].

PLAN MODULA POKRIVENIH NAPREDNIM KURSOM – PYTHON, KORAK DALJE

▪ REPETITORIJUM: OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON [7 termina]

▪ UPRAVLJANJE GREŠKAMA I IZUZECIMA [2 termina]

▪ RAD SA SPOLJNIM DATOTEKAMA PODATAKA [5 termina]

▪ JSON DATA KONCEPT [3 termina]

▪ INTERAKCIJA SA INTERNETOM [2 termina]

▪ BIBLIOTEKE, PAKETI I MODULI [2 termina]

Page 33: OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON programiranja... · poznavaocima zanata zvanog programiranje u Pythonu! Ovaj kreativni kurs je pre svega namenjen onima koji žele

OSNOVE PROGRAMIRANJA – PROGRAMSKI JEZIK PYTHON

HËLLO – THE FREELANCE PROJECT 33