Python实现Wordle游戏:重复字母的单词对比逻辑问题求助
解决Wordle游戏中重复字母的对比问题
原函数的核心问题是没跟踪目标单词中每个字母的可用数量,导致重复字母被错误标记。比如目标单词是apple(仅含1个a),用户输入aaple时,原函数会把第二个a标记为小写,但实际上这个a是多余的,应该显示下划线。
修改后的对比函数
def comparison_func(user_input, random_word): # 统一转为小写,避免大小写干扰 user_lower = user_input.lower() target_lower = random_word.lower() output = [""] * 5 # 统计目标单词中每个字母的出现次数 letter_count = {} for char in target_lower: letter_count[char] = letter_count.get(char, 0) + 1 # 第一步:处理位置完全匹配的字母 for x in range(5): if user_lower[x] == target_lower[x]: output[x] = user_lower[x].upper() # 匹配后减少对应字母的可用次数 letter_count[user_lower[x]] -= 1 # 第二步:处理位置不匹配但存在的字母 for x in range(5): # 跳过已经匹配正确的位置 if output[x] != "": continue current_char = user_lower[x] if current_char in letter_count and letter_count[current_char] > 0: output[x] = current_char.lower() letter_count[current_char] -= 1 else: output[x] = "_" return "".join(output)
代码说明
- 字母计数:用字典
letter_count记录目标单词中每个字母的剩余可用次数,避免重复匹配。 - 两步匹配:
- 先遍历所有位置,标记完全匹配的字母为大写,并减少对应字母的可用次数。
- 再遍历剩余未匹配的位置,检查当前字母是否还有剩余可用次数,有则标记为小写,否则标记为下划线。
测试示例
- 目标单词:
apple,用户输入:aaple
输出:A_Ppl(第一个A匹配正确,第二个a因目标已无剩余a显示下划线,p、p、l分别匹配正确或存在) - 目标单词:
teeth,用户输入:treet
输出:T_rE_(第一个T匹配正确,r不存在,第二个e匹配正确,e已无剩余,最后一个t不存在)
内容的提问来源于stack exchange,提问作者Igneous Chunk
相关产品推荐
相关产品推荐

