Функция 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 как со списком чисел.
Попробуйте так:
numbers = list( input('') )
# 12345
print( sum(int(x) for x in numbers if int(x) % 2 == 0) ) # int(x) !!!
# 6