我的输出正是要求但仍然不正确......为什么?

时间:2014-07-29 05:50:16

标签: python python-2.7

好的,我接受了这个挑战:

  

给定一个字符串s,小约翰尼将字符串的美丽定义为   它中字母之美的总和。每封信的美丽   是1到26之间的整数,包括两个字母,没有两个字母   同样的美。约翰尼并不关心字母是否大写   或小写,这样不会影响字母的美感。   (例如,大写'F'和小写'f'一样漂亮。)

     

你是一名学生正在撰写关于这位着名黑客年轻人的报告。   你找到了约翰尼认为最美的字符串。什么是   这串的最大可能之美?

输入样本:

  

ABbCcc

     

今年Facebook黑客杯祝你好运!   请忽略标点符号:)

     

有时测试用例难以弥补。

     

所以我去咨询Dalves教授

输出样本:

打印出弦乐的最大美感。例如。

  

152

     

754

     

491

     

729

     

646

当我测试我的代码时,我得到了输出,但仍然说它已经部分解决了......我错过了什么?

这是我的代码:

import sys
from collections import Counter
accum=0
beauty=26
test_cases = open(sys.argv[1], 'r')
for test in test_cases:
    dictPrueba=Counter(test.strip().replace(" ","").lower())
    dictPrueba=Counter(dictPrueba).most_common()[::1]
    for i in range(0,len(dictPrueba)):
        accum+=dictPrueba[i][1]*beauty
        beauty-=1
    print accum
    accum=0
    beauty=26
test_cases.close()

提前致谢!

1 个答案:

答案 0 :(得分:1)

您没有获得请求的输出。您的代码无法正常工作。实际上,在您提供的示例上运行代码,输出为:

152
761 #wrong
527 #wrong
741 #wrong
646

显而易见的原因是你没有按照指示忽略标点符号。要忽略标点符号,您可以使用:

dictPrueba=Counter(''.join(re.findall("[a-zA-Z]+", t)).lower())

使用此行我得到正确的输出。

另一个建议或许是他们打算让你为不同测试中的每个字母设置一个持续的评分方案(现在你的代码不是这种情况,这给了最丰富的字母得分最高)但我没办法告诉我这是否属实。

作为旁注 - 这一行:Counter(dictPrueba).most_common()[::1]是多余的。 Counter(dictPrueba)生成与dictPrueba相同的输出,最后[::1]不会改变任何内容。