Am văzut în cadrul episodului anterior cum pot lua programele decizii în funcție de circumstanțe, cum se execută o instrucțiune sau alta în funcție de anumite condiții. În cadrul acestui episod vom continua prezentarea modului în care sunt luate decizii.
Mai multe variante
Până acum doream să se execute anumite instrucțiuni dacă o anumită condiție era adevărată și altele dacă era falsă. Dar, ce am face dacă nu avem doar două variante, ci mai multe.
Să ne imaginăm o situție în care dorim să scriem cifrele folosind litere. Avem o variabilă c care ar trebui să conțină o cifră. Dacă valoarea este 1, ar trebui să scriem string-ul "unu"; dacă valoarea este 2, ar trebui să scriem "doi" și așa mai departe. Variabila conține numere, deci probabil nu va avea neapărat valori cuprinse între zero și nouă; în cazul în care valoarea nu este o cifră, am vrea să scriem textul "nu este o cifră".
Cea mai simplă variantă este să comparăm, pe rând, valoarea variabilei c cu fiecare cifră și să scriem mesajul corespunzător în cazul în care identificăm cifra; începem comparând cu zero; dacă am găsit valoarea scriem textul "zero"; dacă nu am găsit-o încercăm să comparăm cu unu și așa mai departe; dacă am ajuns la nouă și tot nu am găsit cifra, putem concluziona că nu avem o cifră. Codul ar arăta astfel:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
if c == 0: print("zero") else: if c == 1: print("unu") else: if c == 2: print("doi") else: if c == 3: print("trei") else: if c == 4: print("patru") else: if c == 5: print("cinci") else: if c == 6: print("șase") else: if c == 7: print("șapte") else: if c == 8: print("opt") else: if c == 9: print("nouă") else: print("nu este o cifră") |
Am folosit blocuri de instrucțiuni chiar dacă avem o singură instrucțiune și nu arată prea bine... Avem aici o succesiune if, else, if, else, if, else, etc. În situația în care pe ramura else avem doar un if, putem să înlocuim secvența else: if cu elif, o instrucțiune mai simplă. Se poate vedea că arată mult mai bine:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
if c == 0: print("zero") elif c == 1: print("unu") elif c == 2: print("doi") elif c == 3: print("trei") elif c == 4: print("patru") elif c == 5: print("cinci") elif c == 6: print("șase") elif c == 7: print("șapte") elif c == 8: print("opt") elif c == 9: print("nouă") else: print("nu este o cifră") |
O scurtătură
De multe ori dorim să verificăm o anumită condiție booleană și, în funcție de rezultatul verificării, să atribuim unei variabilă o valoare sau alta. De exemplu, am putea avea o variabilă nr care conține numere întregi și am dori să atribuim unei variabile s care conține string-uri valoarea "negativ" dacă numărul respectiv este mai mic decât zero și valoarea "nenegativ" în caz contrar (numărul este mai mare sau egal cu zero).
Putem face asta simplu:
1 2 3 4 |
if nr < 0: s = "negativ" else: s = "nengativ" |
Totuși, situația este atât de frecventă încât limbajele oferă o prescurtare. În alte limbaje această prescurtare este vin sub forma unui operator, însă în Python, este o expresie condițională, scrisă un pic diferit. Următoarea instrucțiune este echivalentă cu secvența anterioară:
1 |
s = "negativ" if nr < 0 else "nenegativ" |
După cum puteți observa, este un if, scris mai simplu, care chiar are sens citit în limba engleză. Tradus, ar suna cam așa: variabila s are valoarea "negativ" dacă n este mai mic decât , în caz contrar va avea valoarea nenegativ.
Va urma
În următorul episod vom introduce conceptul de funcție. Vom vedea cum putem grupa instrucțiunile și cum putea evita să scriem același lucru de mai multe ori.