CodeWars《Highest Scoring Word》测试用例错误,结果不符求助
解决CodeWars《Highest Scoring Word》测试用例错误问题
问题描述
执行测试用例 print(high('what time are we climbing up the volcano')) 时,预期返回volcano,但实际得到what。问题根源是你误解了题目要求:题目需要计算单词中所有字母分值的总和作为单词得分,而非取单词里单个字母的最高分值。
代码错误分析
你的代码逻辑中,对每个单词只保留了单个字符的最高分值(比如what里的w对应23,成为该单词的得分),而没有累加所有字符的分值。比如volcano的正确得分应为:22(v)+15(o)+12(l)+3(c)+1(a)+14(n)+15(o) = 82,远高于what的23+8+1+20=52,所以正确结果应该是volcano。
修正后的代码
from string import ascii_lowercase def high(x): words = x.split() # 直接存储字母对应的整数分值,避免重复类型转换 letter_scores = {letter: index for index, letter in enumerate(ascii_lowercase, start=1)} word_scores = {} for word in words: total_score = 0 for char in word: total_score += letter_scores[char] word_scores[word] = total_score # 获取得分最高的单词,若多个单词得分相同则取第一个出现的 return max(word_scores, key=word_scores.get)
关键修正点
- 分值计算逻辑:将原来的“取单个字母最高分”改为“累加所有字母分值”,这是符合题目要求的核心调整。
- 优化字典存储:
letter_scores直接存储整数类型的分值,避免了原代码中反复转换字符串到整数的冗余操作。 - 变量命名优化:用更清晰的变量名(如
total_score、letter_scores)提升代码可读性。
内容的提问来源于stack exchange,提问作者Joelinton
相关产品推荐
相关产品推荐

