08. 游戏小工坊
学了这么多 Python 技能,是时候用它们来做游戏了!本章我们用条件判断、循环、列表、随机数……做一个迷你游戏厅 🎮
🕹️ Python 魔法学院 · 游戏工坊(特别篇)
你推开魔法学院深处一扇吱呀作响的木门,发现了一个被遗忘的游戏厅。角落里摆着三台古老的魔法游戏机——它们不用投币,只需要代码来驱动。
今天你将用 Python 复活这三台游戏机:猜数字、石头剪刀布、掷骰子大比拼。写出的代码就是游戏,游戏就是你写的代码。准备好了吗?
8.1 游戏一:猜数字 🔢¶
还记得之前的猜数字雏形吗?加上循环,它变成了真正的游戏!
📋 游戏规则¶
🎯 猜数字 —— 游戏规则
────────────────────────────
1. 电脑心里想一个 1~100 之间的秘密数字
2. 你来猜这个数字是多少
3. 电脑会告诉你:"太大了"还是"太小了"
4. 根据提示继续猜,直到猜中!
5. 猜中后,根据次数评定你的等级 🏆
💡 制胜策略:二分查找法!
先从 50 开始(一半),如果大了就猜 25(再一半),
如果小了就猜 75……每次砍掉一半,最快 7 次以内必中!💡 试试看:改
secret的范围(比如 1~50),或者改guesses列表,用不同的策略猜。
🧠 思考时间¶
停下来想一想:
为什么二分查找这么快? 普通猜法(1, 2, 3...)最多猜 100 次;二分查找每次砍一半,最多只要 7 次!100 → 50 → 25 → 12 → 6 → 3 → 1。这就是算法的力量。
else跟在for后面是什么意思? 这可不是if的else!for...else的意思是:如果循环正常结束(没有break),就执行else里的代码。猜中了会break,所以只有没猜中才会走else。
🎮 难度升级¶
⭐ 简单:
random.randint(1, 20),允许猜 10 次⭐⭐ 中等:
random.randint(1, 100),允许猜 8 次⭐⭐⭐ 困难:
random.randint(1, 1000),允许猜 10 次🔥 地狱模式: 猜错了,范围随机变化!
secret = random.randint(1, 100)每次都重新生成……
试试把猜数字改成让玩家自己输入数字(用列表模拟),然后换成不同的难度!
8.2 游戏二:石头剪刀布 ✊✋✌️¶
📋 游戏规则¶
✊✋✌️ 石头剪刀布 —— 游戏规则
────────────────────────────
1. 石头 赢 剪刀 ✊ > ✌️
2. 剪刀 赢 布 ✌️ > ✋
3. 布 赢 石头 ✋ > ✊
4. 相同 = 平局
📊 赛制:5局3胜!💡 试试看:改
player_moves列表,试试不同的出拳策略!比如全出石头,会不会赢?
🧠 思考时间¶
判断输赢的逻辑是什么? 仔细看那个长长的不等式:
(player == "石头" and computer == "剪刀") or ...。其实它在说:“你出石头且电脑出剪刀” 就是你赢。三种赢的情况摆在一起就行了。有没有更聪明的写法?提示:用("石头", "剪刀") in [("石头","剪刀"), ("剪刀","布"), ("布","石头")]试试!如果全出石头会怎样? 电脑是随机的(
random.choice),所以长期来看电脑会赢大约 1/3、输 1/3、平 1/3。这就是概率!
🎮 难度升级¶
⭐ 简单: 把
rounds改成 3(3局2胜),减少出拳选项为["石头", "布"]⭐⭐ 中等: 加入记分板!每次比赛后打印"连胜记录",用
if player_score > computer_score * 2:判断碾压局⭐⭐⭐ 困难: 电脑会"学习"!统计你出什么最多,下次电脑针对你:
Python14准备加载编辑器...🔧 正在准备编程环境...0%●等待编辑器...○等待 Python 环境...
8.3 游戏三:掷骰子大比拼 🎲¶
📋 游戏规则¶
🎲 掷骰子大比拼 —— 游戏规则
────────────────────────────
1. 你和电脑各掷 2 个骰子(每个 1~6 点)
2. 比较两个骰子的点数总和
3. 点数大的获胜!
4. 额外玩法:1000 次概率实验,看看每个点数出现多少次
🎓 数学知识:两个骰子的最小和是 2(1+1),最大是 12(6+6),
但出现概率不同!和为 7 有 6 种组合,和为 2 只有 1 种。💡 试试看:改
roll_dice(2)中的数字,试试掷 3 个或 5 个骰子!观察概率实验——掷的次数越多,各点数出现的比例越接近。
🧠 思考时间¶
为什么概率实验的柱子差不多高? 因为每个骰子的 1~6 点是等可能的。掷 1000 次,每个点数大约出现
1000 ÷ 6 ≈ 167次。掷的次数越多,越接近这个理论值——这就是大数定律!draw_dice函数是怎么画出骰子的? 它用字典把 1~6 每种点数映射到三行 ASCII 艺术。"●"是实心圆点。你看——把图案存在字典里,用点数当钥匙一查就出来,多优雅!
🎮 难度升级¶
⭐ 简单: 只掷 1 个骰子,比大小
⭐⭐ 中等: 掷 3 个骰子,统计总和中哪个值最常出现
⭐⭐⭐ 困难: 加入"押注"系统!猜大(≥10)或猜小(≤9),赌对加分:
Python14准备加载编辑器...🔧 正在准备编程环境...0%●等待编辑器...○等待 Python 环境...
8.4 游戏厅整合——一键启动¶
把三个游戏打包成一个可选菜单:
💡 常见误区:三个容易踩的坑¶
本章我们大量用了 random 模块,以下是初学者常犯的错误:
误区 1:random.randint() 两头都包含
不是 range(1, 6) 那样不含末尾!randint 是 inclusive(包含两端)。
误区 2:忘记 import random
每个 Python 文件用到 random 时,都需要在顶部写 import random。这不是"啰嗦",而是告诉 Python 你要用这个工具箱。
误区 3:字符串比较的陷阱
如果换成:
🧠 关键记忆:
"3"(字符串)和3(整数)是两种完全不同的东西,就像"三"这个汉字和数字3一样——看起来表达同一个意思,但 Python 眼里是完全不同的数据!
🧠 思考时间(本章总结)¶
学完三个游戏,你其实已经掌握了:
✅
import random— 引入随机数✅
random.randint(a, b)— 生成 a 到 b 的随机整数✅
random.choice(列表)— 从列表里随机选一个✅
if/elif/else— 判断输赢✅
for循环 — 重复比赛✅ 列表和字典 — 存储游戏数据
✅ 函数定义 —
def roll_dice():
这三个游戏看起来简单,但它们包含了所有编程的基本功。下次你自己设计游戏时,这些就是你的"乐高积木"——想怎么拼就怎么拼!
🎯 恭喜!你现在有一个可以随时玩的迷你游戏厅了。试着改改代码:调整难度、换出拳策略、加更多游戏……这是你自己的游戏厅,想怎么改就怎么改!