错误:在字符串格式化期间,并非所有参数都已转换

时间:2020-04-05 11:11:42

标签: python string for-loop types converters

我开始学习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 :(得分:0)

但是不幸的是,它显示了以下错误。能否请您告诉我该错误的含义以及如何解决该错误?

由于解释器试图应用TypeError,因此您在if n % 2 == 0:处遇到formatting using %异常。 input()返回一个str对象,如果将其传递给list构造函数,它将在您的字符串中形成一个字符列表。

因此,numbers=list(input("Please enter numbers:"))将形成str对象的列表(例如,如果将1 2 3传递给程序,它将把它转换为str对象的列表:{ {1}})。

您需要使用['1', ' ', '2', ' ', '3']构造函数将它们转换为int。如果您只需将程序的第一行更改为int,它将开始工作

尝试一下:

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

使用list comprehension进行相同操作的Pythonic方法:

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())

答案 1 :(得分:0)

numbers=list(input("Please enter numbers:"))会将每个char转换为列表中的一个元素,即,如果您输入1 2 3 4,则每个空格也将是一个元素。试试

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

这将省略空格。

此外,您正在尝试将字符串文字与整数进行比较。在您的循环中,将n解析为整数,即

if int(n) % 2 == 0:

答案 2 :(得分:0)

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())

输入存储为字符串,在对它执行任何算术运算之前,我们需要将其类型转换为整数

答案 3 :(得分:0)

数字是字符串列表,包括仅包含空格的字符串

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

在使用模数%之前,必须删除这些空格,然后将剩余的数字字符串转换为int

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())