输入法有什么区别? [重复]

问题描述 投票:0回答:2

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

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种输入法除了读文件和标准输入之外还有什么区别?

python input
2个回答
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

输入一个空行以表示输入结束。


0
投票

根据 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)
© www.soinside.com 2019 - 2024. All rights reserved.