Сумма цифр в целом числе? - PullRequest
       31

Сумма цифр в целом числе?

0 голосов
/ 27 января 2019

Я работаю над заданием в Python и не понимаю проблемы с моим кодом.

Основываясь на других ответах по переполнению стека, ответ выглядит так:

def digit_sum(number):

    return (sum(int(digit) for digit in str(number)))

Где, как мой код (ниже) не работает.Почему нет?

def digit_sum(number):
    for digit in str(number): 
        return sum(int(digit))

Ответы [ 2 ]

0 голосов
/ 27 января 2019

Вы прервали цикл for с return до окончания цикла.Вам нужно сохранить накопительную сумму и затем вернуть ее после завершения цикла.

Кроме того, вам необходимо понять, что такое «одиночная строка для цикла» в Python.Давайте посмотрим, что означает return в вашем первом блоке кода:

(sum(int(digit) for digit in str(number)))

Мы можем превратить эту строку в несколько шагов:

1 Получить массив цифр в виде String

Этот шаг может быть выполнен следующим образом

def get_digits_as_string(num):
    return [digit for digit in str(num)]

Запустив вышеуказанную функцию, вы можете увидеть

>>> get_digits_as_string(12345)
['1', '2', '3', '4', '5']

2 Преобразовать массив строк в массив целых чисел (также в одномстрока)

Мы просто набираем один элемент string в массиве в int

def get_digits_as_int(num):
    return [int(digit) for digit in str(num)]

, если вы запустите его, вы получите:

>>> get_digits_as_int(12345)
[1, 2, 3, 4, 5]

3 Суммируйте массив int

Это эквивалентно вашему первому блоку кода

def digit_sum(num):
    return sum([int(digit) for digit in str(num)])

Вот сообщение, которое полезно, если вы хотите узнать больше о Single Line for Loops: https://blog.teamtreehouse.com/python-single-line-loops

Надеюсь, мой ответ поможет.

0 голосов
/ 27 января 2019

Ваш код не работает, потому что вы возвращаете слишком рано.

Ключевое слово return берет все, что вы ему дали, и возвращает его вызывающей функции.

В первой итерациицикла for, вы вычисляете сумму первой цифры и затем возвращаете ее.

EG: число равно 1234

, поэтому цикл for выполняет итерацию над "1234"

Итак, первая цифра «1234» это «1»

Затем вы берете сумму 1 (что бы это ни значило lol)

И поэтому вы должны вернуть число 1

...