我想像这样从STDIN读取输入:
1,0
0,0
1,0
1,0
依此类推,直到新行为空 ((。这表示输入结束。
我做到了
while (raw_input()!='n'):
actual,predicted=raw_input().split(',')
当我在上次输入中输入"输入"时给了我这个错误
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
怎么了?
好的,这里有两个问题:raw_input去掉尾随换行符,因此空白输入变为空字符串,而不是换行符。
更大的问题是raw_input消耗输入,因此您的代码将无法正常工作 - 它只会每隔一行处理一次。while 循环调用raw_input(这会占用一些输入并丢弃它(,然后循环的主体再次调用它并将其分配给实际和预测。
此任务的 python 习语是一个包含break
的while True:
循环:
while True:
line = raw_input()
if not line:
break
actual, predicted = line.split(",")
print("a, p", actual, predicted)
print("done!")
raw_input()
去掉尾随换行符,因此您要与''
进行比较。
但是你也在循环中一次阅读两行,我认为你想要更像:
data = raw_input()
while (data != ''):
actual,predicted=data.split(',')
data = raw_input()
raw_input
在编写用户交互式程序时真正使用。听起来你的程序是一个更典型的UNIX程序,它处理文件输入。
sys.stdin
是一个打开的文件。因此,您可以使用我最喜欢的Python功能,即遍历文件中的每一行。 完全放弃raw_input
,只将您的数据视为文件:
for line in sys.stdin:
line = line.strip()
parts = line.split(',')