2015-05-28 68 views
1

我知道你可以從stdin中獲得一行raw_input()函數。但是,如果我不知道我必須得到的線的數量呢?如果您不知道行數,是否可以使用raw_input()獲取所有行?

我知道我可以導入'sys',然後用while循環獲取所有行,但是有沒有類似的方法可以使用raw_input()來完成這樣的任務?

+0

您想如何檢測輸入讀數應該停止的點? – SuperBiasedMan

+0

@SuperBiasedMan如果我知道,我不會問這個問題...... – naneri

+0

@naneria我的意思是你要做什麼,而不是如何工作。例如。在空行結束時,當用戶鍵入「退出」等。 – SuperBiasedMan

回答

2

這可以是簡單的:

while(raw_input()): 
    #print "I received input" 
    #Do some processing here 
    #terminates when user hits enter without any text. 

根據被視爲False Python文檔,""(一個空字符串)。所以當用戶不輸入任何內容時,循環終止。

或者,如果你想通過用戶輸入的輸入,那麼你可以使用:

while True: 
    text = raw_input() 
    if not text: 
     break 
    #Do some processing here 

或者,如果要指定一些其他的突破點,那麼你可以檢查的條件while環路內:

break_word = "q" 
while True: 
    text = raw_input() 
    if text == break_word: 
     break 
    #Do some processing here 
+2

你的第一個例子是毫無意義的,你怎麼能用輸入做任何事情?您不會將輸入存儲在任何變量中,您也不應該使用'is'來比較字符串,'is'是檢查身份而不是相等。 –

+0

@PadraicCunningham我還添加了其他一些方法,但是第一個只是基本的while循環,當用戶只是想要在接收到的每個輸入上觸發某個函數時(例如輸入數據),可能會使用它,例如,輸出每個輸入的輸入的當前時間。雖然沒有多大用處,但是從最基本的開始 – ZdaR

+0

您確實意識到您的循環永遠不會中斷?'text is p'永遠不會是真的 –

1

如果要存儲數據,請考慮使用list

讀取循環中的值。如果您在循環中獲得空行break,否則將輸入的數據添加到您的列表中。

data = [] 
while True: 
    line = raw_input() 
    if not line: 
     break() 
    data.append(line) 
1

您可以使用列表比較,如果你想存儲的所有行:

lines = [line for line in iter(lambda: raw_input("enter line or 'q' to quit"), "q")] 

或者使用一個循環:

for line in iter(lambda: raw_input("enter line or 'q' to quit"), "q"): 
    print(line) 

當用戶進入q循環將打破。第二個參數iter是一個標記值,無論您提供什麼值,都可以在用戶輸入時打破循環。

使用ITER等同於:

while True: 
    inp = raw_input("Enter line or 'q' to quit") 
    if inp == "q": 
     break 

只是更加簡潔。

相關問題