题目描述
兰博和提莫闲聊之后,回归到了他们的正题,约德尔人的未来。
说起约德尔人的未来,黑默丁格曾经提出了一个约德尔测试,将约德尔人的历史的每个阶段都用一个字符表达出来。(包括可写字符,不包括空格。)。然后将这个字符串转化为一个01串。转化规则是如果这个字符如果是字母或者数字,这个字符变为1,其它变为0。然后将这个01串和黑默丁格观测星空得到的01串做比较,得到一个相似率。相似率越高,则约德尔的未来越光明。
请问:相似率为多少?
输入
每组输入数据为两行,第一行为有关约德尔人历史的字符串,第二行是黑默丁格观测星空得到的字符串。 (两个字符串的长度相等,字符串长度不小于1且不超过1000。) |
样例输入
@!%12dgsa 010111100 |
输出
输出一行,在这一行输出相似率。用百分数表示。(相似率为相同字符的个数/总个数,精确到百分号小数点后两位。printf("%%");输出一个%。) |
样例输出
66.67% |
时间限制
C/C++语言:1000MS
其它语言:3000MS
|
内存限制
C/C++语言:65536KB
其它语言:589824KB
|
#coding=utf-8
import sys
from decimal import Decimal
s=[]
while True:
line=sys.stdin.readline().strip()
if not line:
break
s.append(line)
target_char=list(s[0])
estimate_int=list(s[1])
trans_target=[]
for i in target_char:
if i.isdigit() or i.isalpha():
trans_target.append(1)
else:
trans_target.append(0)
sim_num=0
for x,y in zip(trans_target,estimate_int):
if x==int(y):
sim_num+=1
# print "转换的01数字"
# print trans_target
# print "预测的01数字"
# print [int(x) for x in estimate_int]
# print "similarity"
result=float(sim_num*100)/len(trans_target)
result=Decimal(str(result)).quantize(Decimal('0.00'))
# print result
print str(result)+"%"
# print str(round(float(sim_num)/len(trans_target),4)*100)+"%"
# except :
# pass
# pass
# for value in line.split():
# print value
# print
第二个方法:
aa=raw_input('')
bb=raw_input('')
# print aa
trans_aa=[]
for i in aa:
trans_aa.append(1 if i.isalpha() or i.isdigit() else 0 )
sim_num=0
for x,y in zip(trans_aa,bb):
if x==int(y):
sim_num+=1
print str(('%.2f') % (float(sim_num)*100/len(trans_aa)))+"%"
问题点:1.保留两位小数,用到demical 或者('%.2f') :https://www.cnblogs.com/Raymon-Geng/p/5784290.html
2.怎么读取两行数据,如果使用sys.stdin.readline,因为默认会带换行符,所以要strip('\n')进行截取;或者直接用strip('');raw_input也是可以的。