Python读取到EOF时的问题
我有一段Python代码,它应该从标准输入读取两个整数,直到用户按下Ctrl+D(也就是结束输入)。然后进行一些处理。我尝试了以下代码:n,k=map(int,[a for a in sys.stdin.read().split()])
。在这里,当我输入两个整数时,程序能正常接受,并且当我按下Ctrl+D时,它会显示正确的输出,比如:6 3
。但是当我输入两对整数,比如:6 3
,然后按下Ctrl+D时,程序却报错,提示:ValueError: Too many values to unpack。所以我该如何修改代码才能正常工作呢?我希望能写出尽可能简短的代码。谢谢。
12 2
2 个回答
3
问题不在于你如何从标准输入读取数据。输入 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]
如果你想成对地处理从标准输入读取的数字,可以使用
numbers = (int(a) for a in sys.stdin.read().split())
for n, k in zip(numbers, numbers):
# whatever
4
>>> x=map(int,[a for a in sys.stdin.read().split()])
2 3 4 5
>>> x
[2, 3, 4, 5]
并且对这个列表进行操作;这样的话,如果需要,你可以接受任意数量的整数。