2016-10-09 22 views
2

我希望用户输入一个整数(6位长,因此123456而不是1),然后将该输入转换为列表[1,2,3,4,5,6]将整数的输入字符串转换为列表,然后在Python中输入?

我尝试这样做:

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

我希望能够与号码列表进行数学的东西,但我不断收到错误“int是不是可迭代”。坦率地说,我不完全确定我在做什么,或者确定“数字= [...]”甚至是必要的,或者它应该是numbers = user_input。尝试numbers = [i for i in user_input]获得相同的错误。

另外,我意识到我可以运行一个循环来获取用户的每个号码,或者要求他们在每个号码之间使用逗号,以便使用.split(","),但我宁可不要因为它看起来凌乱用户。

编辑:我一直在切换版本之间的东西,所以很抱歉有任何混淆。这是写在2.7,但我打算使用Python 3.

+1

你不是在python 2吗?如果是这样,请使用raw_input而不是输入 – Boud

+0

您的问题在其他地方,而不是您在此显示的代码中。 –

+0

什么版本的Python? – dawg

回答

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()] 
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,Python的3.0版本的input相同的Python 2 raw_input

相关问题