Python pentru începători

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.

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.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.

Exersează cu o problemă →