Ошибка: не все аргументы преобразованы во время форматирования строки - PullRequest
1 голос
/ 05 апреля 2020

Я начинаю учиться Python Я написал код, чтобы получить список чисел от пользователя и показать четные числа:

numbers=list(input("Please enter numbers:"))

def is_even_num():
    enum = []
    for n in numbers:
        if n % 2 == 0:
            enum.append(n)
    return enum

print(is_even_num())

Но, к сожалению, он показывает следующую ошибку. подскажите что означает ошибка и как я могу исправить ошибку?

Ответы [ 4 ]

0 голосов
/ 05 апреля 2020

numbers - это список строк, включая строки только с пробелами

['3', ' ', '5', ' ', '8']

Эти пробелы необходимо удалить, а затем преобразовать оставшиеся числовые строки в целые, прежде чем использовать модуль%

numbers = list(input("Please enter numbers:"))

print(numbers)

def is_even_num():
    enum = []
    for n in numbers:
        if n.strip(' '):
            if int(n) % 2 == 0:
                enum.append(int(n))
    return enum

print(is_even_num())
0 голосов
/ 05 апреля 2020

numbers=list(input("Please enter numbers:")) преобразует каждый символ в элемент списка, т.е. если вы введете 1 2 3 4, каждый пробел также будет элементом. Попробуйте

numbers=input("Please enter numbers:").split()

Это пропустит пробелы.

Также вы пытаетесь сравнить строковый литерал с целым числом. В вашем l oop разберите n как целое число, т.е.

if int(n) % 2 == 0:
0 голосов
/ 05 апреля 2020
numbers=[int(i) for i in input().split()]
def is_even_num():

    enum = []
    for n in numbers:
        if n % 2 == 0:
            enum.append(n)
    return enum
print(is_even_num())

Входные данные хранятся в виде строки, нам нужно набрать его в целое число перед выполнением любых арифметических операций c над ним

0 голосов
/ 05 апреля 2020

Но, к сожалению, он показывает следующую ошибку. Скажите, пожалуйста, что означает ошибка и как ее исправить?

Вы получаете TypeError исключение в if n % 2 == 0:, поскольку интерпретатор пытается применить форматирование с использованием %. input() возвращает объект str, и если вы передадите его конструктору list, он сформирует список символов в вашей строке.

Следовательно, numbers=list(input("Please enter numbers:")) будет формировать список str объектов (например, если вы передадите 1 2 3 вашей программе, он преобразует его в список объектов str: ['1', ' ', '2', ' ', '3']) ,

Вам необходимо преобразовать их в int с помощью конструктора int. Если вы можете просто изменить первую строку в вашей программе на numbers=list(map(int, input("Please enter numbers: ").split(" "))), она начнет работать

Попробуйте:

numbers=list(map(int, input("Please enter numbers: ").split(" ")))
def is_even_num():

    enum = []
    for n in numbers:
        if n % 2 == 0:
            enum.append(n)
    return enum
print(is_even_num())

Pythoni c способ сделать то же самое, используя список понимания :

print([i for i in map(int, input("Please enter the number: ").split(" ")) if not i % 2])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...