为何我的while循环计算字符串得分值错误?求代码问题排查
问题分析与代码修正
你的代码存在多个逻辑错误,导致计算结果不符合预期,以下是具体问题和修正方案:
核心错误点
- 循环范围错误:你用
range(len(s))遍历原字符串的字符索引,但实际需要遍历的是分割后的单词列表,原字符串长度和单词数量无关,会导致索引越界或遗漏单词。 - return语句位置错误:return放在for循环内部,处理完第一个单词就直接返回,根本不会处理后续单词,自然无法找到最高分单词。
- 字符遍历跳跃:
j += j+1会让j值跳跃增长(比如0→1→3→7...),直接跳过部分字符,导致单词分值计算不全。 - 分值计算逻辑错误:用
max()来更新value_sum是错误的,我们需要的是累加每个字母的分值,而非取当前字母分值和累加值的最大值。 - 冗余操作与初始化错误:重复执行大小写转换和字符串分割,且value_sum未在每个单词处理前重置,导致不同单词的分值混加。
修正后的代码
class Solution(object): def highest_scoring_word(self, s): # 字母分值字典 dt = {'a':1,'b':2,'c':3,'d':4,'e':5,'f':6, 'g':7,'h':8,'i':9,'j':10,'k':11,'l':12, 'm':13,'n':14,'o':15,'p':16,'q':17, 'r':18,'s':19,'t':20,'u':21,'v':22, 'w':23,'x':24,'y':25,'z':26} max_value = 0 # 统一转小写并分割为单词列表,只执行一次 words = s.lower().split() for word in words: value_sum = 0 # 每个单词处理前重置分值总和 for char in word: # 累加当前字母的分值,不存在的字符加0 value_sum += dt.get(char, 0) # 更新最高分 if value_sum > max_value: max_value = value_sum return max_value if __name__ == '__main__': p = 'abcd a' print(Solution().highest_scoring_word(p)) # 输出10
修正说明
- 调整遍历对象:直接遍历分割后的
words列表,确保每个单词都被处理。 - 移动return位置:将return放在for循环结束后,确保所有单词都计算完毕再返回最高分。
- 修正字符遍历逻辑:用for循环直接遍历单词的每个字符,避免while循环的索引错误;如果坚持用while,需将
j += j+1改为j +=1。 - 修复分值计算:改为单纯累加每个字母的分值,确保单词总分正确。
- 优化初始化与操作:将大小写转换和分割操作放在循环外,每个单词处理前重置
value_sum,保证分值计算独立。
内容的提问来源于stack exchange,提问作者user5409178
相关产品推荐
相关产品推荐

