2016-10-09 21 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

相關問題