Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+2

Помогите с кодом Пайтон по списочному выражению

Дано задание: Стажёр написал программу, которая принимает натуральное число n, а затем n целых чисел. С помощью списочного выражения нужно было вывести только числа, которые делятся на 2, но не делятся на 4 — в одну строку через пробел.
Мой код
numbers = [int(input()) for i in range(int(input()))]
answer = [num for num in range(numbers) if num % 2 == 0 and num % 4 != 0]
print(*answer)
Ошибка: int() argument must be a string, a bytes-like object or a real number, not 'list' (Ссылка: аргумент int() должен быть строкой, байтоподобным объектом или вещественным числом, а не "списком")
Где у меня ошибка?

По дате
По рейтингу
Аватар пользователя
Новичок

Проблема возникает из-за неправильного использования переменной numbers в вашем списочном выражении. Вместо того, чтобы использовать numbers как диапазон для генерации чисел, вы должны использовать список numbers, который вы уже получили через ввод.

123
 numbers = [int(input()) for i in range(int(input()))] 
answer = [num for num in numbers if num % 2 == 0 and num % 4 != 0] 
print(*answer)  

Теперь ваш код должен корректно работать. Он создает список numbers, содержащий введенные пользователем числа, а затем использует списочное выражение для фильтрации чисел, которые делятся на 2, но не делятся на 4, и выводит результат через пробел.

Аватар пользователя
Просветленный

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

1234
 numbers = [int(input()) for i in range(int(input()))] 
answer = [num for num in numbers if num % 2 == 0 and num % 4 != 0] 
print(*answer) 
 

Тебе нужно итерироваться по самому списку numbers, а не по диапазону, созданному из него. Вот исправленный код: