2017-08-03 47 views
2
finallist = [] 
for each_time in range(10): 
    x = int(input("Whats your number ? ")) 
    finallist.append(x) 

它要求10倍"Whats your number ? ".appendinput()int得到的回答到一個列表,我想知道它有這樣做的任何簡單的方法,地圖可能?我也讀過類似的問題,關於json這樣做更簡單,有效或更短嗎?

finallist.append(int(input("Whats your number ? "))) 

我知道我可以這樣做,但出於解釋的原因,我寧願寫第一個。

+1

'[INT爲_在範圍內(11)]? –

+2

這是*非常好*。過早優化是「萬惡之源」。爲了節省幾條線而做它只是愚蠢的。 –

+0

謝謝,我只是想知道,如果一個簡單的內置將做到這一點對我來說@ juanpa.arrivillaga –

回答

5

可以與列表理解做到這一點:

finallist = [int(input("Whats your number ? ")) for _ in range(10)] 

但我wouldn't recommend doing it,因爲它不太清楚發生了什麼。

或者,像Python的禪會說:

>>> import this 
... 
Explicit is better than implicit. 

列表解析(和mapfilterreduce等)是最好的,當你的函數沒有副作用。並要求用戶輸入有副作用。

+3

上投票推薦的OP不要使用此。通過使用列表理解和香草循環,OP確實沒有那麼多。正如@ juanpa.arrivillaga在他的評論中所言,過早優化很少是一個好主意。 –

+0

這取決於你的判斷用戶的輸入是否是一個「副作用」或計算的觀點。 1這是不是「火核彈」爲1至10,這是「第i確定進入輸入號碼」我在1至10 –

+0

無論哪種方式,你玷污了計算的純列表理解。 – randomir

2

你可以使用一個理解:

numbers = [int(input("Number please")) for i in range(10)] 
+2

小改進:如果你從來不使用您使用遍歷可迭代變量 - 你的情況'i' - 這是公共約定使用'_'來代替。讓讀者知道你只是迭代代碼重複的迭代。 –

+0

@ChristianDean不知道,謝謝你的信息 –

2

使用的理解始終是一個for循環更好的選擇:

finallist = [int(input("Whats your number ? ")) for _ in range(10)] 
0

考慮允許用戶鍵入他們都在沿着這些路線一次用空格隔開,東西:(「?什麼是你的號碼」輸入())

while True: 
    s = input("Enter 10 numbers (separated by spaces)? ").split() 
    if len(s) != 10: 
     print("Sorry, that was {} values, try again".format(len(s))) 
    else: 
     finallist = [int(n) for n in s] 
     break 
1
result = [] 
while not len(result) == 10: 
    result += [input('What is your number? ')] 
+0

這是非常聰明的傢伙,謝謝 –

相關問題