MySQL Java JavaScript PHP Python HTML-CSS C-sharp

Cicluri

Ciclurile permit executarea unei acțiuni în funcție de respectarea unei condiții. În Python există următoarele tipuri de cicluri:

  • while
  • for

Ciclu while

Ciclul while verifică adevărul unei condiții și, dacă aceasta este adevărată, execută instrucțiunile ciclului. Acesta are următoarea definiție formală:

while expresie_condițională:
  instrucțiuni

După cuvântul cheie while se specifică o expresie condițională, iar cât timp această expresie returnează valoarea True, se va executa blocul de instrucțiuni care urmează.

Toate instrucțiunile care aparțin ciclului while se află pe rândurile următoare și trebuie să aibă un indent de la începutul cuvântului cheie while.

number = 1
while number < 5:
   print(f"number = {number}")
   number += 1
print("Programul s-a terminat")

În acest caz, ciclul while se va executa cât timp variabila number este mai mică de 5.

Blocul ciclului constă din două instrucțiuni:

print(f"number = {number}")
number += 1

Observați că acestea au indentări de la începutul operatorului while. Datorită acestui lucru, Python poate determina că aparțin ciclului. În cadrul ciclului, mai întâi se afișează valoarea variabilei number, iar apoi i se atribuie o nouă valoare.

De asemenea, observați că ultima instrucțiune print("Programul s-a terminat") nu are indentare, deci nu aparține ciclului while.

Întregul proces al ciclului poate fi prezentat astfel:

  • Se verifică valoarea variabilei number - dacă este mai mică de 5. Deoarece inițial variabila este egală cu 1, această condiție returnează True și, prin urmare, se execută instrucțiunile ciclului.
  • Instrucțiunile ciclului afișează în consolă linia number = 1. Ulterior, valoarea variabilei number crește cu una - acum este egală cu 2. O singură execuție a blocului de instrucțiuni al ciclului se numește iterație. Astfel, în ciclul nostru se execută prima iterație.
  • Se verifică din nou condiția number < 5. Este încă True, deoarece number = 2, astfel că se execută instrucțiunile ciclului.
  • Instrucțiunile ciclului afișează în consolă linia number = 2. Ulterior, valoarea variabilei number crește din nou cu una - acum este egală cu 3. Astfel, se execută a doua iterație.
  • Se verifică din nou condiția number < 5. Este încă True, deoarece number = 3, astfel că se execută instrucțiunile ciclului.
  • Instrucțiunile ciclului afișează în consolă linia number = 3. Ulterior, valoarea variabilei number crește din nou cu una - acum este egală cu 4. Astfel, se execută a treia iterație.
  • Se verifică din nou condiția number < 5. Este încă True, deoarece number = 4, astfel că se execută instrucțiunile ciclului.
  • Instrucțiunile ciclului afișează în consolă linia number = 4. Ulterior, valoarea variabilei number crește din nou cu una - acum este egală cu 5. Astfel, se execută a patra iterație.
  • Se verifică din nou condiția number < 5. De data aceasta este False, deoarece number = 5, astfel că se iese din ciclu. Ciclul s-a terminat. Mai departe se execută acțiunile definite după ciclu.

Astfel, acest ciclu va efectua patru iterații. La finalul execuției codului, vom obține următorul output în consolă:

number = 1
number = 2
number = 3
number = 4
Programul s-a terminat

Pentru ciclul while, de asemenea, se poate defini un bloc suplimentar else, ale cărui instrucțiuni se execută atunci când condiția devine False:

number = 1
while number < 5:
   print(f"number = {number}")
   number += 1
else:
   print(f"number = {number}. Ciclul s-a terminat")
print("Programul s-a terminat")

În acest caz, mai întâi se verifică condiția și se execută instrucțiunile din while. Apoi, când condiția devine False, se execută instrucțiunile din blocul else. Observați că instrucțiunile din blocul else au, de asemenea, indentări de la începutul construcției ciclului. Astfel, în acest caz vom obține următorul output în consolă:

number = 1
number = 2
number = 3
number = 4
number = 5. Ciclul s-a terminat
Programul s-a terminat

Blocul else poate fi util dacă condiția inițială este False și dorim să efectuăm anumite acțiuni în acest sens:

number = 10
while number < 5:
   print(f"number = {number}")
   number += 1
else:
   print(f"number = {number}. Ciclul s-a terminat")
print("Programul s-a terminat")

În acest caz, condiția number < 5 este inițial False, astfel că ciclul nu execută nicio iterație și trece direct la blocul else.

Ciclu for

Un alt tip de ciclu este construcția for. Acest ciclu parcurge un set de valori, plasează fiecare valoare într-o variabilă și apoi, în cadrul ciclului, putem efectua diverse acțiuni cu acea variabilă. Definiția formală a ciclului for este:

for variabilă in set_de_valori:
   instrucțiuni

După cuvântul cheie for urmează numele variabilei în care vor fi plasate valorile. Apoi, după operatorul in, se specifică setul de valori și două puncte.

Pe linia următoare se află blocul de instrucțiuni al ciclului, care trebuie, de asemenea, să aibă indentări de la începutul ciclului.

La execuția ciclului, Python obține secvențial toate valorile din set și le transmite variabilei. Când toate valorile din set au fost parcurse, ciclul își încheie execuția.

De exemplu, putem considera un șir de caractere ca un set de valori. Să vedem un exemplu:

message = "Salut"

for c in message:
   print(c)

