For Loops
Bun venit la probabil una dintre cele mai importante lecții pe care le putem învăța în lumea programării - bucla for
De ce este importantă? Să presupunem că vrem să afișăm toate numerele de la 0 la 10
Am putea face așa
print("1")
print("2")
print("3")
print("4")
print("5")
print("6")
print("7")
print("8")
print("9")
print("10")
E clar că am repetat codul, iar asta este complet interzis. De ce? Ei bine, ce se întâmplă dacă vrem să afișăm toate numerele de la 1 la 1000? În niciun caz nu vrem 1000 de instrucțiuni print() pe care să le modificăm manual
Aici intervine puterea buclei for
i = 1
for i in range(1, 1000):
print(i)
Aceasta va afișa toate numerele de la 1 la 999. De ce nu include 1000? range() este o funcție care există deja în Python și ne spune de unde vrem să începem și unde vrem să ne oprim - 1. Adică, range(1, 1000) înseamnă de la 1 la 999. Dacă vrem de la 1 la 1000, putem spune range(1, 1001)
i = 1
for i in range(1, 1001):
print(i)
Acum vedem toate numerele de la 1 la 1000
Hai să explicăm acest cod
i = 1
for se uită la i și verifică variabila i de mai înainte. Știe că i = 1, așa că pornește de acolo. Apoi for se uită mai departe și vede range(1, 1001). Știe că asta înseamnă toate numerele de la 1 la 1000 (1001 - 1), așa că ia i și la fiecare iterație îl mărește cu 1, ca i = i + 1
Mai întâi, i = 1, apoi intră în bloc și îl afișează, după care automat face i = i + 1
Acum i = 2, îl afișează, apoi din nou face i = i + 1
Acum i = 3, îl afișează, apoi face din nou i = i + 1
... și tot așa :). Nu e fascinant? Practic facem calculatorul să facă această repetiție pentru noi
in este un cuvânt cheie. Îi spune lui Python să ia variabila i și să o verifice cu range()
Mai multe despre range()
Până acum am dat lui range() două numere - de unde începe și unde se oprește - 1. Dar range() este mai flexibil de atât
Dacă îi dăm un singur număr, Python presupune că vrem să începem de la 0
for i in range(5):
print(i)
Asta afișează 0, 1, 2, 3, 4 - adică 5 numere pornind de la 0
Putem da și un al treilea număr, numit pas. El spune cu cât sărim de la o valoare la alta. De exemplu, dacă vrem doar numerele pare de la 0 la 10
for i in range(0, 11, 2):
print(i)
Asta afișează 0, 2, 4, 6, 8, 10. În loc de i = i + 1, acum for face i = i + 2 la fiecare pas
Combinăm for cu variabile
Îți amintești de variabile? Le putem folosi împreună cu for ca să strângem un rezultat pe parcursul buclei
Să presupunem că vrem să adunăm toate numerele de la 1 la 5. Avem nevoie de o variabilă în care să ținem totalul. O declarăm înainte de buclă, cu valoarea 0, și o creștem la fiecare iterație
total = 0
for i in range(1, 6):
total = total + i
print(total)
Hai să urmărim ce se întâmplă:
- la început total = 0
- i = 1 → total = 0 + 1 = 1
- i = 2 → total = 1 + 2 = 3
- i = 3 → total = 3 + 3 = 6
- i = 4 → total = 6 + 4 = 10
- i = 5 → total = 10 + 5 = 15
La final, print(total) afișează 15
Foarte important: print(total) este în afara buclei (nu are spațiile din față). Dacă l-am pune înăuntru, am vedea totalul după fiecare pas, nu doar la sfârșit
total = 0
for i in range(1, 6):
total = total + i
print(total)
Acum am mutat print(total) în interiorul buclei, așa că afișează totalul la fiecare iterație
1
3
6
10
15
Combinăm for cu if
Deja știm if. Ce se întâmplă dacă îl punem în interiorul unei bucle for? Atunci Python verifică condiția la fiecare iterație
De exemplu, vrem să afișăm doar numerele pare de la 1 la 10
for i in range(1, 11):
if i % 2 == 0:
print(i)
La fiecare valoare a lui i, intrăm în buclă și verificăm if i % 2 == 0 (adică „restul împărțirii la 2 este 0", deci numărul e par). Dacă da, îl afișăm. Dacă nu, sărim peste și mergem mai departe
Aceasta afișează 2, 4, 6, 8, 10
Observă cele două niveluri de spațiere: if este indentat o dată (e în interiorul lui for), iar print este indentat de două ori (e în interiorul lui if)
Misiune: Colectorul de Energie
Stația adună energie de la o serie de celule numerotate de la 1 la celule. Doar celulele cu număr impar funcționează, restul sunt defecte.
Fă-ți o variabilă numită celule pentru câte celule sunt (alege ce valoare vrei), apoi scrie un program care:
- dacă sunt 0 celule → afișează
Fara celule - dacă este 1 celulă → afișează
O singura celula - altfel → parcurge cu for numerele de la 1 la
celule, adună doar numerele impare într-o variabilătotalși afișeazătotal
Exemple
Cu 6 celule, cele impare sunt 1, 3, 5, deci programul afișează
9
Cu 0 celule afișează
Fara celule
Cu 1 celulă afișează
O singura celula