2015-05-28 30 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 

只是更加简洁。

相关问题