Wordle游戏字母标记逻辑错误求助:重复字母匹配异常
Wordle游戏字母匹配逻辑修复方案
问题根源
原代码仅判断字母是否存在于目标词,未考虑字母的出现次数限制。以目标词vigor(含1个r)、猜测词rover为例:最后一个r已匹配到目标词的正确位置,第一个r没有多余的r可对应,不应标记为r*,需显示原字母r。
修复后代码
hidden_word = "vigor" print(hidden_word) def get_guess_result(guess, target): result = list(guess.lower()) target_counts = {} # 统计目标词每个字母的出现次数 for char in target: target_counts[char] = target_counts.get(char, 0) + 1 # 第一轮:标记位置正确的字母,减少对应计数 for i in range(len(guess)): if guess[i].lower() == target[i]: result[i] = guess[i].upper() target_counts[target[i]] -= 1 # 第二轮:处理剩余字母,根据剩余计数判断标记 for i in range(len(guess)): # 跳过已经标记为正确的字母 if result[i].isupper(): continue char = guess[i].lower() if char in target_counts and target_counts[char] > 0: result[i] = f"{char}*" target_counts[char] -= 1 # 不在目标词的字母保持原样 else: result[i] = char return " ".join(result) counter = 0 max_attempts = 5 user_word = input("Guess the word: ") while user_word.lower() != hidden_word.lower(): print(get_guess_result(user_word, hidden_word)) counter += 1 if counter >= max_attempts: print(f"Sorry, you lose. The answer is: {hidden_word}") break user_word = input("Guess the word: ") else: print("You win!")
关键修改点
- 字母计数统计:用字典
target_counts记录目标词每个字母的剩余可用次数,避免重复匹配 - 两轮匹配逻辑:
- 第一轮优先标记位置完全正确的字母,并消耗对应字母的计数
- 第二轮处理未匹配的字母,只有当目标词还有剩余该字母时才标记为
*,否则显示原字母
- 逻辑重构:移除原函数中混乱的分支(如循环内判断整词相等、错误的mistakes累加),拆分功能为独立的结果生成函数,代码更清晰易维护
内容的提问来源于stack exchange,提问作者Oleksandr Danulchyk
相关产品推荐
相关产品推荐

