2013-12-11 29 views
3

我是一名python初學者。我試圖接受來自用戶的輸入,只要他/她願意。當按下Enter鍵時,程序應停止接受輸入。在python中接受輸入直到換行

也就是說

25 
65 
69 
32 
    #stop here since the enter key was pressed without any input 

我想出了這樣做的以下代碼....

a = [] 
while 1: 

    b = input("->") 
    if(len(b)>0): 
     a.append(b) 
    else: 
     break 

  1. 是否有任何其他有效的 'Python化' 的方式這樣做?

  2. 雖然這與python 3.3完美協作,但它不適用於python 2.7(input()被raw_input()函數取代)。屏幕保持沉默,沒有任何反應。這是爲什麼?

  3. 是否有任何內置函數可以將字符串轉換爲整數!?

+0

在if語句周圍不需要括號,使用'int('string')'將字符串更改爲整數 – samrap

+0

請注意Python中的空格。我意識到你的代碼示例混合了標籤和公共空間。 – Jon

回答

4

你的方法大多好。你可以這樣寫:

a = [] 
prompt = "-> " 
line = input(prompt) 

while line: 
    a.append(int(line)) 
    line = input(prompt) 

print(a) 

注:我沒有包括的任何錯誤處理。

至於你的其他問題(S):

  1. raw_input()應該在Python 2.7
  2. int()同樣的工作 - Coerves給定的參數爲整數。如果不能,它將會失敗,並顯示TypeError

對於Python 2.x版本,只需將input()替換爲raw_input()即可。

只是爲了教育目的起見,你也可以把它寫在功能語這樣的:

def read_input(prompt): 
    x = input(prompt) 
    while x: 
     yield x 
     x = input(prompt) 


xs = list(map(int, read_input("-> "))) 
print(xs) 
+0

使用大量的函數並沒有做出任何「功能」或「功能風格」(從功能範式的意義上來說)。使用迭代而不是遞歸的函數式編程非常有趣 – Hyperboreus

+0

IT使用函數來封裝功能和迭代結果的意義上仍然是「功能性」的。包裝產生''input()''函數的副作用。 –

+0

它肯定不是純粹的功能,但是:) –

1
  1. IDK的,這個代碼看起來對我好。
  2. 它完美的作品在我的Python 2.7.5,使用的raw_input()
  3. 只是使用int()函數:例如int( '121')返回121整數
6

大概靈巧方式我知道(有沒有錯誤處理,不幸的是,這就是爲什麼你不看生產過於頻繁):

>>> lines = list(iter(input, '')) 
abc 
def 
. 
g 

>>> lines 
['abc', 'def', '.', 'g'] 

這用來iter兩個參數調用簽名,要求第一個參數( input),直到它返回第二個參數(她e '',空字符串)。

你的方式不是太糟糕了,儘管它的變化下多見

a = [] 
while True: 
    b = input("->") 
    if not b: 
     break 
    a.append(b) 

事實上,使用breakcontinue是罕見的情況下,一個人多的地方做了一個在線if,例如

a = [] 
while True: 
    b = input("->") 
    if not b: break 
    a.append(b) 

雖然這是正式皺眉(tm)。