将整数的输入字符串转换为list,然后转换为python中的int?

时间:2016-10-09 16:02:33

标签: python

我希望用户输入一个整数(长度为6位,所以123456而不是1位),然后将该输入转换为列表[1,2,3,4,5,6]

我试过了:

user_input = list(input("Please enter an 8 digit number")
numbers = [int(i) for i in user_input]

我希望能够使用数字列表执行数学操作,但我不断收到错误“int is is iterable”。坦率地说,我不完全确定我在做什么,或者确定“数字= [...]”甚至是必要的,或者它应该只是numbers = user_input。尝试numbers = [i for i in user_input]会遇到同样的错误。

另外,我意识到我可以运行一个循环来从用户那里获取每个数字,或者让他们在每个数字之间使用逗号来使用.split(","),但我不想看起来像它似乎对用户来说很麻烦。

编辑:我一直在不同版本之间切换,所以很抱歉任何混乱。这是用2.7写的,虽然我打算使用Python 3。

2 个答案:

答案 0 :(得分:1)

函数input在Python 2和Python 3中的表现完全不同。

这似乎是Python 2.在Python 2中,input将输入的数据评估为Python代码。如果仅输入数字,input将返回一个整数。无法将其转换为列表,因此错误。

input不安全并导致许多问题,因此最好避免它。请改用raw_input

user_input = raw_input("Please enter an 8 digit number: ")

这将返回一个字符串,例如'12345678'

这可以转换为列表。该列表将逐字符遍历字符串。

digits = list(user_input)   # e.g. ['1', '2', '3', '4', '5', '6', '7', '8']

但这甚至不需要,你可以像你一样直接做:

numbers = [int(i) for i in user_input]   # e.g. [1, 2, 3, 4, 5, 6, 7, 8]

BTW,{3}的Python 3版本与Python 2 input相同。

答案 1 :(得分:0)

在Python 2.7中,input()返回一个整数。要将输入作为字符串读取,请使用函数raw_input()。或者,您可以切换到Python 3,input()总是返回一个字符串。

如果用户提供的数字超过1位,您的解决方案也不是很整洁。例如字符串" 123"可以解释为[1,2,3],[12,3]等。

一个简洁的解决方案是要求用户提供由空格分隔的输入,如下所示:x_1,x_2,... x_n

然后你在Python 3.0中的代码看起来像

lst = [int(x) for x in input().split()]

对于Python 2.7

lst = [int(x) for x in raw_input().split()]