Перейти к содержимому

Как посчитать сумму цифр в строке python

  • автор:

Программа нахождения суммы всех цифр данного числа

Данная программа должна вывести сумму всех цифр, из которых состоит введенное число.

Решение задачи

  1. Возьмем введенное число и запишем его в переменную.
  2. При помощи цикла while извлечем каждую цифру из данного числа и запишем их сумму в отдельную переменную.
  3. Выведем полученный результат на экран.
  4. Конец.

Исходный код

Ниже дан исходный код для вывода суммы всех цифр, из которых состоит данное число. Результаты работы программы также даны ниже.

n = int(input("Введите число:")) tot = 0 while(n > 0): dig = n % 10 tot = tot + dig n = n//10 print("Сумма цифр равна:", tot)

Объяснение работы программы

  1. Пользователь вводит число, которое записывается в переменную.
  2. Используем цикл while . Цифры извлекаются из числа при помощи оператора деления по модулю, начиная с конца.
  3. Далее записываем эту цифру в отдельную переменную и потом, в процессе работы цикла, прибавляем к ней остальные цифры числа.
  4. После суммирования цифра «уничтожается» при помощи оператора целочисленного деления.
  5. Когда число становится равным 0 (все цифры были обработаны и «уничтожены»), цикл завершает свою работу.
  6. После этого полученная сумма выводится на экран.

Результаты работы программы

Пример 1: Введите число:1892 Сумма цифр равна: 20 Пример 2: Введите число:157 Сумма цифр равна: 13

Python: Вычислить сумму цифр числа

Юн Сергей

Простой и избыточный вариант, для понимания логики вычисления суммы цифр числа.

# Вычисление суммы цифр трехзначного числа # Простой вариант для понимания логики вычисления import random a=random.randint(100, 999) print ('Случайное число =',a) s=a%10 a=a//10 print ('Первый проход, s =',s, 'a =',a) s=s+a%10 a=a//10 print ('Второй проход, s =',s, 'a =',a) s=s+a%10 a=a//10 print ('Третий проход, s =',s, 'a =',a) print ('Сумма цифр числа = ',s)

2. Вариант (цикл For)

# Вычисление суммы цифр трехзначного числа # Простой вариант для понимания логики вычисления import random a=random.randint(100, 999) # Получаем случайное трехзначное число из диапазона 100-999 print ('Случайное число "a" =',a) s=0 for i in range (3): s,a = s + a%10, a//10 print (i+1, ' проход: s = ',s, ', a = ',a, sep='') print ('Сумма цифр числа "a" = ',s)

3. Мини

import random a=random.randint(100, 999) print ('Случайное число "a" =',a) print (a//100 + a//10%10 + a%10)

4. Через map и sum

import random a=random.randint(100, 99999) b = map(int, str(a)) print('Дано число <>, сумма знаков числа = <>'. format(a, sum(b)))

Найти сумму цифр числа в Python

Для изу­че­ния ба­зо­вых кон­струк­ций язы­ка Python пре­по­да­ва­те­ли обыч­но все­гда пред­ла­га­ют про­стые и по­нят­ные за­да­чи школь­но­го уров­ня. Но, не смот­ря на это, та­кие за­да­чи по­лез­ны и учат не толь­ко язы­ку, но и уме­нию ре­а­ли­зо­вы­вать ал­го­рит­мы. Рас­смот­рим тут од­ну из та­ких за­дач.

Да­но це­лое по­ло­жи­тель­ное чис­ло. Най­ти сум­му цифр это­го чис­ла.

Рас­смот­рим несколь­ко ва­ри­ан­тов ре­ше­ния этой за­да­чи. Про­стей­ший и самій оче­вид­ный спо­соб ре­ше­ния за­да­чи со­сто­ит в том, чтобы по­лу­чить каж­дую из цифр, со­став­ля­ю­щих дан­ное чис­ло. Для это­го по­сле­до­ва­тель­но бу­дем де­лить ис­ход­ное чис­ло n на 10 на­це­ло (на­хо­дит раз­ря­ды чис­ла). Де­ле­ние бу­дем вы­пол­нять в цик­ле, в ко­то­ром сра­зу же и бу­дем на­кап­ли­вать тре­бу­е­мую сум­му цифр — suma, а так­же за­по­ми­нать ре­зуль­тат де­ле­ния для но­вой ите­ра­ции цик­ла в ту же пе­ре­мен­ную n. Де­ле­ние (цикл) про­дол­жа­ет­ся по­ка чис­ло n не до­стигнет нуле­во­го зна­че­ния.

n=2021 suma = 0 while n > 0: suma = suma + n % 10 n //= 10 print(‘Suma =’, suma)

Но, мож­но обой­тись и без де­ле­ния. Для это­го за­дан­ное чис­ло n пре­об­ра­зу­ем в стро­ку s, а за­тем пе­ре­бе­рем в цик­ле по­сле­до­ва­тель­но все сим­во­лы (циф­ры) этой стро­ки. Но, чтобы их мож­но бы­ло сло­жить, они долж­ны быть пре­об­ра­зо­ва­ны в чис­ло­вые зна­че­ния — int(c). И даль­ше оста­ет­ся толь­ко вос­поль­зо­вать­ся функ­ци­ей sum(), чтобы сло­жить эти все циф­ры и по­лу­чить сум­му цифр чис­ла — suma.

n=2021 s=str(n) suma= sum(int(c) for c in s) print(‘Suma =’, suma)

Но, нам это­го ма­ло и мы идем даль­ше. А мож­но ли при ре­ше­нии этой за­да­чи из­ба­вить­ся от цик­ла. По­про­бу­ем. Ре­ше­ние бу­дет по­хо­же на преды­ду­щее, но цикл за­ме­ним встро­ен­ной функ­ци­ей map() при­ме­ня­е­мой к каж­до­му эле­мен­ту неко­то­ро­го объ­ек­та. В на­шем слу­чае это сим­во­лы стро­ки str(n), по­лу­чен­ной пре­об­ра­зо­ва­ни­ем ис­ход­но­го чис­ла в стро­ку и ее со­став­ля­ю­щих сим­во­лов в це­лые чис­ла.

n=2021 suma=sum(map(int, str(n))) print(‘Suma =’, suma)

Ес­ли код это­го при­ме­ра не со­всем по­ня­тен, то про­ще бу­дет по­нять сле­ду­ю­щий код — там ис­поль­зу­ем пре­об­ра­зо­ва­ние чис­ла в спи­сок из цифр и даль­ше про­хо­дим­ся по нему функ­ци­ей map()

как посчитать сумму цифр в строке

Вам нужно проверить можно ли из символа сделать число, это делается так:

elem.isdigit() 

вам надо найти сумму а не количество:

k = k + 1 
k += int(elem) 

код должен быть таким:

str1=str(input()) print(str1) k=0 for elem in str1: if elem.isdigit(): k += int(elem) print(elem) print("k=" ,k) 

Отслеживать
ответ дан 6 ноя 2020 в 10:04
19.6k 6 6 золотых знаков 22 22 серебряных знака 56 56 бронзовых знаков

import re a = input('') digits = re.findall("\d", a) if not digits: print('Цифры не найдены') else: print(eval('+'.join(digits))) 

Отслеживать
ответ дан 6 ноя 2020 в 13:39
Edward Grachev Edward Grachev
482 3 3 серебряных знака 5 5 бронзовых знаков

    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.8.3130

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *