在python中读到EOF的问题

时间:2011-03-29 11:26:30

标签: python

我有一个python代码,它应该从标准输入读取2个整数,直到用户按下Ctrl + D(即EOF)   并做了一些处理。我尝试了以下代码: n,k=map(int,[a for a in sys.stdin.read().split()]) 这里,当我输入两个整数时,程序接受它,当我按下Ctrl + D时,它显示正确的输出,如: 6 3 但是,当我把2对插入ingers时: 6 3 12 2,然后按Ctrl + D然后按而不是所需的结果我得到错误: [i] ValueError:upack的值太多[/ i] 那么我如何更正代码才能正常工作? 我打算为此提供最短的代码 感谢。

2 个答案:

答案 0 :(得分:4)

>>> x=map(int,[a for a in sys.stdin.read().split()])
2 3 4 5
>>> x
[2, 3, 4, 5]

并反对该名单;这样,如果需要,您将接受可变数量的整数

答案 1 :(得分:3)

问题不在于你如何从stdin读取。输入6 3基本上会使您的代码等同于

n, k = [6, 3]

哪个会好的。输入6 3 12 2会导致

n, k = [6, 3, 12, 2]

不起作用,因为您尝试将四个值的序列解包为仅两个目标。如果您想忽略前两个数字之外的所有内容,请尝试

n, k = [int(a) for a in sys.stdin.read().split()][:2]

如果要成对遍历从stdin读取的数字,可以使用

numbers = (int(a) for a in sys.stdin.read().split())
for n, k in zip(numbers, numbers):
    # whatever