Ovde je mali primer Bulovih izraza(ne morate da ga kucate):

a = 6
b = 7
c = 42
print 1, a == 6
print 2, a == 7
print 3, a == 6 and b == 7
print 4, a == 7 and b == 7
print 5, not a == 7 and b == 7
print 6, a == 7 or b == 7
print 7, a == 7 or b == 6
print 8, not (a == 7 and b == 6)
print 9, not a == 7 and b == 6

Sa izlazom:

1 True
2 False
3 True
4 False
5 True
6 True
7 False
8 True
9 False

Šta se dešava? Program se sastoji od gomile čudnih print naredbi. Svaka print naredba štampa broj i izraz. Broj služi da pomogne da pratimo stazu naredbe kojom se računar bavi. Obratite pažnju kako se svaki izraz završi kao False ili True. U Pajtonu, netačno se takođe može napisati kao 0 a tačno kao 1.

Linije:

print 1, a == 6
print 2, a == 7

štampa True i False odnosno baš kao što se očekuje, jer prva je tačna, a druga je netačna. Treća štampa, print 3, a == 6 and b == 7, je malo drugačija. Operator and znači da ako su obe naredbe pre i posle tačne onda će cep izraz biti tačan, u suprotnom ceo izraz će biti netačan. Sledeća linija, print 4, a == 7 and b == 7, prikazuje ako je deo pre and izraza netačan, onda je sve netačno. Ponašanje and naredbe se može sažeti na sledeći način:

izraz rezultat
tačno and tačno tačno
tačno and netačno netačno
netačno and tačno netačno
netačno and netačno netačno

Obratite pažnju da ako je prvi izraz je lažan Pajton ne čeka drugi izraz, jer zna da je ceo izraz lažan.

Sledeća linija, print 5, not a == 7 and b == 7, koristi not operaciju. not samo daje suprotan izraz. (Izraz se može prepraviti ovako print 5, a != 7 and b == 7). Ovde je tabela:

izraz rezultat
not tačno netačno
not netačno tačno

Sledeće dve linije, print 6, a == 7 or b == 7 i print 7, a == 7 or b == 6, koriste or operaciju. Operacija or vraća tačno ako je prvi izraz tačan, ili ako je drugi taćan ili ako su oba. Ako nijedan nije tačan vraća netačno. Ovde je tabela:

izraz rezultat
tačno or tačno tačno
tačno or netačno tačno
netačno or tačno tačno
netačno or netačno netačno

Imajte na umu da ako je prvi izraz tačan Pajton ne proverava drugi izraz pošto zna da je ceo izraz tačan. Ovo radi or da je tačno ako je bar jedna polovina izraza tačna. Prvi deo je tačan tako da će drugi deo biti ili tačan ili netačan, ali je ceo izraz i dalje tačan.

Sledeće dve linije, print 8, not (a == 7 and b == 6) i print 9, not a == 7 and b == 6, prikazuju kako zagrade mogu koristiti za grupisanje izraza i tada traži da se jedan deo prvi izračuna. Primetite da su zagrade promenile izraz iz netačno u tačno. To se dogodilo jer su zagrade primorale not da se primeni na ceo izraz osim na samo a == 7 deo.

Ovde je primer korišćenja Bulovih izraza:

листа = ["Живот", "Универзум", "Све", "Џек", "Џил", "Живот", "Џил"]

# направите копију листе. погледајте поглавље Више са листама да видите шта [:] значи.
коп = листа[:]
# сортирање копије
коп.sort()
прет = коп[0]
del коп[0]

бројање = 0

# проћи кроз листу у потрази за паром
while бројање < len(коп) and коп[бројање] != прет:
    прет = коп[бројање]
    бројање = бројање + 1

# Ако пар није пронађен онда бројање не може бити мање од дужине
# јер се while петља наставља док је бројање мање од дужине
# а није пронаћен пар

if бројање < len(коп):
    print "Први пар:", прет

I ovde je izlaz:

Први пар: Џил

