我想从STDIN读取输入:
1,0
0,0
1,0
1,0
依此类推,直到新行为空(\ n)。这表示输入结束。
我做了这个
while (raw_input()!='\n'):
actual,predicted=raw_input().split(',')
当我在最后一个输入中输入“enter”时,给我这个错误
0,0
0,1
1,0
1,1
1,1
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-23-3ec5186ad531> in <module>()
5
6 while (raw_input()!='\n'):
----> 7 actual,predicted=raw_input().split(',')
8 if (actual==1 and predicted==1):
9 t_p+=50
ValueError: need more than 1 value to unpack
怎么了?
答案 0 :(得分:2)
好的,这里有两个问题:raw_input剥离尾部换行符,因此空白输入变为空字符串,而不是换行符。
更大的问题是raw_input消耗了输入,因此您的代码无法正常工作 - 它只会处理每一行。 while循环调用raw_input(它使用了一些输入并丢弃它),然后循环体再次调用它并将其分配给实际和预测。
此任务的python习语是包含while True:
的{{1}}循环:
break
答案 1 :(得分:0)
raw_input()
会删除尾随换行符,因此您希望与''
进行比较。
但是你在循环中一次也读两行,我想你想要更像的东西:
data = raw_input()
while (data != ''):
actual,predicted=data.split(',')
data = raw_input()
答案 2 :(得分:0)
raw_input
。听起来你的程序是一个更典型的UNIX程序来处理文件输入。
sys.stdin
是一个打开的文件。因此,您可以使用我最喜欢的Python功能,它迭代文件中的每一行。完全抛弃raw_input
,只需将您的数据视为文件:
for line in sys.stdin:
line = line.strip()
parts = line.split(',')