Bucla while în Python: condiție și terminare
Înțelege bucla while în Python prin suma cifrelor unui număr. Urmărește condiția, progresul și oprirea, inclusiv pentru zero și valori negative.
În acest material
Bucla while repetă un bloc cât timp o condiție este adevărată. Condiția se verifică înaintea fiecărei execuții, inclusiv înaintea primei. Pentru a evita repetarea fără sfârșit, trebuie să explicăm ce se schimbă și de ce vom ajunge la o condiție falsă. Exercițiul extrage cifrele unui număr, una câte una, de la dreapta la stânga.
Ce primește și ce afișează programul
Citim un întreg n între -1000000000000 și 1000000000000. Afișăm suma cifrelor reprezentării sale zecimale, fără a considera semnul minus drept cifră. Pentru zero, suma este zero. Intrarea este validă. Folosim abs(n) pentru valoarea absolută, adică numărul fără semnul negativ, și păstrăm rezultatul într-o variabilă separată.
Exemplu explicat pas cu pas
Pentru n=-507, variabila ramas pornește de la 507. Restul împărțirii la 10 este 7, deci total devine 7, iar împărțirea întreagă la 10 lasă 50. Următoarea cifră este 0, apoi rămâne 5. Ultima cifră este 5, totalul devine 12, iar ramas ajunge la zero. Condiția ramas > 0 devine falsă și bucla se oprește.
Pentru 507, cifrele extrase sunt 7, 0 și 5, iar suma finală este 12.Mărește schema ↗
Cum scriem soluția
Inițializăm total cu zero înaintea buclei. În fiecare iterație, cifra = ramas % 10 obține ultima cifră. Adunăm cifra, apoi folosim ramas //= 10 pentru a elimina ultima cifră. Operatorul %= nu este necesar aici: vrem să păstrăm restul într-o variabilă și să micșorăm numărul prin câtul împărțirii, două operații distincte.
De ce obținem rezultatul cerut
După fiecare iterație, total conține suma cifrelor deja eliminate, iar ramas conține exact cifrele încă neprelucrate. Identitatea x = 10 × (x // 10) + x % 10, pentru x nenegativ, justifică separarea ultimei cifre. Când ramas devine zero, toate cifrele inițiale au contribuit. Pentru intrarea zero, corpul nu se execută și totalul inițial este chiar suma cerută.
Cost și limite
Numărul iterațiilor este numărul cifrelor valorii absolute pentru o intrare nenulă, deci timpul este O(d), unde d desemnează acest număr de cifre. Memoria auxiliară constă în câteva valori numerice. La limitele problemei, numărul pașilor este foarte mic.
Greșeli pe care le poți verifica
Dacă omiți împărțirea la 10, condiția rămâne adevărată pentru orice intrare nenulă și programul nu se termină. Dacă nu aplici abs, o condiție n > 0 ar ignora toate intrările negative. Nu modifica operatorul // în /: ai obține valori float și nu ai mai elimina cifre întregi prin aceeași regulă.
Program complet Python 3
n = int(input())
ramas = abs(n)
total = 0
while ramas > 0:
cifra = ramas % 10
total += cifra
ramas //= 10
print(total)
Exersează
Pentru 1000, suma este 1, deoarece zerourile contribuie cu zero. Pentru 9, suma este 9 și bucla rulează o singură dată. Pentru -99, suma este 18. Prezice numărul pașilor pentru 1000 și explică de ce prezența zerourilor nu reduce numărul de cifre care trebuie eliminate.
Continuă parcursul
Pentru operatorii numerici, recitește Variabile și numere în Python: int, float și conversii. Pentru evaluarea condițiilor, vezi Condiții în Python: if, elif și else. Pentru o parcurgere cu limite cunoscute, compară cu Repetarea cu for și range în Python.
Pentru definițiile limbajului, consultă documentația oficială Python. Exemplele și explicațiile de aici sunt originale, construite pentru acest parcurs.
Întrebări frecvente
While se execută obligatoriu măcar o dată?
Nu. Dacă prima evaluare a condiției este falsă, corpul este sărit complet.
Cum demonstrăm că bucla se termină?
Ramas este nenegativ și, când este pozitiv, împărțirea întreagă la 10 îl micșorează strict până la zero.
De ce folosim valoarea absolută?
Cerința adună cifrele fără semn. Transformarea la un număr nenegativ permite folosirea uniformă a operațiilor modulo și împărțire întreagă.
Un pas mai departe
Autentifică-te pentru a păstra progresul în cont.