python

Instruksionet

Strukturat e kontrollit if elif else

Një tjetër pjesë e gjuhëve të programimit janë edhe kushtet apo siç njihen, strukturat e kontrollit. Strukturat e kontrollit i japin më shumë forcë shprehëse gjuhës, duke thjeshtuar shumë punë.

Siç do ta shikojme, ato janë shumë të lehta për tu mesuar, për arsyen se janë me tepër formulime gjuhësore.

Struktura if

If nga anglishtja do të përkthehej nëse, pra është një kusht. If ka kuptimin se nëse kushti është i vërtetë, zbatohet blloku i formulimeve të mëposhtme. Kodi i struktures if është:

if kushti që duhet plotësuar:
    Blloku ose një formulim i vetëm

Siç e shikoni formulimi i dytë pas fjalës kyçe if nuk ndodhet ne të njejtën shtyllë, por është i zhvendosur. Kini parasysh t'i respektoni hapesirat që janë shumë të rëndësishme ne python. IDLE që po perdorim është vetë e kujdesshme për hapesirat.

if prefiksi == '054':
    print 'nga elbasani'

Këto rreshta kod do të perktheheshin: nëse prefiksi i qytetit është 054, atëherë telefonuesi është nga elbasani. Nëse do të tentoni ta shkruani do të merrni një mesazh gabimi që me të drejtë thotë se nuk është përcaktuar ndryshorja prefiksi. Rishkruajeni duke i dhënë vlerë prefiksit.

prefiksi = '054'
if prefiksi == '054':
    print 'nga elbasani'

Në python numrat që fillojnë me 0 konsiderohen si numra me bazë 8. Ky material nuk merr përsipër shpjegimin e numrave me baza të ndryshme.

Për këtë arsye prefiksit nuk i kemi dhënë vlerën e një numri, por e kemi shënuar si varg karakteresh.

Provoni të printoni numrat e mëposhtëm:

>>> print 010
8
>>> print 012
10

Pra nëse shkruani 010, do merrni si rezultat 8. Numri 10 ne bazen 8, është 8. Numri 12 ne bazen 8, është 8 e kështu për çdo numër që provoni duke vendosur zeron përpara.

Struktura if-else

Else ( përkthyer nga anglishtja do të thotë përndryshe) shoqërohet gjithmonë me një if. Ka kuptimin: nëse kushti i parë nuk është i vërtetë përndryshe (ose nëse do benim një shqiperim, do të thonim: atëherë) zbato bllokun që ndodhet poshtë else. Ne këtë rast blloku që ndodhet poshtë if nuk zbatohet. Formulimi:

if kushti që duhet plotësuar:
    Blloku ose një formulim i vetëm
else:
    Blloku ose një formulim i vetëm

Si shembull le të vazhdojme po shembullin që nisëm me sipër:

prefiksi = '054'
if prefiksi == '054':
    print 'nga elbasani'
else:
    print 'nuk eshte nga elbasani'

Ndryshoni vlerën e prefiksit në mënyrë që të zbatohet else. Else duhet të ndodhet ne të njejtën shtyllë me if, sepse nëse ndodhet në të njejtin pozicion me formulimin print do të interpretohet si gabim sintakse.

Le të marrim një shembull tjetër për të pasur më të qarte sesi funksionon if else:

x = 5
y = 6
if x > y:
    print 'rend rrites'
    print x, 'eshte me i madh se', y
else:
    print 'rend zbrites'
    print y, 'eshte me i madh se', x

Ne këtë shembull do të zbatohet blloku i formulimeve që ndodhet poshtë else. Pra do të shfaqet ne ekran

rend zbrites
6 eshte me i madh se 5

Nëse do t'i jepni vlerë x dhe y të barabarte dhe do të ndryshoni kushtin if ne x >= y do të zbatohet formulimi poshtë if.

Struktura if-elif-else

Ka raste kur duhet të kontrollojmë më shumë kushte për të zgjidhur problema të ndryshme. Në këtë rast na vjen në ndihmë struktura elif. Struktura elif ndryshon nga struktura else pasi ajo përmban të pakten një kusht për tu zbatuar. Elif është shkurtim i else if. Formulimi është:

