如果孩子出去玩了一圈,回家没有第一时间要平板,而是默默递给你一个自己做的小东西,脸上还带着“你快看看”的表情,这多半不是普通日常,而是一个很值得抓住的编程启蒙信号。很多人把“沉浸式投喂”理解成刷短视频、看动画的一种状态,但在亲子编程里,这个词可以有另一层含义:孩子从“只看别人的作品”,变成“自己做出作品来投喂给家长看”。
这篇文章不打算跟你谈抽象的教育理念,而是想用一套可落地的亲子编程项目,帮你把孩子的兴趣接到真实代码上。我们会从环境准备开始,依次完成三个用 Python 编写的小项目:用 turtle 画一幅画、做一个猜数字游戏、再实现一个能循环交互的“沉浸式投喂小剧场”。整个过程不要求家长是资深程序员,只需要有一点耐心,能陪孩子运行代码、改参数、看效果。本文的所有代码都基于 Python 3,语法覆盖循环、条件判断、随机数、字典和基本输入输出,适合小学中高年级及以上、有一点打字基础的孩子。
1. 这不是带娃段子,而是编程启蒙的关键拐点
“闺女玩回来默默递给我”这种场景,放在短视频平台里是一条很有共鸣的生活日常,放在技术视角下却可以读出一个明确的信号:孩子玩了一圈,脑子里装的不是“这游戏好好玩”,而是“我也想做一个东西”。
这种信号之所以珍贵,是因为很多家长给孩子报编程课、买学习机,真正卡住的往往不是工具贵不贵,而是孩子的内部动机还不明确。孩子没有自己想表达的内容时,你让他坐在电脑前背语法、记变量,他十分钟就会跑掉。反过来,如果孩子已经有了一个想呈现给家长看的小创意,哪怕这个创意只是“用鼠标画一朵花”或者“让电脑猜我心里想的数字”,学习路径都会顺很多。
所以如果一定要给这类场景下一个判断,我的判断是:它不是让你去报班的信号,而是让你把电脑递给孩子、陪他跑第一段代码的信号。孩子不需要先学完 Python 基础才能做作品,恰恰相反,他需要先做出一个能运行、能看到结果的小作品,才会愿意回头补齐基础。
这篇文章里的三个项目,难度是递进的。第一个项目只需要照抄代码、改几个数字,重点在于跑通“代码变画面”的完整流程;第二个项目开始涉及逻辑判断和随机数,孩子能体会到程序和人的博弈;第三个项目把循环、字典和状态变化结合在一起,让家长和孩子都能直观看到程序的“反馈回路”。三个项目全部跑通后,孩子再去看一本书、学一个知识点,心态会完全不一样。
许多家长担心自己不懂编程,教不了孩子。这个顾虑在这三个项目里并不成立。你不需要会写代码,只需要会用终端运行命令、能陪孩子一起读报错信息、愿意和他一起改参数看变化。真正的亲子编程,并不要求家长当老师,而是要求家长当第一个用户,当那个愿意被孩子“投喂”的人。
2. 儿童编程入门工具怎么选:Scratch、Python turtle 还是游戏引擎
在开始动手之前,先解决一个常见问题:为什么选择了 Python turtle,而不是现在更流行的 Scratch,或者很炫酷的游戏引擎。
把孩子常用的编程入门方式放在一起看,大致有这几类:图形化编程、Python 标准库绘图、Python 游戏框架、硬件编程。它们没有绝对的优劣,区别在于孩子当前更需要的反馈类型。
| 工具方向 | 代表工具 | 主要反馈形式 | 适合培养的能力 | 门槛 |
|---|---|---|---|---|
| 图形化积木 | Scratch、编程猫 | 角色动起来、舞台变化 | 逻辑拼搭、事件思维 | 低 |
| 代码绘图 | Python turtle | 画笔在窗口里移动并留下轨迹 | 代码顺序、循环、坐标感 | 中低 |
| 文本小游戏 | Python 控制台程序 | 命令行交互、文字反馈 | 输入输出、分支循环 | 中 |
| 游戏框架 | Pygame、Pygame Zero | 窗口游戏、键盘鼠标交互 | 对象思维、事件处理 | 中高 |
| 硬件编程 | micro:bit、Arduino | 真实硬件亮灯、发声、运动 | 物理感知、传感器逻辑 | 中高 |
Scratch 最大的优势是零输入负担,拖拽积木就能搭出动画和游戏,对幼龄孩子很友好。但它也有一个容易被忽略的问题:当孩子习惯了在积木库里找“如果”“重复执行”,有一天要切换到 Python 时,会突然发现连一个最简单的循环都需要手敲,这种落差会让部分孩子产生挫败感。
Python turtle 刚好位于图形化编程和纯文本编程之间。它仍然是真实的 Python 代码,但结果却是视觉化的:一行t.forward(100)就能看到画笔往前走 100 步。这种“改动代码、立刻看到画面变化”的反馈,非常接近 Scratch 的即时性,但孩子用的是真代码。从学习路径看,Python 语法更接近行业通用语言,孩子后续转向数据分析、人工智能、Web 开发,不需要再推翻重来。
那为什么不直接上 Pygame 做游戏?因为 Pygame 涉及窗口初始化、事件循环、图片加载、碰撞检测等概念,对一个刚接触代码的孩子来说,知识点密度太高。一旦卡住,孩子很难分清问题出在“语法写错”还是“游戏规则实现不了”。Pygturtle 和文本小游戏的目的很单纯:让第一堂课只聚焦“代码能跑、我有控制权”这两件事。
本文的选择策略是:先用 turtle 建立视觉反馈,再用两个文本小游戏强化逻辑。如果你家孩子已经比较熟悉 Scratch,也可以直接让他对比一下同一个“猜数字”游戏在 Scratch 里如何实现、在 Python 里如何实现,这种迁移本身就是很好的学习方式。
3. 环境准备与前置条件:安装 Python 并建立项目文件夹
开始写代码之前,先把环境准备好。这套三个项目不依赖第三方库,全部使用 Python 标准库,所以安装过程非常简单,关键是确保安装的是官方 Python,而不是某个手机 App 或精简版环境。
3.1 安装 Python
访问 Python 官方网站,下载当前最新的 Python 3 稳定版。本文中的代码使用 Python 3.8 以上版本均能正常运行。安装时有两个细节需要留意。
第一,在 Windows 安装向导的第一个界面,务必勾选“Add Python to PATH”,否则后续在终端里输入python会提示找不到命令。第二,macOS 用户可以使用官方安装包或 Homebrew 安装,不建议从 App Store 下载版本过旧的 Python。
安装完成后,打开终端验证:
python --version如果系统里同时存在 Python 2,可能需要使用python3:
python3 --version只要能看到类似Python 3.x.x的输出,就说明环境正常。
3.2 创建项目文件夹
建议为孩子的每个项目单独创建一个文件夹,并用英文命名,避免路径中出现中文或空格带来的麻烦。这里先在桌面上创建一个kids_code文件夹,以后所有项目都放进来。
mkdir kids_code cd kids_code后面的三个示例会分别保存为三个文件:project1_sunny_grass.py、project2_guess_number.py、project3_feed_pet.py。文件名不要命名为turtle.py或random.py,因为这会和 Python 内置模块重名,导致import turtle或import random时导入到自己的文件,程序会报错。这个坑在后面的常见问题部分会再强调一次。
3.3 选择编辑器
代码编辑器不需要一开始就上重型 IDE。Windows 上可以用系统自带的记事本,但体验比较差,建议安装一个免费且对新手友好的编辑器。Visual Studio Code 是比较稳妥的选择,安装后打开kids_code文件夹,再安装官方 Python 扩展,就能获得语法高亮和运行按钮。
如果家长希望环境更简单,也可以使用 Thonny,它自带 Python 环境,界面更像一个儿童友好的开发工具,对小学生来说学习成本更低。本文的操作演示以终端命令为主,无论用什么编辑器,核心流程都是一样的。
编辑器选好之后,把第一份代码保存到文件夹里,就可以进入第一个项目了。
4. 核心项目拆解:从“递给我一幅画”到“投喂一个小剧场”
三个项目不是随手设计的,它们共同完成了一次从图像到文本、从单向输出到双向互动的跨度。
第一个项目是 turtle 绘图。孩子运行程序后,屏幕上会画出一片草地、一个太阳和几朵小花。这个项目的本质是“代码控制一个虚拟画笔”。孩子会看到,程序的执行顺序决定了画笔的先后动作,循环可以让重复的绘制变得很短。运行结束后,孩子可以把画布截图,做成一张“递给你”的电子贺卡。这里对应的正是那个生活场景里最朴素的动作:把作品亲手递到家长面前。
第二个项目是猜数字。程序随机生成一个 1 到 100 的数字,玩家通过输入数字,不断缩小范围,直到猜中。这个项目里开始出现真正的“人机交互”:程序会等待用户输入,并根据输入给出不同的反馈。孩子需要理解三个关键点:随机数不固定、循环在什么条件下结束、不同类型的输入会导致程序走向不同分支。
第三个项目是沉浸式投喂小剧场。它的交互感比猜数字更丰富。程序里有一只小动物,有饱腹值和心情值两个属性,孩子可以输入“小鱼干”“猫粮”“摸摸头”“玩球”等动作,每个动作会对属性产生不同影响。程序不会一次结束,而会进入一个持续循环,玩家需要不断观察状态并决定下一步动作。这个项目非常形象地解释了什么叫“状态机”:程序内部始终记录着一组状态,操作改变状态,新的状态又会影响后续反馈。
这三个项目叠加起来,孩子能看到一个完整的成长路径:先学会让电脑展示画面,再学会让电脑与人对答,最后学会让电脑维持一个会变化的小世界。家长也能在过程中观察孩子对哪一种反馈更兴奋。有的孩子看到画面会兴奋,有的孩子更喜欢捉弄程序里的角色,这两种倾向对应不同的兴趣方向,但并不重要,重要的是他已经开始把代码当成表达工具。
5. 完整示例与代码实现
下面进入真正的实操环节。每个文件都建议让孩子自己新建并逐行输入,而不是直接复制粘贴。逐行输入看起来很慢,却能让孩子在敲代码的过程中感受到语法结构。当然,如果孩子年龄较小或刚开始接触键盘,可以由家长输入,孩子负责读代码、提修改意见。
5.1 项目一:用 turtle 画一幅《太阳下的草地》
这是第一个示例,核心目标是让孩子理解“代码是一连串指令”。先新建文件project1_sunny_grass.py。
# 文件:project1_sunny_grass.py import turtle t = turtle.Turtle() t.speed(6) # 画一块绿色草地 t.penup() t.goto(-300, -150) t.pendown() t.color("green", "light green") t.begin_fill() for _ in range(2): t.forward(600) t.left(90) t.forward(120) t.left(90) t.end_fill() # 画太阳 t.penup() t.goto(-220, 180) t.pendown() t.color("yellow", "yellow") t.begin_fill() t.circle(50) t.end_fill() # 画几朵小花,位置由列表控制 for x in range(-200, 201, 80): t.penup() t.goto(x, -120) t.pendown() t.color("red", "pink") t.begin_fill() t.circle(15) t.end_fill() # 在画面右下角写一句话 t.penup() t.goto(100, -220) t.pendown() t.color("black") t.write("A gift from my first Python project", align="center", font=("Arial", 12, "normal")) t.hideturtle() turtle.done()这段代码的逻辑可以分成四块讲给孩子听。草地是用循环画出来的两长边加两短边,相当于一个拉长的长方形;太阳使用了circle(50),数字越大太阳越大;小花的位置写在range(-200, 201, 80)里,意思是横坐标从 -200 开始,每次增加 80,一直到超过 200 为止,所以电脑自动画了 6 朵位置不同的小花。这里真正的学习点不是绘画技巧,而是“循环让重复动作变少”。
运行后,屏幕会弹出一个画布窗口,里面出现草地、太阳和几朵小花。孩子可以试着修改几个参数:把circle(50)改成circle(70),太阳会变大;把range(-200, 201, 80)里的80改成40,小花会变多。这种“改一个数字、重新运行、看结果”的循环,是整个启蒙过程中最重要的学习方式。
如果孩子想把这幅画保存下来,可以用系统截图工具截取画布。如果需要更正式的保存方式,可以后续再了解 turtle 的画布导出方法,不建议在第一个项目里引入太多概念。
5.2 项目二:和电脑玩猜数字
第二个项目是文本程序,运行窗口从画布变成了终端。这时孩子需要学会一件事:代码通过input等待玩家输入,并根据输入内容产生不同反馈。
新建文件project2_guess_number.py。
# 文件:project2_guess_number.py import random answer = random.randint(1, 100) print("我已经想好了一个 1 到 100 之间的数字,你来猜猜看!") count = 0 while True: guess_text = input("请输入你猜的数字:") try: guess = int(guess_text) except ValueError: print("请输入一个整数,不要输入文字。") continue count = count + 1 if guess < answer: print("太小了,再大一点。") elif guess > answer: print("太大了,往小一点猜。") else: print("恭喜你猜对了!你一共猜了", count, "次。") break这里的while True会让孩子第一次接触到“无限循环”的概念。不能因为循环是无限的就觉得危险,关键在于循环体内有一个break条件:当猜中数字时,程序会跳出循环,游戏结束。
另一个值得解释的点是try ... except ValueError。如果玩家输入的不是数字,比如输入了“苹果”,int("苹果")会报错。异常处理可以理解为程序在说“我收到了不认识的输入,但我不会崩溃,而是请你重新输入”。这对孩子来说是很好的工程意识启蒙:好的程序不是永远不出错,而是出错后能给出明确提示。
运行这段代码后,孩子可以自己尝试几次。这里有一个非常推荐的小游戏:家长心里想一个数字,孩子运行程序猜电脑的数字;然后再反过来,让孩子修改random.randint(1, 100)为random.randint(1, 1000),增加难度。孩子会迅速理解“随机数范围”对游戏难度的影响。
5.3 项目三:沉浸式投喂小剧场
第三个项目是三个项目中交互性最强的一个。它模拟了一个“小宠物陪伴系统”:玩家扮演投喂者,通过输入不同的动作改变小动物的饱腹值和心情值。这里会引入字典这种数据结构,代码稍长,但每个概念都可以用现实中的“菜单”来类比。
新建文件project3_feed_pet.py。
# 文件:project3_feed_pet.py # 状态字典:记录小动物的当前状态 state = { "name": "团团", "hunger": 60, "mood": 40 } # 行为字典:记录每个操作带来的效果 actions = { "小鱼干": {"hunger": 20, "mood": 10}, "猫粮": {"hunger": 30, "mood": 5}, "摸摸头": {"hunger": 0, "mood": 20}, "玩球": {"hunger": -10, "mood": 25} } print("欢迎来到沉浸式投喂小剧场!") print("你可以输入:小鱼干 / 猫粮 / 摸摸头 / 玩球 / 退出") while True: print("\n当前状态:", state["name"], "饱腹值", state["hunger"], ",心情值", state["mood"]) command = input("你想做什么:").strip() if command == "退出": print("今天就到这里,小动物和你挥挥爪。") break if command not in actions: print("我不太理解这个动作,试试:小鱼干 / 猫粮 / 摸摸头 / 玩球") continue effect = actions[command] state["hunger"] = state["hunger"] + effect["hunger"] state["mood"] = state["mood"] + effect["mood"] # 把数值限制在 0 到 100 之间,避免出现负数 state["hunger"] = max(0, min(100, state["hunger"])) state["mood"] = max(0, min(100, state["mood"])) if state["hunger"] == 100 and state["mood"] >= 80: print("小动物吃饱了,也很开心,它在你旁边打起了呼噜。") elif state["mood"] < 20: print("它看起来有点委屈,多陪陪它吧。") elif state["hunger"] < 20: print("它饿得肚子咕咕叫,快去投喂吧。") else: print(state["name"], "晃了晃尾巴,看起来状态不错。")这个程序最值得玩味的是两个字典:state和actions。state记录当前“世界”处于什么状态,actions记录每一个动作会产生什么影响。这种“状态 + 动作”的写法,是很多小游戏的基本骨架,甚至可以说,几乎所有角色扮演游戏,底层都是这样一个不断读取输入、更新状态、输出反馈的循环。
程序里的max(0, min(100, state["hunger"]))是一行比较经典的限制数值写法,避免饱腹值超过 100 或小于 0。如果孩子暂时看不懂,可以先跳过,只需要知道它相当于“数值边界保护”,保证小动物不会因为玩家连续投喂变成负数饱腹值。
孩子运行起来以后,家长可以引导他观察一个问题:如果一直喂“小鱼干”,会发生什么?如果一直只玩球不喂食,又会发生什么?这个项目把“沉浸式投喂”变成了一个可操作的实验台,孩子能通过实验理解什么是规则、什么是状态、为什么程序的结果可以预测但又会因为玩家选择而不同。
5.4 三个项目的运行方式
三个项目都是普通 Python 脚本,在终端中进入项目文件夹后依次运行:
cd kids_code python project1_sunny_grass.py python project2_guess_number.py python project3_feed_pet.py如果你的电脑使用python3命令,则把每个python都换成python3。三个项目中,第一个会弹出图形窗口,第二和第三个会在终端里等待输入。运行结束后,如果孩子改动了某个文件的代码,一定要重新保存再运行,否则看到的还是旧结果。
6. 运行结果与效果验证:怎么判断项目已经跑通
判断项目是否跑通,比很多人想象中要简单。判断标准不是“代码有没有报错”,而是“程序是否按预期产生了反馈”。
对于项目一,成功的标志是屏幕弹出 turtle 画布,画布中能看到草地区域、圆形太阳、一排小花,以及右下角用文字写的英文句子。如果画布一闪而过,通常是因为文件末尾没有turtle.done()。turtle.done()的作用是让画布保持打开,等待用户手动关闭,否则程序执行完最后一行后窗口会立即消失。
对于项目二,成功的标志是运行后能看到“请输入你猜的数字”的提示,输入一个整数后能得到“太小了”或“太大了”的反馈。一个常见的小问题是,如果输入数字以外的内容,程序是否会友好地提示错误而不是直接崩溃。如果能做到这一点,说明异常处理逻辑已经生效。
对于项目三,成功的标志是程序进入循环后,每次输入动作,都会在下一行显示新的状态值和情绪反馈。如果连续投喂到饱腹值为 100 且心情值不低于 80,程序会输出“小动物吃饱了”的结束语句。此时再输入其他动作,程序仍然会继续运行,只有当输入“退出”时,整个循环才会停止。
任何项目运行失败,第一步应该看终端里最后一行报错信息。不要从头开始看整屏日志,只看最后一行或者最后几行,往往就能定位问题。常见的报错包括NameError: name 'xxx' is not defined,这通常表示某个变量名拼写不一致;IndentationError表示缩进有问题;ModuleNotFoundError表示导入的模块不存在。看到报错后,先检查对应行号和附近几行,这是比重启电脑、重装 Python 更高效的方式。
当三个项目都跑通后,建议完成一次“作品展示”。可以让孩子关掉电脑,向家长口头介绍每个项目是怎么工作的。介绍的过程会暴露出他的理解缺口,而这个缺口恰恰是下一步学习的方向。
7. 常见问题与排查方法
亲子编程中最消耗耐心的往往是环境问题,而不是逻辑问题。下面这张表覆盖了新手最常遇到的几种情况。
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
输入python提示不是内部或外部命令 | Python 未安装,或安装时未勾选 Add Python to PATH | 在终端执行python --version看是否提示找不到命令 | 重新运行 Python 安装包,勾选 Add Python to PATH,或手动配置环境变量 |
| 双击代码文件后窗口一闪而过 | 脚本执行完后自动退出,没有等待指令 | 不要在文件管理器里双击运行,而是从终端运行 | 在终端中先cd到项目目录,再执行python 文件名.py,或在文件末尾临时加input() |
| turtle 画布没有弹出,控制台直接结束 | 代码存在语法错误,或文件里缺少turtle.done() | 查看控制台报错内容 | 修正语法错误;确认文件末尾有turtle.done() |
输入python运行时报ModuleNotFoundError: No module named 'turtle' | 当前 Python 安装缺少 tkinter 图形支持,常见于 Linux | 查看 Python 安装来源和系统包管理器 | Windows 建议重装官方 Python;Linux 用户安装python3-tk后再试 |
| 程序里明明有中文,运行后却显示乱码 | 终端编码与控制台编码不一致 | 检查是否是 Windows 老版本终端 | 终端执行chcp 65001切换为 UTF-8 编码,或直接使用 VS Code 的终端运行 |
| 猜数字时输入中文或字母,程序直接崩溃 | 没有使用try except ValueError捕获类型转换错误 | 检查代码是否包含异常处理分支 | 参考项目二代码,把int(input(...))换成先接收文本再转换并捕获异常 |
文件夹里有一个叫turtle.py的文件,导致import turtle报错 | 自定义文件名与 Python 标准库重名 | 检查当前目录下是否存在同名文件 | 把文件名改成其他名字,例如project1_sunny_grass.py,并删除当前目录下的turtle.py |
| 程序运行了但看不到任何输出 | 可能卡在等待输入,或者循环体没有 print | 查看窗口最后一行,确认是否出现了input提示但没有被输入 | 如果是等待输入,在提示后输入内容并回车;如果是逻辑问题,检查循环内部是否有输出语句 |
这个表里要特别提醒的是文件名冲突问题。很多孩子会随手把画图项目保存为turtle.py,这看起来没问题,但 Python 在执行import turtle时会先在当前目录找同名文件,结果导入的是自己刚写的脚本,而脚本里没实现 turtle 的方法,于是报错。养成以下习惯可以避免很多类似问题:项目文件不要与标准库名字重复,如turtle.py、random.py、time.py都不能作为文件名。
8. 亲子编程的最佳实践与工程建议
跑通三个小项目之后,孩子会进入一个比“照抄代码”更关键的阶段,开始自己改参数、换文本、调整玩法。这时家长可以采用下面这些工程化习惯,帮助孩子像维护一个真实项目一样管理自己的小作品。
8.1 建立“一个作品一个文件夹”的习惯
从第二个项目开始,建议为每个作品单独建文件夹:
kids_code/ project1_sunny_grass/ sunny_grass.py project2_guess_number/ guess_number.py project3_feed_pet/ feed_pet.py README.md这里的README.md可以让孩子用几句话记录作品的功能。这个文件不需要会复杂的 Markdown,只要写清楚“这个程序能做什么、怎么运行”即可。这样一个看起来很小的习惯,其实是在培养文档意识。
8.2 从“改参数”开始,不急着背语法
很多家长容易陷入一个误区:希望孩子尽早掌握变量、函数、类这些术语。实际经验是,如果孩子还没有亲手改过代码,术语对他来说只是噪音。更合理的路径是先让孩子把circle(50)改成circle(80),看到太阳变大,再告诉他“括号里的数字是参数,参数可以控制函数的行为”。抽象概念应当出现在具体现象之后,而不是之前。
8.3 把报错当成游戏的一部分
孩子第一次看到红字报错,很可能会紧张。家长可以先自己带头读一遍报错信息,用平静的语气说:“程序告诉我们第几行有问题,我们去看一下。”这样做能把孩子的注意力从挫败感转移到排查过程上。报错不是失败,而是程序给出的提示,这是工程思维里很重要的一课。
8.4 控制单次编程时长并及时展示成果
对于初学者,尤其是低龄孩子,每次编程时长控制在 30 到 45 分钟比较合适。时间到点时,不一定要把代码写到某个特定阶段才停。比起“把项目写完”,更重要的是让孩子在注意力下降前完成一次“运行并看到效果”。这样的正向反馈会让孩子期待下一次继续。
8.5 让家长成为作品的第一个“用户”
亲子编程区别于自学编程的地方,就是存在一个天然的“验收环节”。孩子写完程序后,家长可以坐下来,认真玩一次猜数字游戏,认真给投喂小剧场输入几次“小鱼干”,并说出自己的体验:“我输入‘玩球’之后,饱腹值下降得有点快,是不是设计成只下降 5 更合理?”这种反馈是在教孩子理解用户体验,也呼应了“投喂”这个场景:孩子用作品投喂家长,家长用反馈投喂孩子的下一次修改。
8.6 源代码备份与简单版本管理
如果孩子改了很多版本,建议每次大改动前把当前可运行的文件复制一份,命名为guess_number_v1.py、guess_number_v2.py。这样做的好处是,即使改坏了,也能回到上一个可用版本,不会因为反复失败而丢掉成就感。等孩子再大一些,可以再介绍 Git,但目前不需要。
8.7 注意屏幕使用与姿势
最后提醒一点现实问题。亲子编程离不开屏幕,家长可以约定每完成一个项目就休息 10 分钟,活动一下眼睛和身体。无论工具多好,孩子的健康和节奏感永远是第一位的。
9. 总结与下一阶段学习方向
这三个项目做完,孩子已经掌握了 Python 最基础也最重要的几块拼图:顺序执行、循环、条件判断、输入输出、异常处理和字典操作。他应该能够读懂程序的控制流,也能预见某个输入会导致什么结果。这些能力比掌握多少语法更接近编程思维的本质。
下一步,可以根据孩子的兴趣选择不同方向。如果他对画面和动画更感兴趣,可以继续深入 turtle,尝试绘制更复杂的角色、让角色动起来,也可以学习 Pygame Zero,做一个按键控制角色移动的小游戏;如果他对“对话式小程序”更着迷,可以尝试把投喂小剧场扩展成更完整的文字冒险游戏,加入更多场景和结局;如果他对硬件感兴趣,可以研究 micro:bit 或 Arduino,把代码从屏幕上搬到真实世界。
有一点值得家长在心里反复确认:编程启蒙的目标不是把孩子培养成程序员,而是给他一种新的表达方式。孩子用代码画出那幅草地,用代码设计出别人猜不到的数字,用代码维护一只虚拟小宠物的快乐与饥饿,每一件事都是在练习“把一个想法变成别人能体验的东西”。而这种能力,恰恰是未来无论做任何工作都用得上的底层素养。
等到下一次孩子玩回来,再默默递给你一个作品时,你不妨先不做评价,而是打开终端,陪他运行一遍,然后问一句:“这里你打算怎么改?”你会发现,那个“沉浸式投喂”的瞬间,已经从屏幕上的短视频,变成了一段真实可交互的代码。