我创建了一些测试程序来展示我的意思
import os
r = open('in.txt', 'r')
for line in r.readlines():
print line
上面的程序打印“in.txt”中的每一行,这就是我想要的其他内容
for line in raw_input():
print line
我输入“asdf”,它给了我(它也不让我输入多行)
a
s
d
f
最后,
for line in str(input()):
print line
我输入“asdf”,它给了我(不允许我输入多行)
Traceback (most recent call last):
File "C:/Python27/test.py", line 1, in <module>
for line in str(input()):
File "<string>", line 1, in <module>
NameError: name 'asdf' is not defined
有人可以告诉我发生了什么事吗? 这3种输入法除了读文件和标准输入之外还有什么区别?
raw_input()
将一行作为用户的输入并给出一个字符串,当您使用 for ... in
循环时,您将循环遍历字符。
input()
获取输入并将其作为 Python 代码执行;你应该很少使用它。
(在Python 3中,
input
与Python 2的raw_input
做同样的事情,并且没有像Python 2的input
那样的功能。)
如果您想要多行输入,请尝试:
lines = []
while True:
line = raw_input()
if line == '': break
lines.append(line)
for line in lines:
# do stuff
pass
输入一个空行以表示输入结束。
根据 Snow 的门把手中的第二个问题,这里是示例代码,但请注意,这不是好的做法。对于一个快速而肮脏的黑客来说,它工作得很好。
def multiline_input(prompt):
"""Prompts the user for raw_input() until an empty string is entered,
then returns the results, joined as a string by the newline character"""
tmp = "string_goes_here" #editor's note: this just inits the variable
tmp_list = list()
while tmp:
tmp_list.append(tmp)
tmp = raw_input(prompt)
input_string = '\n'.join(tmp_list[1:])
return input_string
for line in multiline_input(">> ").splitlines():
print(line)