Функция input() TypeError: not all arguments converted during string formatting

numbers = [1,2,3,4,5]
print( sum(x for x in numbers if x % 2 == 0) )

Почему когда я хочу, чтобы данные вводил пользователь, то программа перестает работать:

numbers = list( input('') )
print( sum(x for x in numbers if x % 2 == 0) )

Выскакивает ошибка: TypeError: not all arguments converted during string formatting


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

Автор решения: Михаил Муругов

Надо понимать, что делает numbers = list( input('') ). Для наглядности заменим input('') на "1,2,3,4,5"
Строка numbers = list("1,2,3,4,5") эквивалентна коду:

numbers = []
for element in "1,2,3,4,5":
    numbers.append(element)


Что значит for element in "1,2,3,4,5"?

Это значит перебрать каждый символ из строки "1,2,3,4,5". А что такое символ? Правильно, это строка длины 1. Таким образом строка

numbers = list("1,2,3,4,5")

Вернёт список, элементами которого будут символы (запятые тоже!!), т.е. строки длины 1
Далее Вы пытаетесь просуммировать все символы строки, удовлетворяющие какому-то условию. И условие выглядит if символ % 2.... Как Вы себе представляете взятие остатка от деления строки на число? Думаю, доходчиво объяснил, в чём у Вас ошибка.


Чтобы исправить, очевидно, надо, чтобы не было взятия остатка от деления символа на число. Как? Зависит от формата вводимых данных. Если цифры вводятся через запятую, то:

numbers = input()
numbers = numbers.split(",")  # Разделяем строку по запятым
numbers = [int(number) for number in numbers]  # Преобразовываем каждую строку-число в число-число

И далее уже работаете с numbers как со списком чисел.

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

Попробуйте так:

numbers = list( input('') )
# 12345

print( sum(int(x) for x in numbers if int(x) % 2 == 0) )  # int(x) !!!
# 6
→ Ссылка