第 3 课:⚔️ 初遇妖怪
🎯 学习目标
- 掌握 while 循环(只要条件成立就重复执行)
- 学会用 break 跳出循环
- 用 import random 引入随机数("魔法咒语")
- 实现简单的回合制战斗系统
📚 家长预习指南(5 分钟)
本课核心要点
while 条件:— "只要条件还成立,就一直做",像 Scratch 的"重复直到"break— "打断循环立刻跳出"import random— 像念一句魔法咒语,让 Python 获得产生随机数的能力random.randint(1, 10)— 生成 1 到 10 之间的随机整数
常见问题
- 无限循环(while True 忘了 break)→ 按 Ctrl+C 可以强制停止
- import 要写在文件最开头 → 口诀:"咒语放最前"
您的角色
🟢 领航员
🔗 Scratch ↔ Python 对照
| Scratch 积木 | Python 代码 | 说明 |
|---|---|---|
| 重复执行直到 ◇ | while not 条件: |
一直重复直到条件成立 |
| 重复执行(无限) | while True: |
永远执行(需要 break 退出) |
随机取数 1 到 10 |
random.randint(1, 10) |
需要先 import random |
📖 活动模块
模块 A — 随机魔法(15 分钟)
目标
学习 import random,用随机数生成妖怪数据
- 介绍 import:"想象你有个大工具箱,
import就是伸手去拿一个工具。import random就是拿出'随机数'工具。" - 在文件最顶部添加:
import random - 练习生成随机数:
import random
monster_attack = random.randint(5, 15)
print(f"妖怪的攻击力是:{monster_attack}")
运行几次——每次数字都不一样!
模块 B — 回合制战斗(20 分钟)
目标
用 while 循环实现侠客和妖怪轮流攻击
引导孩子写战斗逻辑:
# 妖怪出现
monster_name = "狐妖"
monster_hp = 30
monster_attack = 8
print(f"\n⚔️ 一只{monster_name}挡住了去路!")
print(f"{monster_name}的生命值:{monster_hp} 攻击力:{monster_attack}")
# 回合制战斗
while hp > 0 and monster_hp > 0:
# 侠客攻击
damage = random.randint(5, attack)
monster_hp = monster_hp - damage
print(f"\n{name}发动攻击!造成 {damage} 点伤害!")
print(f"{monster_name}剩余生命值:{max(monster_hp, 0)}")
if monster_hp <= 0:
print(f"\n🎉 {monster_name}被击败了!")
break
# 妖怪反击
m_damage = random.randint(3, monster_attack)
hp = hp - m_damage
print(f"{monster_name}反击!造成 {m_damage} 点伤害!")
print(f"{name}剩余生命值:{max(hp, 0)}")
模块 C — 战斗可视化(10 分钟)
目标
运行战斗,体验结果
- 运行代码,看回合过程一行行打印出来
- 多运行几次——因为有随机数,每次战斗结果都不同!
- 加入胜利/落败判断:
if hp > 0:
silver = silver + 10
print(f"🎉 获得 10 银两!当前银两:{silver}")
else:
print(f"💀 {name}落败了...回城休息吧")
🎮 运行游戏:打赢妖怪的成就感是本课最大的 fun moment!
🤖 AI 环节(家长演示)
阶段
🟢 家长演示
任务
让 AI 帮忙生成几个中国神话妖怪的名称和描述
示例提示词
帮我想 5 个中国神话里的妖怪名称,每个配一句描述,适合四年级孩子的文字冒险游戏。
✅ 最小完成目标
- [ ] 能通过 import random 生成随机数
- [ ] 遇到一只妖怪,完成回合制战斗
- [ ] 显示战斗过程(攻击、伤害、剩余生命值)
⭐ 扩展挑战
- 让妖怪的攻击力每回合随机变化
- 添加"逃跑"选项(break 跳出战斗循环)
- 胜利后获得银两
🐛 常见错误提示
| 错误 | 原因 | 解决 |
|---|---|---|
ModuleNotFoundError |
import random 没写或写错位置 | 确保 import random 在文件最顶部 |
| 无限循环停不下来 | while 条件永远为 True 且没有 break | 按 Ctrl+C 停止,检查循环条件 |
| 生命值变负数 | 没用 max() 限制最低为 0 | 显示时用 max(hp, 0) |