Suma cyfr w liczbie

0

Proszę o pomoc, mam zadanie napisać program który policzy sumę cyfr w podanej przez użytkownika programu liczbie. Widziałam już mnóstwo podobnych pytań i odpowiedzi lecz w każdej z nich pojawił się program którego któs zrobił za pomocą modulo, czy byłby ktoś w stanie zrobić to bez użycia modulo ?

Nauczyciel tłumaczył mi, żebym zrobiła to dzieląc podaną liczbę przez np 10 i wyłapywała z niej liczbę dziesiątek i jedności.

Będe mega wdzięczna za pomoc

4

Posplitować stringa na pojedyńcze elementy, przecastować na inta i zsumować chociażby przy użyciu sum(). Modulo jest jednak bardziej eleganckie i w wielu przypadkach bardziej wydajne.

2
def suma_cyfr(liczba):
    suma = 0
    while liczba > 0:
        suma += liczba % 10
        liczba //= 10
    return suma

if __name__ == "__main__":
    liczba = int(input("Podaj liczbę: "))
    wynik = suma_cyfr(liczba)
    print("Suma cyfr w podanej liczbie to:", wynik)

natomiast to co Ledi podał to możesz zmienić w samej suma_cyfr na taką

def suma_cyfr(liczba):
    return sum(map(int, str(liczba)))
1
liczba = int(input("Podaj liczbę: "))
wynik = 0
for _ in range(0, liczba):
    wynik += liczba - (liczba // 10) * 10        
    liczba //= 10
print(f"{wynik}")
3

Do takich prostych zadań idealnie nadaje się ChatGPT:
https://chat.openai.com/share/f2685983-6452-41dc-abc4-2cb1914557d3

2
print(f'Sum of digits:\n{sum(list(map(int, str(input("Enter number:")))))}')
3

Ja bym tam wydzielił kod wypluwający kolejne cyfry liczby do generatora, co prowadzi do ładnego i czytelnego API:

>>> def digits(n):
...     while n > 0:
...         yield n % 10
...         n //= 10
... 
>>> 
>>> sum(digits(21321))
9
2

@Spearhead zdecydowanie ladne ale jak sie tak wglebic to jest pare wad: dla zera i dla ujemnych nie zwraca nic a dla dodatnich zwraca cyfry w odwrotnej kolejnosci wiec tak naprawde taka funkcja jest przydatna tylko dla tego scenariusza. zeby nie bylo ze tylko marudze to moj paskudny pomysl:

def sum_digits(n: int) -> int:
	n, r = divmod(abs(n), 10)
	return n and r + sum_digits(n) or r
0

@flashgirl: słusznie! Zauważ jednak, że programowanie w ten sposób ma tę zaletę, że można wydzieloną funkcję iteracyjnie poprawiać - w poważnym programie z odpowiednimi unit testami i z zachowaniem TDD - podczas gdy cała reszta kodu programu pozostaje niezmieniona.

0

Dzięki za pomoc jednak niezupełnie o to mi chodziło. Już sobie poradziłam, pokazuje gdyby ktoś kiedyś potrzebował

0

Nie oto Ci chodziło a zrobiłaś dokładnie tak samo XD

0
twoj Stary napisał(a):

Dzięki za pomoc jednak niezupełnie o to mi chodziło. Już sobie poradziłam, pokazuje gdyby ktoś kiedyś potrzebował

Nikt nie potrzebuje screenshota kodu.
Kod wklejamy jako tekst!

1

Jeszcze popracowałem z kolegą i dwa rozwiązania dodaje:

print(f'Sum of digits:\n{sum(int(digit) for digit in input("Enter number:"))}')
def digsum(number):
    # Initialize the sum
    total_sum = 0

    # Iterate through the number, taking two digits at a time
    while number > 0:
        # Extract two digits
        #two_digits = number % 100
        # Move to the next two digits
        #number //= 100
        number, two_digits = divmod(number, 100)
        # Add the two digits to the sum
        #total_sum += two_digits % 10 + two_digits // 10
        # Use divmod to get quotient and remainder, then add to the sum
        quotient, remainder = divmod(two_digits, 10)
        total_sum += quotient + remainder
    return total_sum

# Example usage
number = 201111111111111111111111111111111740951104 #64
result = digsum(number)
print(f"The sum of digit components of {number} is: {result}")
1
gk1982 napisał(a):
print(f'Sum of digits:\n{sum(list(map(int, str(input("Enter number:")))))}')

można też po prostu:

print(f'Sum of digits:\n{sum(map(int,input("Enter number:")))}')

1 użytkowników online, w tym zalogowanych: 0, gości: 1