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

Python编写珠玑妙算(Mastermind)校验函数如何处理重复值问题

珠玑妙算校验函数修复方案

原代码问题根源

  • 使用list.index()获取元素位置,该方法遇到重复值时只会返回第一个匹配项的索引,无法区分重复元素的不同位置
  • 没有对已完成匹配的答案元素做标记,同一个答案元素会被多次匹配,导致统计结果虚高

正确实现逻辑

  1. 优先统计**完全匹配(位置、数值均正确)**的条目,同时将已匹配的位置标记为已使用,避免后续重复统计
  2. 分别统计未匹配的答案、猜测列表中各数字的出现频次,每个数字取两个频次的最小值累加,得到数值正确、位置错误的总数量

可直接使用的代码

def check_guess(guess, anslist):
    # guess和anslist均为单字符组成的列表,对应猜测值和答案的每一位
    true_matches = 0
    part_matches = 0
    # 标记已匹配的位置,避免重复统计
    ans_used = [False] * len(anslist)
    guess_used = [False] * len(guess)

    # 第一步:统计完全匹配
    for idx in range(len(guess)):
        if guess[idx] == anslist[idx]:
            true_matches += 1
            ans_used[idx] = True
            guess_used[idx] = True

    # 统计剩余未匹配答案的数字频次
    ans_remain_freq = {}
    for idx in range(len(anslist)):
        if not ans_used[idx]:
            ans_remain_freq[anslist[idx]] = ans_remain_freq.get(anslist[idx], 0) + 1

    # 第二步:统计部分匹配
    for idx in range(len(guess)):
        current_num = guess[idx]
        if not guess_used[idx] and current_num in ans_remain_freq and ans_remain_freq[current_num] > 0:
            part_matches += 1
            ans_remain_freq[current_num] -= 1

    return true_matches, part_matches

测试验证

以你给出的场景测试:

答案:['5','1','9']
猜测:['5','9','9']
调用函数返回结果为(2, 0),与预期输出一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 10:54:08