2015-02-10 66 views
1

我需要創建一個腳本來要求用戶輸入一個包含由空格分隔的圓形數字的字符串。然後我需要將字符串轉換爲整數。python字符串輸入到整數轉換

任何指針從哪裏開始?這是我已經試過:

a=str(input('Voer een door spatie gescheiden lijst met getallen in:').split()) 
b=int(a) 
print(b) 

,但我不斷收到:

ValueError: invalid literal for int() with base 10: "['50', '60']" 
+1

在Python3,'input'已經產生一個字符串,所以'STR(輸入(...) )'是多餘的。 – 2015-02-10 13:39:24

回答

3

您試圖蒙上了列表的字符串表示,只是內容分割成一個列表,並使用地圖投射到整數:

inp = input('Voer een door spatie gescheiden lijst met getallen in:').split()) 
a,b = map(int,inp) 

這假定用戶總是輸入由空格分隔的兩個數字。

更安全的使用while循環和一個try /除外:

while True: 
    try: 
     inp = input('Voer een door spatie gescheiden lijst met getallen in:').split() 
     a, b = map(int, inp) 
     break 
    except ValueError: 
     print("Invalid input") 
print(a,b) 

如果輸入整數未知量:

while True: 
     try: 
      inp = input('Voer een door spatie gescheiden lijst met getallen in:').split() 
      nums = map(int, inp) 
      break 
     except ValueError: 
      print("Invalid input") 
    for num in nums: 
     print(num) 

使用python3,地圖返回地圖對象,因此它是一種有效的分配方式。
[int(x) for x in inp]也可以工作,但除非你需要一個清單,否則沒有意義創建一個清單。

+0

@BhargavRao,有兩個數字輸入,OP需要解壓兩個並分配給變量然後打印。 – 2015-02-10 13:24:29

+1

@BhargavRao,我假設OP使用python3,所以實際上'map(int,inp)'已經足夠了 – 2015-02-10 13:27:36

+0

感謝它使用while循環! – Bart1K 2015-02-10 13:37:44

0

之後split您有liststr,所以您需要將每個單獨的項目轉換爲int

你可以使用一個列表理解

b = [int(i) for i in a] 

或者使用map

b = list(map(int, a)) 
0

您需要按照以下方式向列表中的每個元素轉換成整型,

a = [int(each) for each in a]

這會給你一份清單整數,你可以在你的程序中使用。在情況下,如果它是一個無效的整數,那麼你可以使用try-except

b = [] 
for each in a: 
    try: 
     b.append(int(each)) 
    except ValueError: 
     print('Invalid number') 
1

冗長的回答

Oversymplifyng問題,int builtin(跟隨鏈接瞭解整個故事)需要一個參數,數字文字或字符串。

您的代碼

>>> a=str(input('Voer een door spatie gescheiden lijst met getallen in: ').split()) 

是創建一個列表的文字表述,因爲你使用str內置返回一個Python對象的文本表示:

>>> a 
"['2', '3', '4', '5']" 

以上是不按照int的要求,但是文本表示的是一個數字的文本表示,所以當你將它傳遞給int時,它會投訴

ValueError: invalid literal for int() with base 10: "['2', '3', '4', '5']" 

如果我們忽略對str的呼叫,該怎麼辦?

>>> a = input('Voer een door spatie gescheiden lijst met getallen in: ').split() 
>>> a 
['2', '3', '4', '5'] 
>>> int(a) 
TypeError: int() argument must be a string or a number, not 'list' 

注意,錯誤消息不同的是:不再是ValueErrorTypeError。我們有一個列表,其中的項目是表示數字的字符串,但我們不允許使用列表,因爲作爲int的參數。

輸入列表理解,當代成語來操縱內容列表的(或通用的迭代)。

>>> [int(elt) for elt in a] 
[2, 3, 4, 5] 

的語法是容易的,[...]你有開閉托架,就像使用列表字面時寫入和內部你有一個由內向外的循環,循環,然後將第一主體for規範。正文的評估結果順序存儲在一個列表中,即解釋器爲你輸出,正如你上面所看到的,我們沒有更多的字符串表示數字,但是是整數。列表解析的結果賦值給一個變量

>>> b = [int(elt) for elt in a] 

,就大功告成了:

>>> print(b) 
[2, 3, 4, 5] 
>>> 
+0

值得長拖晚答...悲傷...... :( – 2015-02-10 14:22:37