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!")

Dijagram toka a) bez grananja -levo i b) sa granajem toka-desno
Slika 1: Dijagram toka a) bez grananja -levo i b) sa granajem toka-desno

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!")
    
  • If-else: koristi se kada želimo izvršiti jednu akciju ako je uslov tačan, a drugu ako nije.
  • 
    dan = "ponedeljak"
    if dan == "subota" or dan == "nedelja":
        print("Vikend!")
    else:
        print("Radni dan")
    
  • Dve varijante if-else: situacija kada želimo podeliti program na dve alternative, a unutar svake alternative možemo dodatno koristiti if-else:
  • 
    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")
    
  • If-elif-else: koristi se kada imamo više uslova koje želimo proveriti redom.
  • 
    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?

  1. Prvo se obrađuje not:
    not y == 5 → not True → False

  2. Zatim and:
    (not y == 5) and (z < 0) → False and True → False

  3. 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.