从system.in中获取Python中的多行输入

时间:2015-07-30 02:06:14

标签: python input

对于我的一个作业,我们不是直接从文本文件中读取,而是直接从sys.in获取输入。我想知道获取此输入并存储它的最佳方法是什么? 到目前为止,我已尝试使用:

sys.stdin.readlines() - 但是除非收到EOF语句,否则不会终止,而输入中的零表示文件的结尾。

sys.stdin.readline() - 它只会读取输入代码的最后一行。

input() - 我只能在输入的第一行读取,当我尝试循环它时,我最终会出现语法错误。

输入的示例如下:

3
2 1 3
3 2 1
1 3 2
2 1 3
3 2 1
1 3 2
2
1 2
1 2
2 1
2 1
0

我尝试获取输入:

input_list = []

    while True:
        input_str = input("")
        if input_str == '0':
            break
        else:
            input_list.append(input_str)

    print(input_list)

在解析第二行时返回此错误:

enter image description here

对此的任何帮助将不胜感激。我现在花费的时间可能比现在的实际任务要花费更长时间才能使输入工作。

编辑:我们使用的Python版本是3.4

最终编辑:就像这两个答案所说的那样,事实证明大学实验室在实验室中以cmd提示符运行时运行较旧版本的python,其中input()方法开始表现不同。一旦我在家里尝试了代码,它就按预期工作了。

2 个答案:

答案 0 :(得分:1)

对于 Python 2.x ,您应该使用raw_input()

Python 2.x 中,使用input()实际上会尝试评估输入的内容,这可能会导致问题(比如您遇到的问题),并且很危险(因为它会评估用户输入的内容。

raw_input()不会评估输入的值,但只会将其作为字符串返回。

答案 1 :(得分:1)

避免使用input(),因为对于不同版本的Python,这种行为会有所不同。相反,您可以从sys.stdin阅读,这应该有效:

import sys

input_list = []

for line in sys.stdin:
    if line.strip() == '0':
        break
    input_list.append(line)
else:
    print('Warning: EOF occurred before "0" terminator')

print(input_list)

当读取具有单个0的行或者看到EOF时,for循环将终止。 else允许您在输入在0之前终止时处理;如果适合您的申请,您可以将其视为错误。

对于您的输入,输出将是:

['3\n', '2 1 3\n', '3 2 1\n', '1 3 2\n', '2 1 3\n', '3 2 1\n', '1 3 2\n', '2\n', '1 2\n', '1 2\n', '2 1\n', '2 1\n']