Подсчитать сумму цифр числа

s = '<' + '1' * 10 + '2' * 20 + '3' * 30
while ('>1' in s) or ('>2' in s) or ('>3' in s):
    s = s.replace('>1', '22>', 1)
    s = s.replace('>2', '2>', 1)
    s = s.replace('>3', '1>', 1)

print(s)

на выводе получаем число длинное 111111111122222222222222222222333333333333333333333333333333 как мне найти его сумму с помощью кода


Ответы (7 шт):

Автор решения: magistar

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

s = '111111111122222222222222222222333333333333333333333333333333'
summa = 0
for i in s:
    if i.isdigit():
        summa += int(i)
print(summa)

Функция isdigit нужна для проверки на то, что символ - это цифра. Если в строке окажется < или ещё какие-то другие знаки, то ошибки не возникнет.

Можно сделать более короткий вариант, используя генератор списка:

print(sum([int(i) for i in s if i.isdigit()]))
→ Ссылка
Автор решения: Сергей Островский
number = sum(int(i) for i in str(s) if i.isdigit())
print(number)
→ Ссылка
Автор решения: Даниил Синякин

Существует множество способов это сделать, я привел первое что пришло в голову, вот 1, запусти код чтобы понять, как менялось s

s='111111111122222222222222222222333333333333333333333333333333'
s=s.replace(""," ").split()
print(s)
print(type(s[0]))
s=list(map(int,s))
print(s)
print(type(s[0]))
print(sum(s))

Вот другой способ

s='111111111122222222222222222222333333333333333333333333333333'
summa = 0
for i in s:
    summa+=int(i)
print(summa)
summa = sum(list(map(int, s)))

можно и в 1 строчку никто не спорит... summa = sum(map(int, s)) но я не думаю что ему понятно, что тут происходит, мой 1 вариант, даст ему понять что постепенно происходит, видно что он новичок, а вы сразу на меня накинулись((

→ Ссылка
Автор решения: CrazyElf

Вариант без явных циклов:

print(sum(map(int, filter(str.isdigit, s))))
→ Ссылка
Автор решения: Qwertiy

вот

n = 111111111122222222222222222222333333333333333333333333333333 

res = 0

while n:
  res += n % 10
  n //= 10

print(res)
140
→ Ссылка
Автор решения: Jasurbek Abduxakimov
s = '<' + '1' * 10 + '2' * 20 + '3' * 30
while ('>1' in s) or ('>2' in s) or ('>3' in s):
    s = s.replace('>1', '22>', 1)
    s = s.replace('>2', '2>', 1)
    s = s.replace('>3', '1>', 1)
lis = list(str(s))
a = 1
b = int(lis[a])
while a < len(str(s)) - 1:
    b = b + int(lis[a + 1])
    a += 1
print(b)
→ Ссылка
Автор решения: Jasurbek Abduxakimov
lis = list(str(s))
a = 1
b = int(lis[a])
while a < len(str(s)) - 1:
    b = b + int(lis[a + 1])
    a += 1
print(b)
→ Ссылка