Как правильно написать функцию, чтобы она считала сумму вводимых чисел

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

def suma_digits_a(a):
    for i in range(a):
        x = int(input(' '))
        s = x
        s += x
        print(s)


if __name__ == '__main__':
    a = int(input('введите число: '))

    print(suma_digits_a(a))

к примеру я ввожу число 3, потом числа 3, 3, 3 и должен получить сумму 9, а у меня они не суммируются.


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

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

ошибка №1:

Функция suma_digits_a ничего не возвращает а когда функция в питоне ничего не возвращает, то считается, что она возвращает None

Однако вы выводите результат внутри функции, а затем делаете

print(suma_digits_a(a))

т.е. выводите результат работы функции suma_digits_a, т.е. None

Вам надо не выводить в функции сумму, а вернуть ее:

def suma_digits_a(a):
    # ваш код
    return sum

ошибка №2:

вы не вычисляете сумму, поскольку внутри цикла постоянно присваиваете сумме последнее значение

for i in range(a):
    x = int(input(' '))
    s = x
    s += x
    print(s)

в итоге таким подходом вы просто в конечном итоге удаиваете введенное значение

    s = x
    s += x

вынесете s из цикла

s = 0
for i in range(a):
    x = int(input(' '))
    s += x

непонятка №3

а зачем вам вот этот код?

if __name__ == '__main__':

P.S. Если не стоит задача сначала запросить сколько чисел будет, а затем вводить эти числа, то можно обойтись гораздо более короткими техниками:

  1. получить все введенные в одной строке числа в массив через функцию map

     nums = [*map(int, input().split())]
    
  2. подсчитать сумму через функцию reduce

     from functools import reduce
    
     nums = [*map(int, input().split())]
     sum = reduce(lambda sum, value: sum + value, nums)
    
     print(sum)
    
  3. воспользоваться функцией sum:

     nums = [*map(int, input().split())]
     res = sum(nums)
    
     print(sum)
    
→ Ссылка