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

Scrabble游戏问题:通配符(?和*)需计0分而非匹配字母得分

解决Scrabble通配符(?/*)计0分的问题

问题根源

当前代码的核心问题在于run_scrabble函数计算得分时,将匹配后的完整单词传入score_word函数,而非原始的rack字符。这导致通配符?和*被替换成对应字母后,按字母本身的分值计算,而非0分。

比如输入a?*生成单词AND时,原逻辑会计算A(1)+N(1)+D(2)=4,但实际需求是A(1)+?(0)+*(0)=1。

解决方案

需要修改两个部分的逻辑:

  1. 调整run_scrabble中传递给score_word的参数,传入原始rack而非匹配后的单词;
  2. 更新score_word函数,基于原始rack的字符计算得分——通配符计0分,普通字母按对应分值计算。

代码修改示例

1. 修正run_scrabble的得分计算逻辑

假设原代码中向valid_words添加元素的逻辑是:

valid_words.append((matched_word, score_word(matched_word)))

将其修改为传入原始rack:

valid_words.append((matched_word, score_word(rack)))

2. 更新score_word函数

替换原有的按匹配单词计分逻辑,改为遍历原始rack的每个字符:

def score_word(rack):
    # Scrabble官方字母分值表
    letter_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
    }
    total_score = 0
    for char in rack.upper():
        if char in ('?', '*'):
            total_score += 0
        else:
            total_score += letter_scores.get(char, 0)
    return total_score

验证效果

  • 调用run_scrabble('*?')时,rack中的两个字符都是通配符,得分计算为0+0=0,符合预期;
  • 输入a?*时,得分计算为1+0+0=1,与需求一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 22:45:32