输入法有什么区别?

时间:2014-01-02 21:49:24

标签: python input

我已经创建了一些测试程序来展示我的意思

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

有人可以告诉我发生了什么事吗? 除了读取文件和标准输入之外,这三种输入方法有什么区别?

2 个答案:

答案 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)