Sei sulla pagina 1di 15

2.1.

Comparisons i Conditions (if/else)


● Proces u kome definišemo odluku za program
○ Ako je uslov tačan, izvršava se dio koda koji je vezan za taj uslov
● Python ima malo drugačiju sintaksu od većine programskih jezika, ne koristi blok i zagrade

Dvije tacke u Python-u oznacavaju da zelimo da udjemo u blok ispod te dvije tacke.
Vrlo je bitno da kada ulazimo u sami blok da imamo cetri space-a od lijeve strane i onda postoji
blok u kojem apsolutno mozemo da radimo nezavisne stvari

a = 3
b = 5

# Provjeravamo da li je a > b (if) ili je b > a (elif).


# Ako nije nista od toga, onda je a = b (else)

if a > b: # Ako zelimo da prosirimo kondiciju koristimo kondiciju AND


#Ukoliko bi zeljeli da pored uslova a > b zelimo da provjerimo da su a i b pozitivni,
koristili bi:
# if a > b and a > 0 and b > 0
# Ukoliko bi zeljeli da vidimo da je a > b i da postavljamo zahtjev da je ili a ili b
prirodan broj:
# if a > b and (a > 0 or b > 0)
print("a je vece od b.")
elif b > a: #uslov ako je nesto zadovoljeno (moze da prvo pod if ne bude tacno, dok kod
elif bude)
print ("b je vece od a.")
else:
print("Brojevi su jednaki.")
2.2. Chain comparison, operator <>
● Kod Pythona moguće je višestruko poređenje
○ Npr. zapis 1 < 2 and 2 < 3 možete kraće zapisati, 1 < 2 < 3
● Operatori poređenja <> i != imaju isto značenje
○ 1 != 2 će da vrati True jer su 1 i 2 različiti, dok 1 != 1 vraće False
○ Ostali operatori poređenja su == , <, > , <=, >=
■ Više uslova u kondiciji spaja se sa logičkim operatorima and i or
■ Operator not je operator negacije
● a = not 1 == 2 vraće ?

a = 3
b = 5

# Imamo kondiciju NOT koja negira sve sto se nalazi u nastavku

if not (a > b):


print ("a nije vece od b")
elif not (b > a):
print ("b nije vece od a")
else:
print ("Brojevi su jednaki")

● Precedence

● Kraći zapis za if statement


○ true if condition_1 else false

a = 3
b = 5

# Ako imamo samo IF i ELSE onda koristimo ovakvu sintaksu, a ako imamo else, elif i if
treba izbjegavati ovaj vid

res = " a je vece od b" if a > b else " a je manje ili jednako b"
print (res)

# Ako je a > b, cuvace se string " a je vece od b"


# Ako je a < b, cuvace se string " a je manje ili jednako b"
2.3. Loops, while
Petlja su slične kao da imamo provjeravanja uslova za if, samo što ne promjenjujemo
samo jednom taj uslov, već više puta. A to što se dešava unutar petlje utiče na uslov.

WHILE PETLJA:

# Ovim putem stampam brojeve od 0 do 10

i = 1
while i <= 10:
print (i)
i = i + 1 # Pisemo ovo kako ne bi dobili sve jedinice, vec kako bi islo 1, 2, ..., 10
# Zbir prvih deset prirodnih brojeva

i = 1
zbir = 0

while i <= 10:


zbir = zbir + i
i = i + 1

print (zbir)

FOR petlja

- Range () – ugradjena fja; imamo tri argumenta – 1. od koje vrijednosti, 2. do koje


vrijednosti, 3. za koliko koraka uvecavamo (ukoliko ne stavimo nista to znaci da uvecavam za
1, po difoltu.
Takodje kao kod stringa, prvi argument ukljucuje, dok drugi ne ukljucuje

# Koristeci FOR petlju naci proizvod prvih deset parnih brojeva

for i in range (1, 11): # Uzmi i da je jednaka prvoj vrijednosti (1), kolika ce da bude
vrijednost za i = 1
print (i)

- For petlja se koristi umjesto While petlje, jer mnogi zaborave da uvecaju i

# Koristeci FOR petlju naci proizvod prvih deset parnih brojeva

proizvod = 1 # Broj znamo da je paran ako posmatramo broj po modulu 2, odnosno kada broj
djelimo sa 2. Ukoliko je ostatak 1 onda nije paran, a ukoliko je ostatak 0 onda jeste
paran.
for i in range (1, 11): # Uzmi i da je jednaka prvoj vrijednosti (1), kolika ce da bude
vrijednost za i = 1
if i % 2 == 0: # Ako je i po modulu 2 jednako 0
proizvod = proizvod * i
print (proizvod)
# Za prvih deset prirodnih brojeva, naci proizvod parnih medju njima (ista zadatak kao
prethodni, ali malo drugacije preformulisan)
# Radicemo ga na malo drugaciji nacin u odnosnu na prethodni, odnosno odradicemo ga bez IF

