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

PHP Scrabble代码问题求助:计算“Harambe”仅得3分

排查Scrabble计分功能的常见问题

嘿,我来帮你揪出这个计分错误的问题——毕竟我之前开发类似功能时也踩过不少坑!你说计算“Harambe”只返回3分,这明显不对(正确分值应该是14分),大概率是遗漏了下面这些关键逻辑:

最可能的问题:字母大小写未统一处理

Scrabble的计分是不区分大小写的,但如果你的分值映射数组(比如存的是小写字母的分值),而代码里没有把输入单词转成统一大小写,那像H、R、M这些大写字母就找不到对应的分值,会被默认计0分。这样一来,只有a、a、e这三个小写字母能拿到1分,总和刚好是3分!

其他可能的遗漏点

  • 分值映射表错误或不完整:比如你的数组里漏写了h、m、b这些字母的分值,或者把它们的分值设成了0,导致这些字母没贡献分数。
  • 循环逻辑漏洞:比如你只遍历了单词的前几个字符,或者循环条件写错了(比如用了错误的索引范围),导致只计算了部分字母的分值。
  • 未处理非字母字符?:不过这个单词里没有特殊字符,这个可能性较低,但如果你的代码有过滤逻辑,也可能误删了有效字母。

快速排查步骤

  1. 统一大小写:在计算前把输入单词转成全小写(或全大写),比如:
    $word = strtolower($word);
    
  2. 打印调试每个字母的分值:在循环里输出每个字符对应的分值,看看哪些字母没拿到正确分数:
    foreach(str_split($word) as $char) {
        $score = isset($scores[$char]) ? $scores[$char] : 0;
        echo "字符 $char 的分值:$score\n";
    }
    
  3. 核对官方分值表:确认你的分值数组是正确的,Scrabble官方分值里:h=4、m=3、b=3、r=1,这些别写错。
  4. 检查循环完整性:确保遍历了单词的所有字符,推荐用foreach(str_split($word) as $char)这种方式,避免索引错误。

正确的示例代码片段

参考这个实现,应该能得到正确结果:

function calculateScrabbleScore($word) {
    // Scrabble官方分值映射
    $scores = [
        'a' => 1, 'b' => 3, 'c' => 3, 'd' => 2, 'e' => 1,
        'f' => 4, 'g' => 2, 'h' => 4, 'i' => 1, 'j' => 8,
        'k' => 5, 'l' => 1, 'm' => 3, 'n' => 1, 'o' => 1,
        'p' => 3, 'q' => 10, 'r' => 1, 's' => 1, 't' => 1,
        'u' => 1, 'v' => 4, 'w' => 4, 'x' => 8, 'y' => 4,
        'z' => 10
    ];
    
    $totalScore = 0;
    $lowercaseWord = strtolower(trim($word)); // 统一转小写并去除首尾空格
    
    foreach(str_split($lowercaseWord) as $char) {
        // 只累加存在于分值表中的字母分数
        if(array_key_exists($char, $scores)) {
            $totalScore += $scores[$char];
        }
    }
    
    return $totalScore;
}

// 测试Harambe:4+1+1+1+3+3+1 = 14
echo calculateScrabbleScore("Harambe"); // 输出14

内容的提问来源于stack exchange,提问作者Engjëll Bislimi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:18:14