Cifrele unui număr natural
Numere naturale formate din exact 3 cifre
Pentru a accesa cifrele unui număr natural folosim operatorii
% și
//. Operatorul
% calculează restul împărțirii, iar operatorul
// calculează câtul împărțirii întregi.
Urmăriți simularea de mai jos pentru a observa, pas cu pas, cum sunt
extrase cifra unităților, cifra zecilor și cifra sutelor dintr-un
număr natural format din trei cifre:
1
unitati = n % 10
2
zeci = n // 10 % 10
3
sute = n // 100
Pregătit
0/3
Apasă „Pornește” sau „Pasul următor”.
Observații
-
Operatorul
% calculează restul împărțirii,
iar operatorul // calculează câtul împărțirii întregi.
-
Expresia
n % 10 determină întotdeauna
ultima cifră a unui număr natural.
-
Expresia
n // 10 elimină ultima cifră a numărului.
-
Numărul poate fi reconstruit folosind formula:
n = sute * 100 + zeci * 10 + unitati.
-
Operațiile nu modifică valoarea variabilei
n decât dacă
rezultatul este atribuit din nou acesteia.
Numere naturale formate din n cifre
În exemplul anterior am știut de la început că numărul are exact trei cifre și am putut extrage separat cifra unităților, cifra zecilor și cifra sutelor. Dar ce facem dacă numărul poate avea
oricâte cifre?
În acest caz, nu mai putem scrie câte o instrucțiune pentru fiecare poziție. Avem nevoie de un algoritm care să funcționeze indiferent dacă numărul are
3, 5 sau 100 de cifre.
Ideea este simplă:
extragem ultima cifră cu % 10, apoi
o eliminăm cu // 10. Repetăm aceste operații cât timp numărul mai conține cifre.
while n > 0:
cifra = n % 10 # 1. Extragem ultima cifră
print(cifra) # 2. Facem ceva cu ea (ex: o afișăm)
n = n // 10 # 3. Taiem ultima cifră
De exemplu, pentru
n = 5837, valorile obținute sunt:
| n |
n % 10 |
Cifra extrasă |
n // 10 |
| 5837 |
7 |
7 |
583 |
| 583 |
3 |
3 |
58 |
| 58 |
8 |
8 |
5 |
| 5 |
5 |
5 |
0 |
Observăm că cifrele sunt extrase de la dreapta la stânga:
7,
3,
8,
5.
Exemplu ➕ Suma cifrelor
Să calculăm suma cifrelor unui număr:
n = int(input("n = "))
s = 0
while n > 0:
cifra = n % 10
s = s + cifra
n = n // 10
print("Suma cifrelor este:", s)
Pentru
n = 58321, se va calcula
5+8+3+2+1 și se va afișa
19.
Atenție! ⚠️ La finalul programului, valoarea lui
n a fost alterată. Căt rămâne de fapt?
🧠 Prin aceeași idee putem rezolva numeroase probleme:
numărul cifrelor,
produsul cifrelor,
cifra maximă sau minimă,
numărul cifrelor pare,
verificarea apariției unei cifre și multe altele.
Hack cu string
În Python există și o metodă foarte rapidă de a lucra cu cifrele unui număr: îl putem transforma temporar într-un șir de caractere, folosind
str().
De exemplu:
n = 5837
s = str(n)
print(s)
Variabila
s va conține textul "
5837". Din acest moment, fiecare cifră poate fi accesată exact ca un caracter dintr-un șir, cum suntem deja obișnuiți:
print(s[0]) # 5
print(s[1]) # 8
print(s[-1]) # 7
Dacă vrem să parcurgem toate cifrele:
n = 5837
for cifra in str(n):
print(cifra)
Atenție: variabila
cifra este aici de tip
str, nu
int. Dacă vrem să facem calcule cu ea, o transformăm în număr:
n = 5837
s = 0
for cifra in str(n):
s = s + int(cifra)
print(s)
Rezultatul va fi:
23
Putem scrie chiar și o variantă foarte compactă:
s = sum(int(cifra) for cifra in str(n))
💡
De ce este un „hack”? Pentru că nu mai extragem cifrele matematic, cu
% 10 și
// 10, ci privim numărul ca pe o succesiune de caractere.
Astfel, unele probleme devin foarte ușor de rezolvat:
n = 58321
print(len(str(n))) # numărul cifrelor
print(max(str(n))) # cifra maximă
print(min(str(n))) # cifra minimă
print(str(n).count("8")) # de câte ori apare cifra 8
Putem verifica rapid chiar și dacă o anumită cifră apare în număr:
n = 58321
if "8" in str(n):
print("Cifra 8 apare în număr.")
Important ⚠️ Metoda cu
str() este foarte comodă și „pythonică”, dar metoda matematică rămâne importantă pentru înțelegerea algoritmilor clasici
de prelucrare a cifrelor. Merită să le cunoașteți pe amândouă!
Cărțile editurii noastre
O parte dintre manualele și culegerile de probleme se găsește și [
în format electronic]
securizat sub formă
de fișier *.pdf.
"
O cameră fără cărţi este ca un corp fără suflet."
(G. K. Chesterton)
Cursanții au mai cumpărat ...
[
vezi lista completă a cărților]