You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何我的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

修正说明

  1. 调整遍历对象:直接遍历分割后的words列表,确保每个单词都被处理。
  2. 移动return位置:将return放在for循环结束后,确保所有单词都计算完毕再返回最高分。
  3. 修正字符遍历逻辑:用for循环直接遍历单词的每个字符,避免while循环的索引错误;如果坚持用while,需将j += j+1改为j +=1。
  4. 修复分值计算:改为单纯累加每个字母的分值,确保单词总分正确。
  5. 优化初始化与操作:将大小写转换和分割操作放在循环外,每个单词处理前重置value_sum,保证分值计算独立。

内容的提问来源于stack exchange,提问作者user5409178

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 05:50:44