if kushti që duhet plotësuar:
    Blloku ose një formulim i vetëm
elif kushti që duhet plotësuar:
    Blloku ose një formulim i vetëm
elif kushti që duhet plotësuar:
    Blloku ose një formulim i vetëm
else:
    Blloku ose një formulim i vetëm

Shembull:

viti = 1789
if viti < 1600:
    print 'deri ne shekullin XVI'
elif viti < 1700:
    print 'shekulli XVII'
elif viti < 1800:
    print 'shekulli XVIII'
elif viti < 1900:
    print 'shekulli XIX'
else:
    print 'shekujt e pythonit'

Ne shembullin e më sipërm kontrollohet për vitet që u përkasin shekujve XVI deri XIX. Nëse vitet janë të ndryshëm nga vitet 0 deri 1899 atëherë zbatohet formulimi i fundit. Mos harroni t'i jepni vlerë ndryshores viti në mënyrë që kodi të zbatohet.

Struktura if-elif-else e shkallëzuar

If i shkallëzuar kontrollon për vërtetësi kushtesh të tjera pas vërtetësisë së kushtit if. Një formulim mund të jetë ky:

if kushti që duhet plotësuar:
    Blloku ose një formulim i vetëm
    if kushti që duhet plotësuar:
        Blloku ose një formulim i vetëm
    elif kushti që duhet plotësuar:
        Blloku ose një formulim i vetëm
    else:
        Blloku ose një formulim i vetëm
elif kushti që duhet plotësuar:
    Blloku ose një formulim i vetëm
else:
    Blloku ose një formulim i vetëm

Shembull:

viti=1499
if viti < 1600:
    print 'deri ne shekullin XVI'
    if viti ==1500:
        print 'fillimi i shek XVI'
    elif viti==1499:
        print 'fundi i shek XV'
    else:
        print 'i perket shekujve I-XVI'
elif viti < 1700:
    print 'shekulli XVII'
elif viti < 1800:
    print 'shekulli XVIII'
elif viti < 1900:
    print 'shekulli XIX'
else:
    print 'shekujt e pythonit'

Nëse analizojmë kodin, shohim se kushti i parë është i vërtetë. Pra së pari do shfaqet në ekran: deri ne shekullin XVI. Më pas shohim se kushti i dytë nuk plotësohet, kështu formulimi: fillimi i shek XVI nuk shfaqet. Kur arrijme tek kushti pasardhes, gjejmë vërtetësi ndaj zbatohet formulimi: fundi i shek XV.

Cikli for dhe while

Cikli for: Ky cikël përsëritet për një varg shenjash dhe për lloje të dhënash të tjera që do t'i mësojmë më vonë, duke shëtitur nëpër këto të dhëna përmes një ndryshoreje indeksuese. Mund të themi se cikli for mund të përdoret ne rastet kur duam që një pjesë kodi të përsëritet një numër të caktuar herësh.

Sintaksa:

for indeks in varg shenjash ose listë:
    Kodi

Shembull:

>>> for i in 'python':
        print 'germa', i
germa p
germa y
germa t
germa h
germa o
germa n

Kur kemi përmendur vargjet e shenjave kemi mesuar si t'i indeksojme ato. Ne këtë rast ndryshorja 'i' që kemi përdorur, lëviz nëpër të gjitha 'kutitë' e fjalës derisa arrin në fund të saj. Në këtë moment cikli perfundon.

Funksioni range

Funksioni range() është i lidhur ngushtë me ciklin for. Ky funksion i gatshëm i pythonit bën të mundur shfaqjen e numrave në progresion aritmetik (në matematikë progresion aritmetik është një sekuencë numrash ku diferenca e dy numrave fqinjë është konstante). Sintaksa është:

range(fillimi, perfundimi, diferenca = 1)

Ky funksion jep si rezultat një listë. Fillimi përcakton nga cili numër do të bëhet nisja dhe përfundimi ndalesën i cili është një më pak se shifra që vendoset. Kalimi ka të bëjë me kapërcimet që do të kryejë fillimi deri tek mbarimi. Psh. nëse do të kemi këtë funksion range(2,7,2) do të marrim këtë listë numrash: 2, 4, 6. Pra fillojme nga 2, ecim me nga 2.

