2012-12-04 62 views
1

這是我關於Python 3.2.3空閒代碼:如何追加這個列表?

numbers = [] 
numbers = input("(Enter a empty string to quit) Enter a number: ") 
while numbers != "": 
    numbers = input("(Enter a empty string to quit) Enter a number; ") 
numbers.append(n) 
print ("The list is", numbers) 

現在的問題是,我不能追加列表。 如果我讓數字= int(輸入(然後它適用於追加列表,但不會讓我退出輸入數字。) 如果我讓數字=輸入 就像我現在,它不會讓我追加列表

我怎樣才能得到這些數字追加到一個列表

回答

9

有兩個問題:

  1. 你分配輸入的numbers代替n;
  2. 的? append()是在錯誤的地方。

嘗試以下操作:

numbers = [] 
n = input("(Enter a empty string to quit) Enter a number: ") 
while n != "": 
    numbers.append(n) 
    n = input("(Enter a empty string to quit) Enter a number; ") 
print ("The list is", numbers) 

如果你想存儲整數,而不是字符串,改變append()行:

numbers.append(int(n)) 

風格上,如果第一個提示是一樣的所有後續輸入的提示,我會重構代碼如下:

numbers = [] 
while True: 
    n = input("(Enter a empty string to quit) Enter a number: ") 
    if n == "": break 
    numbers.append(n) # or int(n) 
print ("The list is", numbers) 
+3

並且'append'在while循環之外。 –

+2

另外,如果你想附加數字而不是字符串,它應該是'numbers.append(int(n))'。 –

+0

@ sr2222:好的,謝謝。 – NPE

2

儘管存在這些問題,你已經有了一個答案,這可以很大程度上簡化爲簡單的數據輸入:

numbers = list(map(int, iter(input, ''))) 

工作由內向外(一些解釋):

  • iter(input, '')反覆直到達到''(空輸入)爲止
  • map(int,...)需要這些值並嘗試轉換爲整數 - 如果不能,則會拋出異常
  • list(...)然後採取的是和創建一個實際list對象
  • numbers = ...是錯了,因爲它說:)

然後,在功能可能包(使用functools.partial在這裏,但拉姆達是罰款):

def ask(prompt): 
    from functools import partial 
    prompt_func = partial(input, prompt) 
    return list(map(int, iter(prompt_func, ''))) 

numbers = ask('Keep entering valid numbers (or a blank line to quit)') 
+0

雖然沒有一些解釋這裏發生了什麼,它接近voodoo代碼... –

+1

@ sr2222同意 - 看起來更簡單 - 試圖解釋它以備將來參考雖然 –