Repetarea cu for și range în Python
Învață for și range în Python prin suma pătratelor de la 1 la n. Înțelege capătul exclus, acumulatorul și cazul fără iterații, cu teste explicate.
În acest material
Bucla for execută același bloc pentru fiecare element al unei secvențe de valori. Obiectul range descrie o progresie de întregi fără să construiască obligatoriu o listă cu toate valorile. Îl folosim când știm ce numere vrem să parcurgem. Exercițiul nostru calculează suma pătratelor numerelor de la 1 la n, inclusiv.
Ce primește și ce afișează programul
Citim un întreg n între 0 și 10000. Afișăm 1² + 2² + ... + n² pe o singură linie. Pentru n=0, suma nu conține niciun termen și este definită ca zero. Intrarea este validă. Folosim un acumulator, adică o variabilă care păstrează rezultatul parțial după fiecare pas al parcurgerii.
Exemplu explicat pas cu pas
Pentru n=3, începem cu total=0. La k=1 adăugăm 1×1 și total devine 1. La k=2 adăugăm 4 și obținem 5. La k=3 adăugăm 9 și obținem 14. Bucla se termină, apoi afișăm o singură dată totalul. Valorile intermediare sunt utile pentru explicație, dar nu sunt cerute la ieșirea programului.
Pentru n egal cu trei, pătratele 1, 4 și 9 produc totalurile 1, 5 și 14.Mărește schema ↗
Cum scriem soluția
Scriem range(1, n+1), deoarece prima limită este inclusă, iar limita stop este exclusă. Pentru n=3, valorile sunt 1, 2 și 3, fără 4. În corpul buclei, total += k * k înseamnă că înlocuim total cu suma dintre valoarea lui curentă și pătratul lui k. Instrucțiunea print rămâne în afara blocului indentat al buclei.
De ce obținem rezultatul cerut
Înainte de prima iterație, total reprezintă suma fără termeni, egală cu zero. După iterația pentru k, el conține suma pătratelor de la 1 la k: acest fapt se păstrează fiindcă adăugăm exact următorul termen. La terminare, ultimul k prelucrat este n, astfel totalul este cel cerut. Pentru n=0, range(1,1) este gol și inițializarea oferă direct răspunsul corect.
Cost și limite
Bucla execută n iterații, deci timpul este O(n), considerând operațiile aritmetice mici din limitele problemei. Nu păstrăm toate pătratele într-o listă, iar memoria auxiliară pentru starea buclei este constantă. Întregii Python pot crește în dimensiune când valorile devin foarte mari, dar aici limita este explicită.
Greșeli pe care le poți verifica
Range(n) începe de la zero și se oprește înainte de n; nu este același lucru cu range(1,n+1). Dacă pui total=0 în interiorul buclei, pierzi suma anterioară la fiecare pas. Dacă indentezi print în buclă, afișezi totalurile parțiale în locul unui singur rezultat. Range acceptă și un pas, de exemplu range(2,7,2) produce 2, 4, 6; pasul zero este invalid.
Program complet Python 3
n = int(input())
total = 0
for k in range(1, n + 1):
total += k * k
print(total)
Exersează
Pentru n=1, răspunsul este 1. Pentru n=4, răspunsul este 30. Verifică n=0 separat, fără să presupui că bucla intră măcar o dată. Ca extensie, descrie cum ai parcurge valorile 5, 4, 3, 2, 1: range(5,0,-1), unde limita zero este exclusă. Nu schimba programul înainte de a prezice rezultatul fiecărei variante.
Continuă parcursul
Pentru expresii numerice, recitește Variabile și numere în Python: int, float și conversii. Pentru repetare controlată de o condiție, continuă cu Bucla while în Python: condiție și terminare. Pentru parcurgerea elementelor unei colecții, vezi Liste în Python: indici, parcurgere și modificare.
Pentru definițiile limbajului, consultă documentația oficială Python. Exemplele și explicațiile de aici sunt originale, construite pentru acest parcurs.
Întrebări frecvente
De ce scriem n+1 în range?
Capătul stop este exclus. Pentru a include valoarea n, alegem stop egal cu n+1.
Ce se întâmplă dacă range este gol?
Corpul buclei nu se execută deloc. Variabilele inițializate înaintea buclei își păstrează valorile.
Range construiește o listă cu toate numerele?
Nu. Este un obiect care descrie secvența de întregi; lista ar fi creată explicit prin list(range(...)).
Un pas mai departe
Autentifică-te pentru a păstra progresul în cont.