我知道你可以从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