【发布时间】:2016-05-07 21:59:44
【问题描述】:
我正在尝试从控制台获取由换行符分隔的多个名称并将它们放入一个变量中。假设我想永远从终端获取输入(稍后我将添加一些代码以跳出循环)。我知道如何使用 while 循环和递归来做到这一点,但我希望能够使用 for 循环来做到这一点。
在下面的示例中,当我从终端获取"peter" 作为输入时,我一次获取的是每个字母而不是整行:
for name in input():
print(name)
现在,如果我使用 sys.stdin,name 变量将变为 "peter\n":
for name in sys.stdin:
print(name)
有没有简单的方法让input() 给"name" 整行而不是单个字符?或者只是由于使用for in 的性质,我将遍历输入中的字符?以这种方式获取输入是否存在任何固有的风险/问题?在这种情况下是否有一种“标准”的方式来获取输入?
我在 Ubuntu 15.10 上使用 Python 3.5.1。
【问题讨论】:
-
input()返回一个可迭代的字符串,因此当您尝试对其进行迭代时,您会一个一个地获取每个字符。 -
好吧,这是有道理的。 input() 返回一个字符串。那么 sys.stdin 是否返回一个逐行迭代的缓冲区?
-
因为 sys.stdin 返回一个类似对象的文件,当迭代时,它将包含输入的每一行。
-
@PeterH
sys.stdinisn't a function,它实际上是一个文件对象,系统使用它来获取标准输入,因此for name in sys.stdin的行为就像它对文件所做的那样:逐行读取. -
酷是有道理的。如果我使用'for name in sys.stdin',当输入正确结束时会退出循环?
标签: python python-3.x input python-3.5