我写了一个如下代码
t_p=0
f_p=0
f_n=0
t_n=0
while True:
line=raw_input()
if not line:
break
actual,predicted=line.split(',')
print actual, predicted
if (actual==1 and predicted==1):
t_p+=50
print "tp", t_p
elif(actual==0 and predicted==1):
f_p+=-25.1
print "fp", f_p
elif(actual==1 and predicted==0):
f_n+=-50.0
print "fn", f_n
else:
t_n=0.0
print "tn", t_n
score=t_p+f_p+f_n+t_n
print score
现在,当我通过以下内容时:
0,0
0 0
tn 0.0
0,1
0 1
tn 0.0
1,0
1 0
tn 0.0
1,1
1 1
tn 0.0
1,1
1 1
tn 0.0
似乎只是总是取tn值,因为这些值基于这两个变量的值满足其他条件。
答案 0 :(得分:1)
line=raw_input()
和actual,predicted=line.split(',')
将在actual
中为您predicted
和string
提供永远不会等于int 1
的{{1}}。该类型的转换将解决问题。
答案 1 :(得分:0)
如果不将输入数据转换为int
,您可以将它们保存为字符串,并将它们与tuples
的验证数据进行比较,如下例所示:
t_p = 0
f_p = 0
f_n = 0
t_n = 0
while True:
data = tuple(raw_input().split(','))
if data[0] == 'q' or data[0] == '' :
break
else:
print data
if data == ('1','1'):
t_p += 50
print 'tp', t_p
if data == ('0','1'):
f_p -= 25.1
print 'fp', f_p
if data == ('1', '0'):
f_n -= 50.0
print 'fn', f_n
else:
tn = 0.0
print 'tn', t_n
score = t_n + f_n, + f_p, t_p
print score
演示:
1,1
('1', '1')
tp 50
tn 0
1,0
('1', '0')
fn -50.0
0,1
('0', '1')
fp -25.1
tn 0
0,0
('0', '0')
tn 0
(-50.0, -25.1, 50)