proizvod = 1
for i in range (2, 11, 2): # Krecemo od od 2, kao od prvog parnog broja, idemo do 11, i to
za uvece koraka za dva uzimajuci brojeve 2, 4, 6, 8, 10
proizvod = proizvod * i

print (proizvod)

# Napisatiprogram koji vraca broj malih i broj velikih slova za zadati string.
# Primjer: upper_lower (" Hi Mr. Rober. How are you today?"),
# vraca (19, 4), 19 - broj malih slova, 4 - broj velikih slova.
# POMOC: da provjerite da li je karakter slovo koristiti isalpha metod.

recenica = " Hi Mr. Rober. How are you today?"


broj_malih_slova = 0
broj_velikih_slova = 0
for karakter in recenica:
if karakter.isalpha(): #provjeravamo da li je uopste karakter slovo, ukoliko jeste
if karakter.islower (): #provjerava da li je malo slovo, i ako jeste malo slovo
uvecava mala slova za 1
broj_malih_slova += 1
else: # a ako nije malo slovo, onda je veliko slovo, i onda uvecavamo velika slova
za 1
broj_velikih_slova +=1

print (f"Broj malih slova u recenici '{recenica}' je: {broj_malih_slova}, a broj velikih
slova u recenici '{recenica}' je: {broj_velikih_slova}.")

● Sa range
for elem in range(1,4):
print(elem)

- Ovo 'elem' koristi se samo kod for petlje. Ona se kreira tako sto joj se dodjeli vrijednost
1 u prvoj iteraciji, uveca se na dva i sve tako do cetvorke. Kada dodje do broja 4, nestane i
postoji samo unutar bloka.

● Šta ako oćemo da se petlja izvrši milijardu puta? Oće li se svaki put kreirati
elem i čuvati u memoriju?
○ Generatorima se ovo rješava, elem koristimo npr. u jednoj iteraciji i više nam nije
potrebna njegova vrijednosti, zašto onda da zauzima memoriju...
○ Kod Python-a v3 range je već generator, dok je kod Python-a xrange generator, a
range generiše listu od start_from do end_with

- Brisanje varijable se vrsi putem del od neke varijable koju zelimo da izbrisemo
2.4. Print formatting
● Postoji više načina za formatiranje print-a
○ print (“Korisnik ima %d godina” %vrijednost)
○ print (“Student ima prosjek %br1.br2f” %vrijednost)
■ br1 predstavlja broj mjesta do decimalne tačne, a br2 koliko decimala se
zaokružuje broj

● Generalno jednostavniji način:


○ Koristiti str.format(args)
● Najmoderniji i najjednostavniji način sa stavljanje f ispred stringa
● Primjer (printing)
2.5. Komentari
● Malo se razlikuju nego kod drugih programskih jezika
● Za jednolinijske komentare koristite #
● Za višelinijske komentare koristite ”””
● Osim što komentarisanjem olakšavate drugim programerima da nastave razvoj programa,
omogućavanje generisanje dokumentacije za vaš kod
● Evo primjera:
○ Link
○ Ovo ćete koristiti pri izradi projekta
2.6. Lista korisnih funkcija
● Lista:

○ dir() - lista dostupnih objekata


■ Za sad cemo se fokusirati na __builtins__
● Oni su nam uvijek dostupni
■ dir(__builtins__)
● Isprobati

○ help(function_name)
print(help(int))
#Uz pomoc ovog dobijamo informacije koje su nam potrebene

■ Npr. help(pow)
■ Argumenti odvjeni sa [] su opcioni

○ Isprobati hex(20)
■ Šta ako zapišemo string koji smo dobili bez string literala
(jednostruki/dvostruki/trostruki navodnici)?

○ help(“modules”)
■ Lista dostupnih modula/paketa - govorićemo o pojedinim modulima kasnije
kroz kurs
■ Probajte nakon importovanja nekog modula, help(ime_modula)
2.7. Kolekcije, uvod
● Kod Pythona se koriste 4 tipa kolekcija

○ Liste - kod većine programskih jezika to su nizovi, moguće je izmijeniti elemente


liste, mogu da sadrže duplikate
○ Torke (tuples) - gotovo ista svojstva kao i liste ali elemente nije moguće mijenjati,
mogu da sadrže duplikate (mjesece u godini)
○ Skupove (sets) - kolekcija neideksiranih elemenata, ne mogu sadržati duplikate (kao
kod matematike)
○ Dictionaries - vrlo slični objektima kod drugih programskih jezika ili hash nešto nalik
hash tabelama. Elementi indeksirani, nema duplikata

● U nastavku ćemo analizirati svaki tip pojedinačno, i vidjeti šta su razlike i gdje
je poželjno koristiti jedan, a gdje drugi tip
2.8. Liste
● Neprimitivni ugrađeni tip podatka
● Sintaksa za deklarisanje [] ili list()
○ Isto kao nizovi kod drugih pj. [el1, el2, el3, …], indeksiranje kreće od nule

● Kod većine programskih jezika liste/nizovi sadrže isti tip podataka, kod Pythona to ne mora
da bude slučaj, skroz je validno da lista sadrži bilo koji tip podatka
○ Tako u jednoj listi možete da čuvate brojeve, stringove, druge liste, skupove, objekte
i sve ostale tipove podataka koje Python posjeduje

● Takođe, za liste nije potrebno unaprijed definisati veličinu, što kod većine
programskih jezika (gdje se liste koriste kao nizovi) to nije slučaj
● Pogledajmo primjer (lists, prvi dio)

PRIMJERI:

1.
for element in l1:
print (element) ovo nam je tabelirano

2.

# Naci proizvod jednocifrenih prirodnih brojeva unutar liste sastavljene od cijelih


brojeva

l1 = [-10, -20, 10, 20, 1, 2, -4, 5, 0]


proizvod = 1 # za proizvod uvijek krećemo od 1

for element in l1:


if 0 < element < 10:
proizvod = proizvod * element

print (proizvod)

3.
lista = [2, 3, 7, 4]
proizvod = 1
for broj in lista:
if broj % 2 != 0: # != -> nije jednako
proizvod = proizvod * (broj ** 3)

print(proizvod)

- Razlika između primitivnog tipa/razlika predavanja po vrijednosti i po referenciji:


(Objašnjeno na 3. Python u okviru vremena: 1:00:00
4.
# Imamo listu a
list_a = [1, 2, 3, 4]

# Kažemo da je lista b jednaka listi a


list_b = list_a

#Sada želim da prvu vrijednost iz liste -> 1, da promjenim u broj 10


# To ćemo da odradimo na sljedeći način !0 označava broj indeksa
list_b[0] = 10

# Ovim korakom mi smo promjenili i jednu i drugu listu


print(list_a)
print(list_b)

# Mi takođe možemo da odradimo mjenjanje vrijednosti iz jedne liste i da bez obzira na to


što smo izvršili jednakost između tih listi, da se druga lista ne promjeni (što je bio
slučaj kod prethodnog primjera)

list_a = [1, 2, 3, 4]
list_b = list_a.copy() #moze i list_b = list(list_a)
list_b[0] = 10
print(list_a)
print(list_b)

5.
# Napisati program koji računa apsolutnu sumu svih negativnih parnih elemenata za unijeti
niz. Štampati sumu

lista = [-2, 7, -5, 3, 1, -4]


suma = 0

for broj in lista:


if broj < 0 and broj % 2 == 0:
suma += abs(broj)

print (suma)
2.9. Liste, neke od funkcija i metoda
● Navedimo neke korisne funkcije koje koriste liste:
○ len(list) - vraće dužinu liste
○ Indeksiranje i slicing radi isto kao i kod Stringova
○ Isto kao i kod Stringova, spajanje listi je moguće sa operatorom +
○ Šta će da vrati list * 3?

● Metode kod listi:


○ list.append(el) - dodavanje elementa na kraj liste
○ list.pop() - vraće zadnji element liste i briše taj element
■ Ako navedemo argument za pop(), argument predstavlja indeks elementa koji
uklanjamo
■ Npr. list.pop(2) - briše element iz liste list čiji je indeks 2
● Šta se dešava ako je dužina liste 1?
● Šta ako pristupamo indeksu elementa liste koji je veći od dužine liste?

○ list.reverse() - okreće elemente liste u suprotnom poretku


○ list.sort() - sortira elemente liste
l = [ 10, 5, 7, 2, 1]
l.sort()

print(l) -> vraća nam listu u [1, 2, 5, 7, 10]

l = [ 10, 5, 7, 2, 1]
l.sort()
l.reverse ()
print(l) -> vraća nam listu u [10, 7, 5, 2, 1]

● Pogledajmo primjer (lists, drugi dio)


2.10. Liste, kreiranje matrice i još metoda
● Znate li svi šta je matrica?

● U Pythonu kreiranje matrica je vrlo jednostavno


○ Matrice su u stvari 2D liste

● Još metoda
○ list.count(elem) - koliko puta se elem pojavljuje u listi list
○ list.extend(elem) - slično kao i append s tim što se razlikuje kada dodajemo listu u
listu

l = [ 10, 5, 7, 2, 1]
l.sort()
l.reverse ()
l.extend([5, 10])
print(l)

○ list.index(elem) - vraće index elementa elem


■ Šta ako tražimo element koji nije u listi?
○ list.insert(index, elem) - dodavanje elementa elem u listu list na poziciju index
○ list.remove(elem) - briše prvi element iz liste čija je vrijednost elem
○ list.clear() - brisanje svih elemenata iz liste
○ del list - brisanje liste, čistimo memoriju

# umjesto ovog koristimo extend, zbog izgleda liste

l = [ 10, 5, 7, 2, 1]
l.sort()
l.reverse ()
l.append([5, 10]) # Dodaće nam kao listu unutar liste
print(l) -> vraća listu u ovom obliku [10, 7, 5, 2, 1, [5, 10]]
2.11. Liste, čuvanje po reference
● Šta znači čuvanje u varijablu po vrijednosti, a šta po referenci?
○ list_b = list(list_a) pravi kopiju liste lista_a

!Objašnjeno negdje u okviru vremena 1:00:00!


2.12. Tuples
● Vrlo slično kao i liste, s tim što se immutable
○ Nije moguće brisanje, mijenjanje i dodavanje novih elemenata

tuple = (1,2,3,4)
print (tuple)

● Sintaksa za kreiranje () ili samo niz vrijednosti odvojene zarezima


○ len(tuple) - dužina torke
○ Takođe mogu da sadrže različite tipove podataka
○ tuple.index(elem) - indeks elementa
○ tuple.count(elem) - broj elemenata elem u torci tuple

● Glavni razlog zašto se koriste nekad prije nego liste je svojstvo immutable i što
zauzimaju manje memorije, pa se brže i kreiraju
○ Npr. dates za kalendar, jer ne želimo kasnije da mijenjamo takve podatke
○ Zašto zauzimaju manje memorije?

● Voditi računa da ako je dužina torke 1, morate dodati zarez na kraju da se ne bi


obavila automatska konverzija, testirati ovo
tuple = (1)
print (type(tuple))
-> vraća nam -> <class 'int'> ,odnosno integer
2.13. Funkcije
● Dio koda koji se izvršava kada se pozove
● Glavna motivacija za uvođenje funkcija je sprečavanje dupliranja koda (DRY - don’t repeat
yourself) kao i grupisanje koda u manje cjeline.

1.
def saberi (a, b): #Def se koristi kao oznaka za funkciju
return a + b # Ovim putem želimo da nam se vrati vrijednost a + b

x = saberi (3, 5) # 3 = a, 5 = b
print(x)

2.

def rijesi_kvadratnu_jednacinu (a, b, c):


import math
x1 = (-b + math.sqrt(b**2 - 4*a*c)) / 2 * a
x2 = (-b - math.sqrt(b**2 - 4*a*c)) / 2 * a
return(x1, x2)

x1, x2 = rijesi_kvadratnu_jednacinu (1, 5, 6)


print(x1, x2)

Potrebbero piacerti anche