news 2026/9/8 19:50:02

用Python实现Wordle AI猜词:三种策略对比与胜率分析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用Python实现Wordle AI猜词:三种策略对比与胜率分析

最近在整理算法小项目时,想到了一个特别适合练手的主题:把 Wordle 猜词游戏用 Python 实现一遍,再让不同的“AI 选手”自动玩这个游戏,看谁的胜率更高、平均猜中轮数更少。这个项目看起来简单,但拆开后涉及反馈判定、候选词过滤、信息熵计算、批量模拟评估,正好可以把枚举、贪心、信息论这几个基础话题串起来。如果你刚开始学算法,或者想找一个不需要大模型也能讲清楚“AI 思路”的项目,这篇教程应该很适合你。

市面上很多“AI 猜词”项目直接接大模型 API,让模型根据历史反馈猜下一个词。但这一篇会先绕开大模型,用经典算法实现三种策略:随机猜词、词频优先、信息熵最大化。这样能直观看到不同策略对胜率的影响,也能自己动手改策略、加优化。等基础版本跑通后,再考虑把大模型作为竞速选手接入对比,也是顺理成章的事。


1. 项目背景:Wordle 与 AI 猜词挑战

1.1 Wordle 游戏规则

Wordle 是一款猜单词的小游戏。系统会随机选择一个五字母英文单词作为答案,玩家在六次机会内不断猜测。每次猜测后,游戏会给出三色反馈:

  • 绿色:字母正确,且位置也正确。
  • 黄色:字母在答案中存在,但位置不对。
  • 灰色:字母不在答案中,或者超出了答案中该字母的数量。

举个例子,假设答案是apple,猜测是apply,那么反馈为:

答案猜测反馈解释
appleapply绿 绿 绿 绿 灰前四个字母位置正确,y 不在答案中

再看一个重复字母的例子。假设答案是eerie,猜测是eject

答案猜测反馈解释
eerieeject绿 灰 黄 灰 灰第一个 e 位置正确,第三个猜测位置的 e 存在但位置不对

这个规则看起来简单,但重复字母的处理很容易出错。后面实现make_feedback时会专门说明。

1.2 为什么叫“小型 AI 挑战”

这里的“AI 挑战”并不是指用神经网络训练一个模型,而是指让程序自主决策:根据之前的反馈,从候选词集合中筛选答案,并决定下一步猜什么。

这个问题的本质是“主动学习”或“最优实验设计”:每一步选择一个猜测,目标是尽快缩小答案范围。经典的信息熵贪心策略是其中的代表方法,它不依赖任何外部模型,也能在真实游戏中达到很高的胜率。

1.3 本文最终完成的功能

整个项目会包含四个文件:

  • wordle.py:游戏核心,负责计算三色反馈和单局流程。
  • words.py:演示词表,内置 100 个五字母英文单词。
  • player.py:三种 AI 猜词策略。
  • main.py:命令行入口,支持批量模拟和人机对战。

最终你可以用一条命令让 AI 自动玩几百局,并统计胜率和平均猜中轮数,也可以自己扮演玩家,在终端里玩一局原汁原味的 Wordle。


2. 环境准备与项目结构

2.1 环境说明

本项目使用 Python 标准库实现,不依赖任何第三方包。理论上 Python 3.8 及以上版本都能直接运行。我会用到argparserandomcollections.Countermath这些模块,都属于标准库。

如果你的机器上有多个 Python 版本,创建虚拟环境再运行更稳妥:

python -m venv venv source venv/bin/activate # Windows 下使用 venv\Scripts\activate

当然,本项目零第三方依赖,不创建虚拟环境也可以直接运行。

2.2 项目目录结构

建议新建一个wordle-ai-challenge目录,所有代码都放在里面:

wordle-ai-challenge/ ├── main.py # 命令行入口 ├── player.py # AI 猜词策略 ├── wordle.py # Wordle 游戏核心 └── words.py # 演示词表

每个文件的职责非常清晰:

  • words.py只负责提供词表。
  • wordle.py只负责规则判定。
  • player.py实现不同的决策算法。
  • main.py负责把前面的模块串起来,提供用户交互入口。

这样拆分的好处是:之后如果想把player.py里的策略换成大模型 API,只需要保证guess()update()两个接口不变即可,游戏核心完全不用改动。


3. 游戏规则与反馈判定

3.1 反馈判定的核心难点

实现 Wordle 反馈判定,最大的坑是重复字母。

