PROGRAMOWANIE I ALGORYTMY

Suma cyfr liczby naturalnej w Python


powrót

W arkuszach maturalnych z informatyki można często spotkać zadanie, w którym należy coś zrobić z cyframi danej liczby. W tym artykule pokażę, w jaki sposób sumować cyfry podanej liczby naturalnej.

Przypadek, gdy liczba wczytana jest jako zmienna typu int

Popatrzmy na przykład. Chcemy zsumować cyfry liczby zapisanej w zmiennej liczba. Postępujemy według schematu:

  1. Ustaw suma = 0
  2. Jeśli liczba > 0 to
    1. pobierz jej cyfrę jedności (*) wykonując operację suma += liczba % 10. Aby uzyskać cyfrę jedności wyznaczamy resztę z dzielenia jej przez 10,
    2. usuń cyfrę jedności z tej liczby (**) wykonując operację liczba //= 10. Aby skrócić cyfrę jedności wykonujemy działanie dzielenia całkowitego przez 10.
  3. Wynik znajduje się w zmiennej suma.
#*****************www.algorytm.edu.pl****************
def suma_cyfr(liczba):
    suma = 0
    while liczba > 0:
        suma += liczba % 10 # (*)
        liczba //= 10 # (**)
    return suma

# część główna programu

liczba = int(input("Podaj liczbę: ")) # zmienna liczba jest typu int
print(f"Suma cyfr liczby {liczba} wynosi", suma_cyfr(liczba))
Przypadek, gdy liczba wczytana jest jako zmienna typu string

W takiej sytuacji musimy zrobić przegląd wszystkich cyfr w kolejności np. od lewej do prawej i każdy znak będący cyfrą zamienić na jej wartość. Inaczej mówiąc zamieniamy kody ASCII cyfr na ich wartości. Poniżej znajduje się wykaz kodów ASCII cyfr:$$0 → 48$$$$1 → 49$$$$2 → 50$$$$...$$$$9 → 57$$Widzimy więc, że wartość ASCII każdej z cyfr należy pomniejszyć o 48 aby uzyskać rzeczywistą wartość cyfry.

W implementacji wykorzystaliśmy funkcję ord(znak), która zwraca kod ASCII danego znaku, w tym przypadku tym znakiem jest cyfra.

#*****************www.algorytm.edu.pl****************
def suma_cyfr(liczba):
    suma = 0
    for cyfra in liczba:
        suma += ord(cyfra) - 48 # pobieram kod ASCII danej cyfry i pomniejszam go o 48
        
    return suma
# część główna programu

liczba = input("Podaj liczbę: ") # zmienna liczba jest typu string
print(f"Suma cyfr liczby {liczba} wynosi", suma_cyfr(liczba))