Python实现Mastermind珠玑妙算游戏颜色匹配逻辑错误排查
Python版Mastermind游戏匹配计数异常问题修复
核心问题说明
你代码的计数逻辑存在两处明确错误,是导致示例场景下颜色对位置不对计数为0的直接原因:
- 多余的
correct_color > prev_curt_color判断:该条件仅在位置正确计数刚增加时才成立,你给出的示例中前两个匹配完成后correct_color固定为2,后续位置的判断永远无法触发elif分支,自然不会统计到错位匹配的颜色。 - 未处理重复颜色计数和已匹配颜色的排除:直接判断
player_guess[i] in color_code的逻辑没有排除已经被统计为位置正确的颜色,也没有考虑同一颜色在密码和输入中的出现次数上限,后续遇到颜色重复次数不一致的场景会出现计数错误。
修复方案
将原代码中统计匹配数量的循环段:
if correct_color != 4: for i in range(4): if player_guess[i] == color_code[i]: correct_color += 1 elif player_guess[i] != color_code[i] and player_guess[i] in color_code and correct_color > prev_curt_color: guessed_color += 1 prev_curt_color = correct_color
替换为以下两段逻辑即可:
# 第一步:先统计位置、颜色全匹配的数量,同时收集未匹配的剩余颜色 correct_color = 0 code_remaining = [] guess_remaining = [] for i in range(4): if player_guess[i] == color_code[i]: correct_color += 1 else: code_remaining.append(color_code[i]) guess_remaining.append(player_guess[i]) # 第二步:统计剩余颜色中,颜色正确位置错误的数量,按两边出现次数的最小值统计 guessed_color = 0 for color in set(guess_remaining): guessed_color += min(code_remaining.count(color), guess_remaining.count(color))
替换后你给出的测试场景(密码RGRG、输入GRRG)会得到正确结果:位置正确计数为2,错位正确计数为2。
内容的提问来源于stack exchange,提问作者CCF
相关产品推荐
相关产品推荐

