【问题标题】:Error: not all arguments converted during string formatting错误:字符串格式化期间并非所有参数都转换了
【发布时间】:2020-04-05 11:11:42
【问题描述】:
我开始学习 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())
但不幸的是它显示以下错误
你能告诉我这个错误是什么意思吗?我该如何解决这个错误?
【问题讨论】:
标签:
python
string
for-loop
types
converters
【解决方案1】:
numbers=list(input("Please enter numbers:")) 会将每个字符转换为列表中的一个元素,即如果您输入1 2 3 4,每个空格也将是一个元素。试试
numbers=input("Please enter numbers:").split()
这将省略空格。
此外,您正在尝试将字符串文字与整数进行比较。在您的循环中,将 n 解析为整数,即
if int(n) % 2 == 0:
【解决方案2】:
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】:
但不幸的是它显示以下错误你能告诉我这个错误是什么意思吗?我该如何解决这个错误?
您在if n % 2 == 0: 处收到TypeError 异常,因为解释器正在尝试应用formatting using %。 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())
使用list comprehension 做同样事情的 Pythonic 方式:
print([i for i in map(int, input("Please enter the number: ").split(" ")) if not i % 2])
【解决方案4】:
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())