【问题标题】:My output is exactly what is asking but is still incorrect... Why?我的输出正是所要求的,但仍然不正确......为什么?
【发布时间】:2014-09-20 10:48:29
【问题描述】:

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

给定一个字符串 s,小约翰尼将字符串的美定义为 其中字母之美的总和。每个字母的美丽 是 1 到 26 之间的整数,包括 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()

提前致谢!

【问题讨论】:

  • “我得到了完美的输出,但它仍然没有被认为是正确的”由什么?输出要么完美,要么不完美。如果它是完美的但未被接受,谁/什么在接受?
  • 我认为您应该参考该挑战的组织者,而不是 SO。
  • 这是一个 codeeval 挑战,出于某种原因,它说它已部分解决......

标签: python python-2.7


【解决方案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] 最终没有任何改变。

【讨论】:

  • 感谢您的观察。如果您能更好地解释那行代码的冗余,我将不胜感激。我还编辑了我的代码并添加了 test="".join(l for l in test if l not in string.punctuation) 以删除标点符号,但代码仍然部分解决
  • 我无法进一步解释这一点。 x=Counter(dictPrueba).most_common()[::1]x=dictPrueba.most_common() 产生完全相同的x
  • @FutoFarai 这是一种从字符串中提取字母的方法。它返回在原始字符串中找到的连续字母字符串列表,我稍后将其连接到单个字符串。有关从字符串中提取字母的其他方法,请参阅here
  • 感谢您的帮助和新知识!
猜你喜欢
  • 1970-01-01
  • 2021-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-21
  • 1970-01-01
  • 2017-07-06
相关资源
最近更新 更多