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

Python实现wrong_position函数遇测试用例失败求修复

问题分析与修复方案

你的代码存在几个关键逻辑错误,导致测试用例失败,下面逐一说明并给出修复后的实现:

原代码的核心问题

  1. 错误的开头判断:if guess.count(guess[0]) == len(guess): return 0完全不合理,比如当guess是[2,2,2,2]而code是[2,1,1,1]时,应该返回3,但这个判断会直接返回0。
  2. 重复元素的索引处理错误:使用copy_guess.index(c)只会返回当前元素第一次出现的索引,当guess中有重复数字时,会错误地用同一个索引去匹配code,导致计数混乱。
  3. 未先排除位置正确的匹配:代码直接检查数字是否存在于code中,但没有先剔除那些位置已经正确的元素,导致把位置正确的数字错误计入位置错误的计数,或者错误消耗code中的元素。

修复后的实现

正确的思路是:先算出数字和位置都正确的数量,再算出两个列表中数字的总匹配数(不管位置),用总匹配数减去完全正确的数量,就是数字正确但位置错误的数量。

def wrong_position(guess, code):
    # 计算完全匹配(数字和位置都对)的数量
    exact_matches = sum(g == c for g, c in zip(guess, code))
    
    # 统计guess中各数字的出现次数
    guess_counts = {}
    for num in guess:
        guess_counts[num] = guess_counts.get(num, 0) + 1
    
    # 统计code中各数字的出现次数
    code_counts = {}
    for num in code:
        code_counts[num] = code_counts.get(num, 0) + 1
    
    # 计算总数字匹配数(取每个数字在两个列表中出现次数的最小值求和)
    total_matches = 0
    for num in guess_counts:
        if num in code_counts:
            total_matches += min(guess_counts[num], code_counts[num])
    
    # 位置错误的数量 = 总数字匹配数 - 完全匹配数
    return total_matches - exact_matches

测试用例验证

用你给出的测试用例验证结果:

  • 测试用例12:code=[2,3,3,2],guess=[1,1,1,2]
    完全匹配数是1(最后一位2),总数字匹配数是1(仅一个2),1-1=0,符合预期。
  • 测试用例13:code=[2,3,3,2],guess=[1,1,3,2]
    完全匹配数是2(第三位3、第四位2),总数字匹配数是2(一个3、一个2),2-2=0,符合预期。
  • 测试用例17:code=[9,9,9,3],guess=[3,9,9,2]
    完全匹配数是2(第二位、第三位的9),总数字匹配数是3(两个9、一个3),3-2=1,符合预期。
  • 测试用例20:code=[3,5,4,4],guess=[1,4,2,4]
    完全匹配数是1(第四位的4),总数字匹配数是2(两个4),2-1=1,符合预期。

简化实现(可选)

如果允许使用标准库,可以用collections.defaultdict简化计数逻辑:

from collections import defaultdict

def wrong_position(guess, code):
    exact_matches = sum(g == c for g, c in zip(guess, code))
    
    guess_counts = defaultdict(int)
    code_counts = defaultdict(int)
    
    for num in guess:
        guess_counts[num] += 1
    for num in code:
        code_counts[num] += 1
    
    total_matches = sum(min(guess_counts[num], code_counts[num]) for num in guess_counts if num in code_counts)
    
    return total_matches - exact_matches

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 11:42:03