Как сложить цифры в число и поместить результат в список - PullRequest
0 голосов
/ 11 июля 2020

(извините за плохой заголовок, у меня возникли проблемы с обобщением) Итак, я работаю над проектом, в котором нужно взять список полностью случайных чисел, найти сумму цифр в каждом числе и поместить эту сумму в список. Вот что у меня есть:

import random
import math
list1 = [random.randint(1,1000000000000) for i in range(0,10)]
list2 = []
list3 = []
def open_command():
    for y in range(0,10):
        a = list1[y]
        z = len(str(a))
        for x in range(0, z):
            f = len(str(a))
            b = a*0.1
            c, w=(math.modf(b))
            d = int(c*10)
            list2.append(d)
            a = (a - d)/10
            if f == 0:
                total = sum(list2)
                list3.append(total)
                list2.clear()
    

open_command()
print(list3)

Когда я запускаю этот код, list3 просто отображает пустой список, но ошибки нет. Я не понимаю, приложение .append не работает? Может кто-нибудь объяснить, что происходит?

Ответы [ 3 ]

1 голос
/ 11 июля 2020

Вы никогда не меняете a, поэтому его длина (f) никогда не становится равной 0. Следовательно, вы никогда ничего не добавляете.

Но вы слишком усложняете:

list3 = [sum(int(char) for char in str(num)) for num in list1]

Или, если вы хотите сохранить свою базовую c концепцию:

def open_command():
    for number in list1:
        for char in str(number):
            list2.append(int(char))
        list3.append(sum(list2))
        list2.clear()
    return list3
1 голос
/ 11 июля 2020

Использование карты, один лайнер

list_num = [123,456]
print([sum(list(map(int, list(str(num))))) for num in list_num])

Вывод:

[6, 15]
1 голос
/ 11 июля 2020

Это происходит потому, что следующий код так и не был выполнен. Список 3 никогда не добавляется, а список 2 никогда не очищается.

if f == 0:
    total = sum(list2)
    list3.append(total)
    list2.clear()
...