我有一个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]
那么我如何更正代码才能正常工作?
我打算为此提供最短的代码
感谢。
答案 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