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

Python开发Wordle游戏:移除不符合绿色位匹配的单词求助

解决Wordle游戏中绿色字母过滤候选词的逻辑问题

你的代码存在几个关键逻辑错误,导致绿色字母的候选词过滤功能失效,以下是问题梳理和修正后的完整实现:

核心问题点

  • 错误将print()的返回值(None)赋值给random_word,导致后续无法获取电脑猜测的有效单词
  • 字符串是不可变类型,chosen_word[i] == random_word[i]属于无效操作,且无需修改用户选定的目标词
  • new_word_list.remove(...)逻辑完全错误,你需要的是过滤候选词列表,而非移除布尔值
  • new_word_list初始为空,未从原始词库复制内容,没有可过滤的单词基础

修正后的完整代码

from words_utf import word_list
import random
import os

# 初始化候选词库,从原始词库复制内容
new_word_list = word_list.copy()
# 获取单词长度(默认取第一个单词的长度,兼容不同长度的词库)
word_length = len(new_word_list[0]) if new_word_list else 5

display = ["_"] * word_length
end_game = False
final_word = ""

chosen_word = input("Choose a word:\n").lower()
if chosen_word not in word_list:
    print("请输入words_utf.txt文件中的单词")
else:
    while not end_game:
        current_display = final_word.join(display)
        if current_display == chosen_word:
            print("电脑赢了!")
            end_game = True
        else:
            os.system('cls')
            print(f"你选的单词: {chosen_word}")
            print(display)
            print("电脑猜测:")
            # 从候选词库中随机选猜测词,先赋值再打印
            random_word = random.choice(new_word_list)
            print(random_word)
            print(
                "G代表绿色(字母正确且位置正确)\nY代表黄色(字母正确但位置错误)\nB代表黑色(字母错误)")
            response = input("请输入你的反馈\n").lower()
            
            if len(response) == word_length and set(response).issubset({"g", "y", "b"}):
                # 收集所有绿色位置及对应字母
                green_rules = []
                for idx in range(word_length):
                    if response[idx] == "g":
                        green_rules.append((idx, chosen_word[idx]))
                        # 更新显示的正确字母
                        display[idx] = chosen_word[idx]
                
                # 过滤候选词:保留所有符合绿色位置规则的单词
                filtered_words = []
                for word in new_word_list:
                    is_valid = True
                    for pos, target_char in green_rules:
                        if word[pos] != target_char:
                            is_valid = False
                            break
                    if is_valid:
                        filtered_words.append(word)
                # 更新候选词库为过滤后的结果
                new_word_list = filtered_words

                # 后续可在此添加黄色、黑色字母的过滤逻辑
                # elif response[i] == "y":
                #     ...
                # elif response[i] == "b":
                #     ...
            else:
                print(f"无效反馈: {response}")

关键修改说明

  1. 候选词库初始化:一开始就将new_word_list设为原始词库的副本,保证有可过滤的单词基础
  2. 猜测词赋值修复:先把随机选中的词赋值给random_word再打印,避免random_word变成None
  3. 绿色规则过滤逻辑:
    • 先遍历用户反馈,记录所有绿色位置和对应的目标字母
    • 遍历候选词库,只保留在所有绿色位置上字母都匹配的单词,替换原候选词库
  4. 显示更新优化:直接用目标词的字母更新display,无需修改不可变的字符串chosen_word
  5. 输入验证优化:用issubset更清晰地判断反馈内容是否合法

后续你可以基于这个框架,继续添加黄色(字母存在但位置错误)和黑色(字母不存在)的过滤逻辑,注意处理重复字母的特殊情况(比如目标词含多个相同字母时的反馈规则)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 08:01:31