2015-03-30 65 views
1

我需要一個程序在Python,它會要求用戶在一行中輸入多個數字,每個數字用空格分隔。像Enter your numbers: 2 1 5 8 9 5和我需要它打印[2, 1, 5, 8, 9, 5]如何使輸入接受空格?

但我到目前爲止的程序不接受空格,我該如何改變?還有一種方法可以讓數字按從小到大的順序排列?

這是我到目前爲止有:

elx = [] 

el = input("Enter your numbers: ") 
for i in el: 
    if el.isdigit(): 
     elx.append(el) 
     break 
    if not el.isdigit(): 
     print ("Number is invalid") 
     continue 

print (elx) 
+0

我的答案是Python,所以不需要大膽。 – 2015-03-30 19:27:10

+0

在你的例子中,'el'不是數字列表,而是字符串''2 1 5 8 9 5''。所以你可以用空格分割這個字符串'el.split('')' – 2015-03-30 19:27:24

回答

2

由空格就拆,使用列表理解來檢查字符串由數字組成:

nums = sorted([int(i) for i in input().split() if i.isdigit()]) 
2

使用try/except和排序:

while True: 
    el = input("Enter your numbers: ") 
    try: 
     elx = sorted(map(int, el.split())) 
     break 
    except ValueError: 
     print("Invalid input") 

如果用戶可以輸入負數,那麼isdigit將會失敗。

此外,如果用戶輸入1 2 3 f 5我認爲這應該被視爲一個不被忽視的錯誤。

+0

你爲什麼要排序?該列表與字符串的順序相同。 – 2015-03-30 19:29:51

+0

@MalikBrahimi,你看過這個問題嗎? *還有一種方法可以使數字從最小到最大排列* – 2015-03-30 19:30:22

+1

我的不好,修復了我的答案。感謝您的提醒。 – 2015-03-30 19:32:47

1
s = input('Gimme numbers! ') # '1 2 3' 
s = list(map(int, s.split())) 
print(s) # [1, 2, 3] 

這產生含有數字(s.split(' ')),其依次由地圖轉換爲整數的字符串列表。

最後,要對列表進行排序,請使用sort(s)

編輯:作爲official doc指出,使用split(sep=' ')將拋出一個異常,如果一些數據被兩個空格分開的,因爲在這種情況下,一個空字符串會被拆分('1 2'.split(' ') == ['1', '', '2'])中產生,而int()將無法轉換它。

感謝Padraic Cunningham指出這一點!

+1

try's = list(map(int,「1 2」.split('')))',你不應該傳遞任何東西來分割。 – 2015-03-30 19:32:45

+1

你說得對,如果一些數字被兩個空格分隔,傳遞'sep'參數會拋出異常。我會編輯我的答案。謝謝! – maahl 2015-03-30 19:41:02