>>> range(2,7,2)
[2, 4, 6]

Nëse kalimi vendoset 0 ndeshemi me një gabim sintakse, nëse nuk vendoset atëherë ai ka automatikisht vlerën 1:

>>> range(3,5)
[3, 4]

Funksioni range() jo detyrimisht mund të përdoret me këtë sintaksë të plotë. Një tjetër sintaksë është:

range(fillimi=0,perfundimi)

Kjo sintaksë jep si rezultat një listë numrash që fillojnë nga zero dhe mbarojnë tek një më pak se përfundimi që është përcaktuar në funksion.

>>> range(3)
[0,1,2]

Nëse sintaksës së fundit i shtojmë edhe kalimin, pra nëse kemi një sintaksë të tillë:

range(fillimi=0,perfundimi,diferenca=1)

nuk do të mernim asnjë pergjigje sepse nuk mund të vendosim diference pa përcaktuar fillimin dhe përfundimin.

Përveç funksionit range në python ka edhe një funksion tjetër të ngjashem me këtë funksion xrange(). Në versionet 3.x të pythonit ky funksion do të zëvendësohet me funksionin range(). xrange() mund të përdoret ne rastet kur kemi lista të vogla. Ky funksion nuk suporton ndarjen ne pjesë të listave të cilat do t'i studiojmë më vonë.

Shembull:

>>> for i in range(1,5):
        n = 2*i-1
        print n
1
3
5
7

Ky shembull shfaq në ekran numrat tek. Ndoshta do të jeni duke menduar se rezultati nuk i përket rangut që percaktuam 1-5 pra duhet të kishim një rezultat 1,3 dhe jo 1,3,5,7. Ne fakt i këtij rangu është indeksi 'i' që shëtit nëpër rangun që percaktuam 1-5. Numri i fundit që shëtit indeksi 'i' është 4 dhe pas veprimeve që kryhen marrim rezultatin n, që është 7. Shembulli tjetër jep si rezultat numrat tek sipas rangut që përcaktohet.

Shembull

>>> for i in range(1,5):
        if i % 2 != 0:
        print i
1
3

Në këtë rast rezultati i përket rangut 1-5, pasi nuk kryhet asnjë veprim që mund të ndryshojë rezultatin përmes indeksit 'i' që shëtit nëpër funksionin range(1,5). Hap pas hapi programi ndjek këtë rruge: indeksi fillon tek numri 1 dhe nëse mbetja e pjesëtimit me 2 është e ndryshme nga 0 (nga matematika dimë se kur mbetja e numrit që pjestohet me dy është e ndryshme nga zero atëherë numri është tek, përndryshe është numër cift.) atëherë printohet numri.

Një tjetër mënyrë e shfaqjes se numrave tek është edhe perdorimi i sintaksës së plotë të funksionit range().

Shembull:

>>> for i in range (1,5,2):
        print i
1
3

Indeksi 'i' fillon nga 1 duke e perfshire ate dhe kryen kapërcime me nga dy.

Cikli while

Nga vetë emri kuptohet se kemi të bejme me një cikël i cili përsëritet për aq kohë sa kushti është i vërtetë. Ky cikël përdoret në rastet kur duam që një pjesë kodi të përsëritet pafundësisht ose kur kemi një kusht për t'u përmbushur.

Sintaksa

while kushti:
    kod

Shembull

>>> n=5
>>> while n > 2:
        print 'Numri',n
        n = n - 1
Numri 5
Numri 4
Numri 3

Programi shfaq në ekran numrat nga 5 deri tek 2 në rend zbritës. Kushti është pikërisht që numrat duhet të jenë më të mëdhenj se 2. Fjalë për fjalë mund të themi: për sa kohë numri i çfarëdoshem n është më i madh se 2 atëherë printoje këtë numër, pas printimit zbriti një numër numrit aktual. Cikli vazhdon deri sa vlera e numrit arrin 2. Rreshti i fundit i jep kuptim ciklit. Ai ndryshon vlerën e ndryshores duke e zvogëluar atë me 1. Në këtë mënyrë kthehet sërish tek rreshti i parë, pra deri kur ndryshorja të marrë vlerën 2.