În acest ciclu se definește variabila c, iar după operatorul in este specificată variabila message, care conține șirul "Salut". Astfel, ciclul for va parcurge secvențial toate caracterele din șirul message și le va plasa în variabila c. Blocul ciclului constă dintr-o singură instrucțiune care afișează valoarea variabilei c în consolă. Output-ul programului:

S
a
l
u
t

Adesea, împreună cu ciclul for se utilizează funcția integrată range(), care generează o secvență numerică:

for n in range(10):
   print(n, end=" ")

Dacă funcției range i se transmite un singur parametru, acesta reprezintă valoarea maximă a intervalului de numere. În acest caz, se generează o secvență de la 0 la 10 (exclusiv). Astfel, vom obține următorul output în consolă:

0 1 2 3 4 5 6 7 8 9

De asemenea, funcției range() i se poate transmite valoarea minimă a intervalului:

for n in range(4, 10):
   print(n, end=" ")

Aici se generează o secvență de la 4 la 10 (exclusiv). Output-ul în consolă:

4 5 6 7 8 9

Funcției range() i se poate transmite și un al treilea parametru, care indică incrementul:

for n in range(0, 10, 2):
   print(n, end=" ")

Aici se generează o secvență de la 0 la 10 (exclusiv) cu un increment de 2. Output-ul în consolă:

0 2 4 6 8

Ciclul for poate avea, de asemenea, un bloc suplimentar else, care se execută după finalizarea ciclului:

message = "Salut"
for c in message:
   print(c)
else:
   print(f"Ultimul caracter: {c}. Ciclul s-a terminat")
print("Programul s-a terminat")  # instrucțiunea nu are indentare, deci nu aparține blocului else

În acest caz, vom obține următorul output în consolă:

S
a
l
u
t
Ultimul caracter: t. Ciclul s-a terminat
Programul s-a terminat

Este de remarcat că blocul else are acces la toate variabilele definite în ciclul for.

Cicluri imbricate

Un ciclu poate conține alte cicluri în interiorul său. Să luăm ca exemplu afișarea tabelului înmulțirii:

i = 1
j = 1
while i < 10:
   while j < 10:
       print(i * j, end="\t")
       j += 1
   print("\n")
   j = 1
   i += 1

Ciclul exterior while i < 10: se execută de 9 ori până când variabila i devine egală cu 10. În interiorul acestui ciclu se execută ciclul interior while j < 10:. Ciclul interior se execută, de asemenea, de 9 ori până când variabila j devine egală cu 10. Toate cele 9 iterații ale ciclului interior se execută în cadrul unei singure iterații a ciclului exterior.

În fiecare iterație a ciclului interior se va afișa în consolă produsul numerelor i și j. Apoi valoarea variabilei j crește cu una. Când ciclul interior își termină execuția, valoarea variabilei j este resetată la 1, iar valoarea variabilei i crește cu una și se trece la următoarea iterație a ciclului exterior. Totul se repetă până când variabila i devine egală cu 10. Astfel, ciclul interior se va executa de 81 de ori pentru toate iterațiile ciclului exterior. Output-ul în consolă va fi:

1        2        3        4        5        6        7        8        9        

2        4        6        8        10        12        14        16        18        

3        6        9        12        15        18        21        24        27        

4        8        12        16        20        24        28        32        36        

5        10        15        20        25        30        35        40        45        

6        12        18        24        30        36        42        48        54        

7        14        21        28        35        42        49        56        63        

8        16        24        32        40        48        56        64        72        

9        18        27        36        45        54        63        72        81

În mod similar, se pot defini cicluri for imbricate:

for c1 in "ab":
   for c2 in "ba":
       print(f"{c1}{c2}")

În acest caz, ciclul exterior parcurge șirul "ab" și fiecare caracter este plasat în variabila c1. Ciclul interior parcurge șirul "ba", plasează fiecare caracter din șir în variabila c2 și afișează combinația celor două caractere în consolă. Astfel, vom obține toate combinațiile posibile ale caracterelor a și b:

ab
aa
bb
ba

Ieșirea din ciclu: break și continue

Pentru a controla execuția ciclului, putem folosi operatorii speciali break și continue. Operatorul break iese din ciclu, în timp ce operatorul continue trece la următoarea iterație a ciclului.

Operatorul break poate fi utilizat atunci când în ciclu apar condiții care sunt incompatibile cu continuarea execuției acestuia. Să luăm următorul exemplu:

number = 0
while number < 5:
   number += 1
   if number == 3:    # dacă number = 3, ieșim din ciclu
       break
   print(f"number = {number}")

Aici, ciclul while verifică condiția number < 5. Și cât timp number nu este egal cu 5, se presupune că valoarea variabilei number va fi afișată în consolă. Cu toate acestea, în interiorul ciclului se verifică și o altă condiție: if number == 3. Adică, dacă valoarea variabilei number este egală cu 3, se iese din ciclu cu ajutorul operatorului break. Astfel, vom obține următorul output în consolă:

number = 1
number = 2

Spre deosebire de operatorul break, operatorul continue trece la următoarea iterație a ciclului fără a-l încheia. De exemplu, în exemplul anterior înlocuim break cu continue:

number = 0
while number < 5:
   number += 1
   if number == 3:    # dacă number = 3, trecem la noua iterație a ciclului
       continue
   print(f"number = {number}")

În acest caz, dacă valoarea variabilei number este egală cu 3, instrucțiunile următoare operatorului continue nu vor fi executate:

number = 1
number = 2
number = 4
number = 5

← Lecția anterioară Lecția următoare →