Logički operatori i grananje
1. Šta su operatori?
Operatori u Pythonu služe za izvođenje različitih operacija nad vrednostima ili promenljivama.
Postoje aritmetički operatori (+, -, *, /),
poređenja (==, !=, >, <, >=, <=),
logički operatori (and, or, not), i još mnogi drugi.
2. Logički operatori u Pythonu
Logički operatori se koriste za kombinovanje ili negiranje uslova. Oni su ključni kada želimo da napravimo odluke u programu, na primer u if grananjima.
- and – vraća True ako su oba uslova tačna, inače False
- or – vraća True ako je barem jedan od uslova tačan
- not – negira uslov, tj. True postaje False, i obrnuto
U kombinaciji sa operatorima poređenja možemo napraviti složenije izraze koji proveravaju više uslova odjednom.
3. Primeri upotrebe
# primer 1
prvi_broj = 5
drugi_broj = 10
print(prvi_broj < drugi_broj and drugi_broj < 20) # True, oba uslova su tačna
# primer 2
temperatura = 3
vlažnost = 7
print(temperatura > 5 or vlažnost < 10) # True, drugi uslov je tačan
# primer 3
kisa = True
print(not kisa) # False, negacija je suprotna vrednost
Napomena: logički izrazi mogu biti i složeniji, npr. kombinacija and, or i not u jednom izrazu:
godine = 15
ima_dozvolu = True
if (godine >= 14 and godine <= 18) or ima_dozvolu:
print("Možeš pristupiti")
Ovde se kombinuju dva uslova sa and i zatim cela kombinacija sa or, što omogućava složene logičke provere.
Primer:
temperatura = 25
vlaznost = 60
if temperatura > 20 and vlaznost < 70:
print("Prijatno je napolju!")
Grananje: if / elif / else
1. Uvod: linearni tok vs grananje
U jednostavnom programu bez grananja, kod se izvršava redosledno, liniju po liniju – ovo nazivamo linearni tok. Pogledaj ilustraciju levo na Slika 1. Kada koristimo grananje, program može da odluči koji blok koda da izvrši u zavisnosti od ispunjenosti određenih uslova. Ovo dodaje "grane" u tok izvršavanja (prikazano desno na Slika 1).
Na osnovu vrednosti promenljive ili rezultata izraza, program odlučuje kuda će ići dalje. U Pythonu se grananje realizuje pomoću ključnih reči if, elif i else.
- Ako je uslov u if tačan, izvršava se taj blok i ostali se preskaču.
- Ako nije tačan, proverava se elif (može ih biti više).
- Ako nijedan uslov nije tačan, izvršava se else blok (ako postoji).
2. Primer: proveri da li je broj paran ili ne
broj = 7
if broj % 2 == 0:
print("Broj je paran")
else:
print("Broj je neparan")
Ovaj primer pokazuje jednostavno grananje sa dve grane: ako je broj deljiv sa 2 (broj % 2 == 0), izvršava se prvi blok, a u suprotnom (else) drugi blok.
To je osnova logičkog odlučivanja u Pythonu.
3. Primer grananja sa tri grane (ocena)
ocena = 85
if ocena >= 90:
print("Odličan!")
elif ocena >= 75:
print("Dobar")
else:
print("Potreban trud")
U ovom primeru:
- Program prvo proverava da li je ocena >= 90. Nije, pa prelazi na sledeći uslov.
- Sledeći elif proverava da li je ocena >= 75. Tačno je, pa se izvršava blok print("Dobar").
- Blok else se preskače jer je prethodni uslov već bio tačan.
4. Varijante grananja
- Samo if: koristi se kada želimo da izvršimo kod samo ako je uslov tačan. Nema else.
temperatura = 5
if temperatura < 0:
print("Ledeno je!")
dan = "ponedeljak"
if dan == "subota" or dan == "nedelja":
print("Vikend!")
else:
print("Radni dan")
godine = 17
ima_dozvolu = False
if godine >= 18:
print("Punoletan")
if ima_dozvolu:
print("Ima dozvolu za vožnju")
else:
print("Nema dozvolu za vožnju")
else:
print("Maloletan")
ocena = 92
if ocena >= 90:
print("Odličan!")
elif ocena >= 80:
print("Vrlo dobar")
elif ocena >= 70:
print("Dobar")
else:
print("Potreban trud")
Ove strukture omogućavaju programima da imaju dinamičan tok izvršavanja, da donose odluke i reaguju na različite vrednosti promenljivih.
Tabela istinitosti (truth table): and, or, not
Tabela istinitosti prikazuje šta dobijamo kao rezultat za sve moguće kombinacije ulaznih logičkih vrednosti
(True / False). Ovo je najbrži način da se “ućuti” ponašanje operatora.
1) and (I)
| A | B | A and B |
|---|---|---|
| True | True | True |
| True | False | False |
| False | True | False |
| False | False | False |
Intuicija: and je “obostrano mora” — rezultat je True samo kada su obe strane True.
2) or (ILI)
| A | B | A or B |
|---|---|---|
| True | True | True |
| True | False | True |
| False | True | True |
| False | False | False |
Intuicija: or je “dovoljno je jedno” — rezultat je True čim je bar jedan operand True.
3) not (NEGACIJA)
| Vrednost | not Vrednost |
|---|---|
| True | False |
| False | True |
Intuicija: not jednostavno menja True u False i obrnuto.
Brzo pravilo za pamćenje
and = “oba moraju” → vrlo restriktivno. or = “dovoljno je jedno” → vrlo dozvoljavajuće. not = “okreni vrednost” → korisno za uslove tipa “ne” ili “nije”.
3. Mini zadaci
- Napiši program koji proverava da li je temperatura iznad 30°C i ispisuje poruku za vruć dan.
- Kviz: Program pita pitanja i ocenjuje tačne odgovore pomoću if / elif / else.
- Napravi program koji upoređuje dva broja i ispisuje veći od njih.
Složeni logički izraz — kombinacija više operatora
Kada se kombinuju više logičkih operatora (not, and, or), Python koristi strogo definisan redosled izvršavanja (prioritet):
- 1. not — najviši prioritet
- 2. and
- 3. or — najniži prioritet
Pogledajmo sledeći složeni uslov:
(x > 10) or (not y == 5) and (z < 0)
Primer vrednosti:
x = 3
y = 5
z = -2
Kako Python evaluira izraz?
-
Prvo se obrađuje not:
not y == 5→not True→ False -
Zatim and:
(not y == 5) and (z < 0)→False and True→ False -
Na kraju or:
(x > 10) or False→False or False→ False
Konačan rezultat:
Kompleksan izraz → False
Objašnjenje:
Iako izraz izgleda složeno, Python ga uvek čita prema prioritetu operacija. Ako želiš da promeniš redosled evaluacije, koristi zagrade, kao u matematici:
(x > 10 or not y == 5) and (z < 0)
Promena zagrada menja logiku — zato ih uvek koristi kada želiš potpuno jasnu nameru.
Napredni primer — složen izraz sa više uslova
U složenijim situacijama, logički izrazi se koriste za donošenje odluka koje zavise od više parametara.
U ovom primeru kombinujemo više operatora (not, and, or) i četiri logička uslova.
Složeni izraz:
(not is_admin and failed_logins < 3) or (account_active and verified and not banned)
Primer vrednosti promenljivih:
is_admin = False
failed_logins = 1
account_active = True
verified = False
banned = False
Evaluacija izraza — korak po korak
| Uslov | Vrednost | Rezultat |
| not is_admin | is_admin = False | True |
| failed_logins < 3 | 1 < 3 | True |
| (not is_admin and failed_logins < 3) | True and True | True |
| account_active | True | True |
| verified | False | False |
| not banned | banned = False | True |
| (account_active and verified and not banned) | True and False and True | False |
| CELI IZRAZ | True or False | True |
Konačan rezultat:
Kompleksan izraz → True
Realna primena u Python kodu
Ovako složeni logički izrazi često se koriste u sistemima za autentifikaciju i kontrolu pristupa.
# Primer provere da li korisnik može da se prijavi na sistem
if (not is_admin and failed_logins < 3) or (account_active and verified and not banned):
print("Pristup dozvoljen")
else:
print("Pristup odbijen")
Objašnjenje koda:
- not is_admin — obični korisnik (nije administrator)
- failed_logins < 3 — nema previše neuspelih pokušaja
- account_active — nalog je aktivan
- verified — korisnik je potvrdio email
- not banned — nalog nije blokiran
Ako je *bilo koja* od dve velike grupe uslova tačna, sistem dozvoljava pristup. Ovo pokazuje kako logički operatori rade zajedno u složenim realnim situacijama.
Skriveni mini kviz — Logički operatori and, or, not
Klikni da proveriš svoje znanje o logičkim izrazima, istinitosnim vrednostima i grananjima u Python-u!
Otvori kviz
Mini kviz: Da li si savladao logičke operatore?
1. Koji operator ima najveći prioritet u Python-u?
2. Koliki je rezultat izraza True and False?
3. Koliki je rezultat izraza not (True or False)?
4. Šta vraća izraz (5 > 2) or (3 > 10)?
5. Koliki je rezultat složenog izraza:
True or False and False
(Podsetnik: prioritet je not > and > or)
6. Šta će biti ispis?
x = 7
print(x > 3 and not (x == 10))
Česte greške pri korišćenju logičkih operatora u Python-u
Prilikom rada sa logičkim operatorima (and, or, not) početnici često prave tipične greške koje je lako izbeći kada se razume pravi uzrok. U nastavku su najčešće situacije i objašnjenja.
1. Zaboravljene zagrade — pogrešan rezultat zbog prioriteta
Python poštuje sledeći redosled prioriteta:
- not (najviši prioritet)
- and
- or (najniži prioritet)
Zbog toga sledeći izraz možda ne radi kao što izgleda:
x = 5
print(not x > 3 and x < 10)
Greška: Mnogi misle da se not odnosi na ceo izraz x > 3 and x < 10.
Istina: Odnosi se samo na x > 3, jer not ima najveći prioritet.
Ispravno:
print(not (x > 3 and x < 10))
2. Korišćenje & i | umesto and i or
Python ima dve grupe operatora koji izgledaju slično, ali rade potpuno drugačije:
| Operator | Korišćenje |
|---|---|
and, or, not | logičke operacije (boolean) |
&, |, ~ | bitwise operacije (rad nad bitovima) |
Česta greška:
a = True
b = False
print(a & b) # radi, ali nije za ovo namenjeno
Iako radi, ne treba koristiti & i | u logičkim uslovima — osim kada svesno radite bitovne operacije.
Ispravno:
print(a and b)
Napomena: Za NumPy nizove & i | su obavezni — to je posebna tema i ne odnosi se na standardni Python.
3. Pogrešno poređenje više vrednosti
Greška:
x = 5
if x == 3 or 4 or 5:
print("OK")
Ovo uvek vraća True, jer se tumači kao:
(x == 3) or (4) or (5)
A brojevi 4 i 5 u logičkom kontekstu se tretiraju kao True.
Ispravno:
if x == 3 or x == 4 or x == 5:
print("OK")
Još bolje:
if x in (3, 4, 5):
print("OK")
4. Greška sa "not" i poređenjima
Greška:
if not x == 10:
print("Nije 10")
Mnogi misle da je ovo ekvivalentno:
if x != 10:
Ali zapravo jeste ekvivalentno — samo je manje čitljivo i može dovesti do zabune, pogotovo ako ima više uslova.
Što jednostavnije:
if x != 10:
print("Nije 10")
5. Logički operatori vraćaju vrednosti, ne nužno True/False
Ovo je česta zbunjenost:
print("" or "Python") # Python
print("Hello" and 0) # 0
Operatori and i or vraćaju vrednosti, ne booleane — što može biti problem ako to ne očekujete.
Rešenje:
bool("" or "Python") # True
Ako vam treba isključivo True/False, koristite bool() ili uslove u if-u.

