类型错误:解析用户输入时“int”对象不可迭代[重复]

问题描述 投票:0回答:6

目标:输入列表[2,7]接收输出[2,7,3]

print('when asked for first two numbers type 27')
response = int(input('first two numbers of the list?  '))
start_list = list(response)
print('first two numbers of the list are', start_list)
if start_list[0] < start_list[1]:
    new = start_list[0] + 1
    start_list.insert(2, new)
print('first algo run gives', start_list)

输出:类型错误:'int'对象不可迭代

有更好的办法吗?

python input
6个回答
1
投票

我的猜测是您希望用户输入两个用空格分隔的整数。这绝对不是你会做的事。首先,在看起来像

int
的输入上应用
"123 456"
并不是正确的方法。您需要
str.split
,然后将每个元素转换为整数。常见的习语是:

x, y = map(int, input('Enter two numbers: ').split())
Enter two numbers: 123 456

print(x, y)
(123, 456)

在此之后,您不妨将您的号码放入列表中:

start_list = [x, y]

或者,如果您不想解压

map
结果,您可以使用:

start_list = list(map(int, input('Enter two numbers: ').split()))

如果您使用的是 python2,请省略

list
位。


请注意,如果用户输入的内容多于或少于两个以空格分隔的数字,则解包不是一个好主意。在这种情况下,您最好一开始就不要解压结果。


0
投票

如果您想接受 2 个数字,您可能需要使用 raw_input

response = raw_input('first two numbers of the list?  ') # this will give you a string like '1 2'

然后你想将其转换为整数列表

start_list = [int(x) for x in response.split()]

那么你的其余代码应该可以正常工作


0
投票

您可以对制作列表的方式进行一些修改

print('when asked for first two numbers type 27')
response = input('first two numbers of the list?  ')
start_list = list(map(int, response.split()))
print('first two numbers of the list are', start_list)
if start_list[0] < start_list[1]:
    new = start_list[0] + 1
    start_list.insert(2, new)
print('first algo run gives', start_list)

输出

when asked for first two numbers type 27
first two numbers of the list?  1 10
first two numbers of the list are [1, 10]
first algo run gives [1, 10, 2]

0
投票

使用 Coldspeed 的建议,并认识到

split()
返回字符串列表...

然后记得将字符串转换回 int,这似乎解决了我系统上的问题:

start_list = list(input('Enter two numbers: ').split())
print('first two numbers of the list are', start_list)
if start_list[0] < start_list[1]:
    new = int(start_list[0]) + 1  # need to convert first string to an int with a call to int()
    start_list.insert(2, new)
print('first algo run gives', start_list)

0
投票

我发现你正在学习Python。 这是我的建议:

让用户输入恰好两个数字的最佳方法是提示他两次。 函数

input
返回一个字符串,您可以将其转换为 int (就像您所做的那样)。

print('when asked for first two numbers enter 2 and 7')
response1 = int(input('Enter the first integer'))
response2 = int(input('Enter the second integer'))

将这两个值放入一个列表中。 最简单的方法是使用

[...]
语法:

start_list = [response1, response2]
print('first two numbers of the list are', start_list)

现在附加第三个元素。

if start_list[0] < start_list[1]:
    new_value = start_list[0] + 1  # don't use the name new
    start_list.append(new_value)  # append always adds it at the end
print('first algo run gives', start_list)  # what's an algo?

名称

new
并不是一个好的变量名称,因为它有特殊的含义。

如果您知道希望该值位于列表末尾,请使用

append
而不是
insert


-1
投票

我认为错误在于这段代码:

start_list = list(response)

您应该将您的回复放在 [] 之间,例如:

start_list = list([response])
© www.soinside.com 2019 - 2024. All rights reserved.