TypeError:' int'解析用户输入时,object不可迭代

时间:2017-08-31 00:31:32

标签: python input

目标:输入列表[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)

输出:TypeError:&#39; int&#39; object不可迭代

有更好的方法吗?

6 个答案:

答案 0 :(得分: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位。

请注意,如果用户输入多于或少于两个以空格分隔的数字,则解包不是一个好主意。在这样的事件中,你最好不要开始解包结果。

答案 1 :(得分: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()]

然后你的其余代码应该可以正常工作

答案 2 :(得分: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]

答案 3 :(得分: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)

答案 4 :(得分: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

答案 5 :(得分:-1)

我认为错误在于此代码:

start_list = list(response)

你应该把你的回答放在[]之间,如:

start_list = list([response])