Ovaj program radi nastavljajući da proverava par while бројање < len(коп) and коп[бројање] није једнако прет. Onda je бројање veće od poslednjeg indeksa коп ili je par pronađen and više nije tačno pa petlja postoji. if jednostavno proverava da se uveri da je iz while petlje izašao jer je pronađeno podudaranje.

Drugi "trik" je and korišćen u ovom primeru. Ako pogledate u tabelu za and primetićete da je treći ulaz "netačan i neće proveravati". Ako бројање >= len(коп) (drugim rečima бројање < len(коп) je netačno) onda коп[пројање] nije nikad pogledano. Ovo je zato što Pajton zna da ako je prvi tačan onda ne mogu oba biti tačna. Ovo je poznato kao prečica i korisno je, ako će druga polovina and izazvati grešku ako nešto nije dobro. Ja koristim prvi izraz (бројање < len(коп)) da proverim i vidim da li je бројање dobar indeks za коп. (Ako mi ne verujete uklonite parove "Džil" i "Život", proverite da li i dalje radi, a onda obrnite redosled бројање < len(коп) and коп[бројање] != прет u коп[бројање] != прет and бројање < len(коп).)

Bulovi izrazi mogu da se koriste kada treba da proverite dve ili više različitih stvari odjednom.

Napomena o Bulovim operatorima uredi

Uobičajena greška za ljude nove u programiranju je nerazumevanje načina na koji logički operatori rade, koja proizilazi iz načina na koji pajton prevodilac čita ove izraze. Na primer, nakon prvobitnog učenja o "and " i "or" iskazima, moglo bi se pretpostaviti da će izraz x == ('a' or 'b') proveravati da vidi ako je promenljiva x jednaka nizu 'a' ili 'b'. To nije. Da biste videli o čemu pričam, započnite interaktivnu sesiju sa prevodiocem i unesite sledeće izraze:

>>> 'a' == ('a' or 'b')
>>> 'b' == ('a' or 'b')
>>> 'a' == ('a' and 'b')
>>> 'b' == ('a' and 'b')

I ovo će biti neintuitivan rezultat:

>>> 'a' == ('a' or 'b')
True
>>> 'b' == ('a' or 'b')
False
>>> 'a' == ('a' and 'b')
False 
>>> 'b' == ('a' and 'b')
True

Sa ove tačke, and i or operateri izgledaju da su slomljeni. Nema smisla da je, za prva dva izraza, 'a' jednako 'a' ili 'b' dok 'b' nije. Štaviše, nema smisla da je 'b' jednako 'a' i 'b'. Nakon razmatranja šta prevodilac radi sa logičkim operatorima, ovi rezultati rade u stvari upravo ono što ste tražili od njih, to jednostavno nije isto kao ono što ste mislili da pitate.

Kada Pajton prevodilac gleda or izraz, uzima prvu izjavu i proverava da li je istina. Ako je prva izjava tačna, onda Pajton vraća vrednost tog objekta bez proveravanja druge izjave. Ovo je zato što je za or izraz, cela stvar tačna ako je jedna od vrednosti tačna; program ne mora da se bavi drugom izjavom. Sa druge strane, ako je prva vrednost netačna Pajton proverava drugu polovinu i vraća tu vrednost. Ta druga polovina određuje vrednost celog izraza jer je prva bila netačna. Ova "lenjost" dela interpretera se zove "prečica" i predstavlja uobičajen način vrednovanja bulovih izraz u mnogim programskim jezicima.

Slično, za and izraz, Pajton koristi tehniku prečice da ubrza istinitosnu procenu vrednosti. Ako je prva izjava netačna onda ceo izraz mora biti netačan, pa ovo vraća tu vrednost. U suprotnom ako je prva vrednost tačna on proverava drugu i vraća vrednost.

Jednu stvar imajte na umu u ovom trenutku,a to je da Bulov izraz vraća vrednost ukazujući na True ili False, ali Pajton smatra da veliki broj različitih stvari ima istine vrednosti dodeljene na njih. Da biste proverili istinitosnu vrednost o bilo kom predmetu x, možete koristiti funkciju bool(x) da vidite njegovu istinitosnu vrednost. Ispod je tabela sa primerima vrednosti istine raznih objekata:

