我知道你可以從stdin中獲得一行raw_input()
函數。但是,如果我不知道我必須得到的線的數量呢?如果您不知道行數,是否可以使用raw_input()獲取所有行?
我知道我可以導入'sys',然後用while循環獲取所有行,但是有沒有類似的方法可以使用raw_input()
來完成這樣的任務?
我知道你可以從stdin中獲得一行raw_input()
函數。但是,如果我不知道我必須得到的線的數量呢?如果您不知道行數,是否可以使用raw_input()獲取所有行?
我知道我可以導入'sys',然後用while循環獲取所有行,但是有沒有類似的方法可以使用raw_input()
來完成這樣的任務?
這可以是簡單的:
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
你的第一個例子是毫無意義的,你怎麼能用輸入做任何事情?您不會將輸入存儲在任何變量中,您也不應該使用'is'來比較字符串,'is'是檢查身份而不是相等。 –
@PadraicCunningham我還添加了其他一些方法,但是第一個只是基本的while循環,當用戶只是想要在接收到的每個輸入上觸發某個函數時(例如輸入數據),可能會使用它,例如,輸出每個輸入的輸入的當前時間。雖然沒有多大用處,但是從最基本的開始 – ZdaR
您確實意識到您的循環永遠不會中斷?'text is p'永遠不會是真的 –
如果要存儲數據,請考慮使用list
。
讀取循環中的值。如果您在循環中獲得空行break
,否則將輸入的數據添加到您的列表中。
data = []
while True:
line = raw_input()
if not line:
break()
data.append(line)
您可以使用列表比較,如果你想存儲的所有行:
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
只是更加簡潔。
您想如何檢測輸入讀數應該停止的點? – SuperBiasedMan
@SuperBiasedMan如果我知道,我不會問這個問題...... – naneri
@naneria我的意思是你要做什麼,而不是如何工作。例如。在空行結束時,當用戶鍵入「退出」等。 – SuperBiasedMan