我已经创建了一些测试程序来展示我的意思
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
有人可以告诉我发生了什么事吗? 除了读取文件和标准输入之外,这三种输入方法有什么区别?
答案 0 :(得分: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
输入一个空行以表示输入结束。
答案 1 :(得分:0)
根据您在Doorknob of 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)