Tačno Netačno
Tačno Netačno
1 0
Brojevi različiti od nule Niz 'None'
Ne-prazan niz Prazan niz
Ne-prazna lista Prazna lista
Ne-prazni rečnici Prazni rečnici

Sada je moguće razumeti zbunjujući rezultate koje smo dobijali kada smo testirali te bulove izraze pre. Hajde da pogledamo šta interpreter "vidi" kada prolazi kroz taj kod:

Prvi slučaj:

>>> 'a' == ('a' or 'b')  # Погледајте заграде прво, тако је вредност израза "('a' or 'b')"
                           # 'a' је не-празан низ, па је прва вредност тачна
                           # Враћа ту прву вредност: 'a'
>>> 'a' == 'a'           # низ 'a' је једнак низу 'a', па је израз тачан
True

Drugi slučaj:

>>> 'b' == ('a' or 'b')  # Погледајте заграде прво, тако је вредност израза "('a' or 'b')"
                           # 'a' је не-празан низ, па је прва вредност тачна
                           # Враћа ту прву вредност: 'a'
>>> 'b' == 'a'           # низ 'b' није једнак низу 'a', па је израз нетачан
False 

Treći slučaj:

>>> 'a' == ('a' and 'b') # Погледајте заграде прво, тако је вредност израза "('a' and 'b')"
                           # 'a' је не-празан низ, па је прва вредност тачна, испитати другу вредност
                           # 'b' је не-празан низ, па је друга вредност тачна
                           # Враћа ту другу вредност као резултат целог израза: 'b'
>>> 'a' == 'b'           # низ 'a' није једнак низу 'b', па је израз нетачан
False

Četvrti slučaj:

>>> 'b' == ('a' and 'b') # Погледајте заграде прво, so evaluate expression "('a' and 'b')"
                           # 'a' је не-празан низ, па је прва вредност тачна, испитати другу вредност
                           # 'b' је не-празан низ, па је друга вредност тачна
                           # Враћа ту другу вредност као резултат целог израза: 'b'
>>> 'b' == 'b'           # низ 'b' је једнак низу 'b', па је израз тачан
True 

Tako da je Pajton zaista radio svoj posao kada je dao te naizgled lažne rezultate. Kako je već pomenuto, važno je da prepozna šta će vrednost vašeg Bulovog izraza vratiti kada se procenjuje, jer nije uvek očigledno.

Da se vratimo tim prvim izrazima, ovako bi ste ih napisati tako da bi se ponašali na način na koji želite:

>>> 'a' == 'a' or 'a' == 'b' 
True
>>> 'b' == 'a' or 'b' == 'b' 
True
>>> 'a' == 'a' and 'a' == 'b' 
False
>>> 'b' == 'a' and 'b' == 'b'
False

Kada bi se ova poređenja ocenjivala vratile bi se vrednosti istine u pogledu Tačno ili Netačno, ne kao nizovi, tako da smo dobili odgovarajuće rezultate.

Primeri uredi

šifra1.py

## Овај програм пита корисника за име и лозинку.
# Затим их проверава, да ли је кориснику дозвољено унутра.

име = raw_input("Које је Ваше име? ")
шифра = raw_input("Која је шифра? ")
if име == "Џош" and шифра== "Петак":
    print "Добродошао Џоше"
elif име == "Фред" and шифра== "Рок":
    print "Добродошао Фреде"
else:
    print "Не познајем те."

Primeri

Које је Ваше име? Џош
Која је шифра? Петак
Добродошао Џоше
Које је Ваше име? Бил
Која је шифра? Новац
Не познајем те.

Vežbe uredi

Napišite program koji ima zadatak da korisniku pogodi ime, ali ima samo 3 pogotka dok se program ne završi.

Otkrivena je petlja šablona: Šablon:Rešenje Šablon:Vodiš za Pajton 2.6/Navigation