例如答案apple,猜测ample

  • a在 0 位,正确,绿色。
  • m不在答案中,灰色。
  • p在 2 位,答案 2 位也是p,绿色。
  • l在 3 位,绿色。
  • e在 4 位,绿色。

但如果猜测是peachanswerapple,情况就会复杂一些。guess中出现了pea,这些字母都存在于答案中,但不能无限给黄色,因为答案里的每个字母只能匹配一次。

正确的处理方式分两步:

  1. 先扫描一次,把所有“字母和位置都正确”的位置标记为绿色。
  2. 再扫描一次,对非绿色位置,检查该字母是否还“剩余可用”,如果可用就标记为黄色,并从剩余集合中移除;否则标记为灰色。

这样可以避免把同一个答案字母重复匹配到多个猜测字母上。

3.2 实现游戏核心

创建wordle.py

""" Wordle 游戏核心逻辑:反馈判定与单局游戏流程。 """ from typing import List, Tuple, Optional GREEN = "green" YELLOW = "yellow" GRAY = "gray" MAX_GUESSES = 6 Feedback = Tuple[str, ...] def make_feedback(secret: str, guess: str) -> Feedback: """ 计算一次猜测的反馈。 - green:字母正确且位置正确 - yellow:字母存在于答案中,但位置不对 - gray:字母不在答案中,或超出答案中该字母的剩余数量 先标记所有 green,再为 yellow 分配剩余字母,确保重复字母处理正确。 """ if len(secret) != len(guess): raise ValueError("secret 和 guess 长度不一致") result: List[str] = [GRAY] * len(secret) unmatched: List[str] = [] # 第一遍:标记 green,并收集非 green 位置的答案字母 for idx, (s, g) in enumerate(zip(secret, guess)): if s == g: result[idx] = GREEN else: unmatched.append(s) # 第二遍:为剩余位置分配 yellow / gray for idx, (s, g) in enumerate(zip(secret, guess)): if result[idx] == GREEN: continue if g in unmatched: result[idx] = YELLOW unmatched.remove(g) else: result[idx] = GRAY return tuple(result) def is_valid_guess(guess: str, word_list) -> bool: return len(guess) == 5 and guess in word_list def play_once(secret: str, player, word_list, max_guesses: int = MAX_GUESSES) -> Optional[int]: """ 使用指定 player 完成一局游戏。 返回猜中所
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/31 4:16:14

风电叶片微小缺陷检测数据集:VOC+YOLO双格式工业级实践

简介:风力发电机叶片表面缺陷(如裂纹、腐蚀、涂层剥落)的早期识别,是工业视觉检测中的典型小目标检测问题。其核心挑战在于可见光条件下毫米级缺陷在远距离航拍图像中的低信噪比、多尺度与强干扰特性。基于深度学习的目标检测技术…

作者头像 李华
网站建设 2026/8/30 23:15:00

轻量级LLM评测工具:基于OpenRouter的模型对比与自动化基准测试实践

这次我们看一个轻量级开源 LLM Benchmark 工具,核心场景是把 OpenRouter 上的任意模型拉到同一套评测题里,批量跑完,最后输出一张可比对的报告。和本地跑权重最大的区别是:它不需要高配显卡,推理发生在模型提供方&…

作者头像 李华
网站建设 2026/8/31 19:40:44

从四足机器人到ROS2:宇树技术栈拆解与运动控制实践

最近机器人赛道的热度,很大程度是围绕宇树这类公司展开的。IPO消息传出后,社区里讨论最多的是估值、股权和“谁能靠它赚钱”。但如果你是一名写代码、调机器人、做部署的工程师,这些问题其实和你关系不大。真正值得关注的是另一个问题&#x…

作者头像 李华
网站建设 2026/9/2 11:16:39

基于微信云开发的云笔记小程序:从架构设计到部署上线的完整实践

简介:云开发作为一种创新的后端服务模式,其核心原理在于将服务器、数据库和存储等基础设施抽象为服务,开发者无需管理服务器即可快速构建应用。这种模式的技术价值在于极大降低了个人开发者和小团队的运维与开发门槛,实现了快速原…

作者头像 李华
网站建设 2026/8/30 16:56:15

QQ 空间说说导出完全指南:历史说说一次性存成 Excel 和网页版

QQ 空间说说导出完全指南:历史说说一次性存成 Excel 和网页版 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory GetQzonehistory 是一款面向想把 QQ 空间旧动态备份下来的普通…

作者头像 李华