Shembullin me numrat tek do ta zbatojmë edhe me anë të ciklit while. Kushti do të jetë rangu i numrave:

Shembull:

>>> i = 1
>>> while i < 5:
    if i % 2 != 0:
        print i
        i = i + 1
1
3

Fillimisht kryejmë inicializimin e ndryshores i, më pas vendosim kushtin i cili përcakton përfundimin e rangut të numrave. Pra këto dy rreshta tek cikli for i realizonim me ane të funksionit range(1,5). Më pas gjithçka vazhdon si tek shembujt e ciklit for. Rreshti i fundit nevojitet për të bërë shëtitjen që kryen indeksi tek cikli for. Në rastin tonë ndryshorja i rritet me 1 për çdo numër që është me i vogel se 5. Fjalë për fjalë mund të themi: ndryshorja ka vlerën 1. Për sa kohë kjo ndryshore është me e vogel se 5 zbato kodet e më poshtme. Nëse mbetja e ndryshores me 2 është e ndryshme nga 0 atëherë printo numrin dhe në fund rrit vlerën e ndryshores me 1. Ky rresht bën të mundur qarkullimin e ciklit pra kthimin e rrjedhës së veprimeve nga e para.

Ndërprerja e ciklit - break

Ka shumë raste kur duam që cikli të ndërpritet. Break bën të mundur ndërprerjen e ciklit duke mos ekzekutuar më kodin për të gjithë përsëritjet e mbetura. Le ta ilustrojme me shembull përdorimin e break.

Shembull

>>> for i in range(2,7):
        if i == 5:
            break
        print 'numri ', i
numri  2
numri  3
numri  4

Cikli vazhon me printimin e numrave dhe ndërpritet kur ndryshorja takon numrin 5. Pra kur ndryshorja është e barabartë me 5 cikli ndërpritet. Break funksionon njësoj edhe tek cikli while:

Shembull:

>>> x = 1
>>> while True:
        print 'Printo'
        x = x + 1
        if x == 5:
            break
Printo
Printo
Printo
Printo

Komanda break tek cikli while zakonisht shoqërohet me vlerën True. Pra për sa kohë kemi vlerën True cikli vazhdon pafundësisht. Komanda break ne këtë rast ndërpret ciklin. Vlera True mund të këtë formë tjetër si psh.: while 1 == 1:

Kapercimi i një hapi të ciklit - continue

Fjala kyçe continue bën të mundur që për një përsëritje të caktuar kodi të mos ekzekutohet dhe të vazhdoje me përsëritjen tjetër.

Shembull:

>>> x=0
>>> while x < 10:
        x = x+1
        if x == 7:
            continue
        print x
1
2
3
4
5
6
8
9

Nga shembulli shohim se kur ndryshorja barazohet me 7 ekzekutohet komanda continue duke e shmangur pjesen tjetër të kodit, në këtë rast printimin e saj si edhe vazhdimin e ciklin me ndryshoren tashmë me vlerë 8.

Perfundimi i plotë i ciklit - else

Komanda else ekzekutohet atëherë kur i gjithë cikli ka perfunduar për ndryshe nuk ekzekutohet.

Shembull:

>>> for i in range(5):
        print i
        if i == 2:
            break
    else:
        print 'Cikli u ekzekutua plotesisht'
0
1
2

Ne këtë rast komanda else nuk është ekzekutuar pasi cikli është ndërprerë përmes komandes break që në momentin që ndryshorja ka marrë vlerën 2. Nëse do të donim që komanda else të ekzekutohet duhet që cikli të ekzekutohet plotësisht. Me disa ndryshime do të kishim:

>>> for i in range(5):
        print i
    else:
        print 'Cikli u ekzekutua plotesisht'
0
1
2
3
4
Cikli u ekzekutua plotesisht

Komanda else përdoret edhe tek cikli while i cili ekzekutohet në rastet kur kushti i while është i gabuar. While – else është i ngjashëm me strukturen if – else.

>>> x = 10
>>> while x > 8:
        print 'me te medhenj se 8'
        x = x - 1
    else:
        print 'me te vegjel se 8'
me te medhenj se 8
me te medhenj se 8
me te vegjel se 8