📚 系列定位:从 Scratch 积木到 Python 代码,双向对照学 AI 编程
✍️ 作者:梅雅达编程工作室
🎯 本篇难度:⭐⭐⭐(进阶必学)


一、摘要

本篇是 Scratch 转 Python 系列第 18 天,我们要给你的代码从"一整坨"进化到"模块化工程"。学完这一篇你会明白:为什么专业项目都不是一个大文件跑到底,而是把 Agent、工具、存档、日志拆成独立文件;import 一句话就能像"召唤扩展积木包"一样把它们组合起来。我们会讲透 Python 五大常用标准库——random / json / os / sys / datetime,并把之前散落的代码整理成一个规整的 AI 工具箱模块化项目,为 Day 19 调真实大模型 API 打好工程基础。


二、本节课学习目标

  1. 🎯 掌握 模块导入四种写法import / from...import / as 别名 / from...import *
  2. 🎯 掌握 五大常用标准库random / json / os / sys / datetime 的核心用法
  3. 🎯 学会 自定义模块:把自己写的 .py 文件当模块被其他文件导入
  4. 🎯 AI 应用场景:把 Day 15-17 的 Agent 代码拆成模块化项目结构(大厂标准工程雏形)

三、专业名词通俗释义

名词 通俗解释 Scratch 类比
模块(Module 一个 .py 文件就是一个模块 一个装满自定义积木的"积木包" -.sb3文件
标准库 Python 自带的模块,安装即用不需要下载 Scratch 自带的运动、外观、声音积木大类
第三方库 需要 pip install 才能用的模块(Day 19 见) Scratch 商店里下载的扩展积木包
import 导入 告诉 Python:“我要用某个模块” Scratch 里勾选"添加扩展"打开一大类积木
别名(as 给长名字模块起小名,方便打字 把「颜色-饱和度-亮度」简称成「HSV」
包(Package 一堆模块组成的文件夹,里面必须有 __init__.py 一个装了多个积木包的收藏夹

四、分模块双向对照知识点

模块 1:import 四种写法

Scratch 积木逻辑

想用某类积木前,先在"添加扩展"里勾选它;勾好之后所有相关积木就出现在积木栏可以拖了。
在这里插入图片描述

Python 源码(含 Scratch 积木注释)

# 【Scratch积木】添加扩展「random 积木包」
import random                       # 写法 1:导入整个模块
print(random.randint(1, 10))       # 使用时带模块名前缀

# 【Scratch积木】添加扩展「random 积木包」并只取 randint 积木
from random import randint         # 写法 2:只导入指定函数
print(randint(1, 10))              # 直接用,不用带前缀

# 【Scratch积木】添加扩展并起个短名
import random as rd                # 写法 3:起别名
print(rd.randint(1, 10))

# 【Scratch积木】添加扩展并把所有积木都倒进来(谨慎使用)
from random import *               # 写法 4:全部导入(不推荐)
print(randint(1, 10))

运行结果(每次不同):

7
3
9
2

核心易错说明

  • 写法 1 最稳,写法 4 最危险(容易和自己变量名撞车)
  • 团队协作强烈推荐写法 1 或写法 3

模块 2:random 随机模块(AI 数据采样必备)

Scratch 积木逻辑

「在 1 到 100 之间取随机数」这类积木,全都对应 random 库。
在这里插入图片描述

Python 源码(含 Scratch 积木注释)

import random

# 【Scratch积木】在 (1) 到 (100) 之间取随机数
n = random.randint(1, 100)

# 【Scratch积木】从列表中随机取一个
fruit = random.choice(["苹果", "香蕉", "橘子"])

# 【Scratch积木】打乱列表顺序
data = [1, 2, 3, 4, 5]
random.shuffle(data)

# 【Scratch积木】从列表中随机取 3 个不重复的(抽样)
sample = random.sample(range(1, 100), 3)

print(n, fruit, data, sample)

运行结果(示例):

42 香蕉 [3, 5, 1, 4, 2] [17, 63, 88]

核心易错说明

  • randint(a, b)闭区间(两端都包含),和很多语言不同
  • random.shuffle()原地打乱,返回值是 None,别赋值

模块 3:json 数据序列化(AI 存档标配)

Scratch 积木逻辑

Scratch 变量能直接看到值,Python 想把字典/列表存到文件,就得先转成 JSON 字符串。
在这里插入图片描述

Python 源码(含 Scratch 积木注释)

import json

data = {"name": "小凌", "skills": ["Python", "Scratch"]}

# 【Scratch积木】把字典变成 JSON 字符串
s = json.dumps(data, ensure_ascii=False)

# 【Scratch积木】把 JSON 字符串变回字典
back = json.loads(s)

# 【Scratch积木】把字典存到文件
with open("data.json", "w", encoding="utf-8") as f:
    json.dump(data, f, ensure_ascii=False, indent=2)

# 【Scratch积木】从文件读出来
with open("data.json", "r", encoding="utf-8") as f:
    loaded = json.load(f)

print(s, back, loaded)

运行结果

{"name": "小凌", "skills": ["Python", "Scratch"]} {'name': '小凌', 'skills': ['Python', 'Scratch']} {'name': '小凌', 'skills': ['Python', 'Scratch']}

核心易错说明

  • dumps/loads 处理字符串dump/load(不带 s)处理文件对象——一个字之差,别搞混
  • 中文要 ensure_ascii=False,缩进要 indent=2(存档更好读)

模块 4:ossys 系统交互

Scratch 积木逻辑

Scratch 一般不需要看"文件在哪、当前目录哪儿"。Python 想操作文件系统就得用 os;想拿命令行参数就得用 sys
在这里插入图片描述

Python 源码(含 Scratch 积木注释)

import os
import sys

# 【Scratch积木】获取当前工作目录
cwd = os.getcwd()

# 【Scratch积木】判断文件是否存在
exists = os.path.exists("data.json")

# 【Scratch积木】列出目录下所有文件
files = os.listdir(".")

# 【Scratch积木】拼路径(跨平台友好)
path = os.path.join("data", "history.json")

# 【Scratch积木】获取命令行参数
args = sys.argv     # ['day18_code.py', '--verbose'] 之类

print(cwd, exists, len(files), path, args)

运行结果(示例):

/Users/mabel/project True 12 data/history.json ['day18_code.py']

核心易错说明

  • 拼路径永远用 os.path.join,不要手写 "a/b/c"(Windows 分隔符不同)
  • sys.argv[0] 是脚本本身,用户传的参数从 sys.argv[1] 开始

模块 5:datetime 时间处理(AI 日志/存档时间戳)

Scratch 积木逻辑

Scratch 里获取"当前时间"是几个专属积木;Python 用 datetime 模块统一管理。
在这里插入图片描述

Python 源码(含 Scratch 积木注释)

from datetime import datetime, timedelta

# 【Scratch积木】当前 (日期时间)
now = datetime.now()

# 【Scratch积木】格式化成好看的字符串
s = now.strftime("%Y-%m-%d %H:%M:%S")

# 【Scratch积木】3 天前的时间
three_days_ago = now - timedelta(days=3)

# 【Scratch积木】字符串反解析回时间对象
parsed = datetime.strptime("2026-07-12 15:30:00", "%Y-%m-%d %H:%M:%S")

print(s, three_days_ago.strftime("%Y-%m-%d"), parsed)

运行结果(示例):

2026-07-12 01:23:45 2026-07-09 2026-07-12 15:30:00

核心易错说明

  • strftime 是"time to string",strptime 是"string to time",别写反
  • %Y 是四位年,%y 是两位年,别用错

scratch积木代码说明
因scratch积木里没有random 随机模块,json 数据序列化模块,ossys 系统交互模块及datetime 时间处理模块只能自定义模块了


五、综合实战项目:AI 工具箱模块化项目

把 Day 15-17 的 Agent 代码拆成一个规整的模块化项目结构,体验大厂工程写法。

目标目录结构

ai_toolbox/
├── main.py              # 主程序入口
├── agents/
│   ├── __init__.py
│   ├── base.py          # AIRole 基类
│   ├── kefu.py          # 客服 Agent
│   └── fanyi.py         # 翻译 Agent
├── utils/
│   ├── __init__.py
│   ├── storage.py       # JSON 存档工具
│   └── logger.py        # 日志工具
└── data/
    └── history.json     # 对话历史存档

Scratch 积木思路

  1. 把每类精灵放进独立的"积木包文件"
  2. 把工具积木(存档、日志)放进 utils 积木包
  3. 主舞台 main.py 只负责:import 各积木包 + 组合成完整程序
  4. 增加新角色时,只加新文件,不动老代码
    在这里插入图片描述

Python 完整可运行代码(片段)

# main.py(配套源码 day18_code.py 单文件模拟版)
from agents.base import AIRole
from agents.kefu import KefuAgent
from utils.storage import save_history, load_history
from utils.logger import log

log("程序启动")
kefu = KefuAgent("小助手", "热情耐心")
kefu.chat("你好")
save_history({"客服": kefu.history})

运行结果预览

[2026-07-12 01:30:00] 程序启动
【客服·小助手】亲亲~您说的「你好」已收到,正在为您处理哦~
[2026-07-12 01:30:00] 存档成功 → history.json

:本篇配套 day18_code.py单文件模拟多模块(用类和函数分区代替真实文件夹),方便直接运行;真实工程结构见专栏后续文章。


六、高频易错点总结

  1. 循环导入(Circular Import:A 导入 B,B 又导入 A,Python 会报错——设计模块时要按"层级"划分
  2. from...import * 覆盖内置from math import * 可能覆盖你自己的 pi 变量,团队协作强烈不建议
  3. jsonPython 字典混淆:JSON 里 True/False/None 分别对应 Python 的 True/False/None,但 JSON 文件里写的是小写 true/false/null
  4. os.path.join 不加空格os.path.join('a', 'b') 拼出 'a/b''a\\b',都是干净路径,别自己加 /
  5. datetime 时区遗忘:跨服务器时严格用 datetime.utcnow(),本地写日志用 datetime.now() 就够

七、💡 学习提示

为鼓励大家动手练习、吃透编程逻辑,本篇不提供 Scratch 成品源码,请对照截图亲手搭建积木完成复刻!
配套 Python 代码可直接复制运行学习。


八、往期历史笔记

  1. 编程启蒙|Scratch 转 Python 系列第 1 天:变量、数字运算积木双向对照(AI 基础数值计算实战)

  2. 编程启蒙|Scratch 转 Python 系列第 2 天:分支判断 if 积木双向对照(AI 指令条件过滤实战)

  3. 编程启蒙|Scratch 转 Python 系列第 3 天:循环重复积木双向对照(AI 批量循环处理,已收录 AI Agent 技术社区)

  4. 编程启蒙|Scratch 转 Python 系列第 4 天:字符串文本积木双向对照(AI 提示词拼接、文本清洗实战)

  5. 编程启蒙|Scratch 转 Python 系列第 5 天:自定义积木 / 函数双向对照(AI 工具封装、重复指令简化实战)

  6. 编程启蒙|Scratch 转 Python 系列第 6 天:列表、数组积木双向对照(AI 底层语法 / AI 批量数据处理实战)

  7. 编程启蒙|Scratch 转 Python 系列第 7 天:猜数字大挑战·升级版实战(AI 出题 + 二分查找最优解 + 完整命令行游戏 已被收录在智能体开发者社区)

  8. 编程启蒙|Scratch 转 Python 系列第8天:节奏敲击机游戏实战(AI节奏谱生成实战)

  9. 编程启蒙|Scratch 转 Python 系列第9天:字典/哈希表积木双向对照(AI大模型参数配置表实战)

  10. 编程启蒙|Scratch 转 Python 系列第 10 天:问答闯关游戏实战(AI 题库管理 + 多关卡剧本)

  11. 编程启蒙|Scratch 转 Python 系列第 11 天:文件读写积木双向对照(AI 训练数据存取实战)

  12. 编程启蒙|Scratch 转 Python 系列第 12 天:记忆翻牌游戏实战(AI 图案主题包 + 存档排行榜 已被收录在2048 AI社区)

  13. 编程启蒙|Scratch 转 Python 系列第 13 天:异常处理 try/except 积木双向对照(AI 接口调用容错实战)

  14. 编程启蒙|Scratch 转 Python 系列第 14 天:AI 提示词管理工具实战(增删改查 + 存档导入 + 异常兜底)

  15. 编程启蒙|Scratch 转 Python 系列第 15 天:类与对象积木双向对照(AI 角色类封装实战)已被智能体开发者社区收录

  16. 编程启蒙|Scratch 转 Python 系列第 16 天:继承与多态积木双向对照(AI Agent 角色体系实战)已被智能体开发者社区收录

  17. 编程启蒙|Scratch 转 Python 系列第 17 天:AI 聊天机器人游戏实战(AI 多角色对话 + 人设切换实战)已被DAMO开发者矩阵收录


十、下一章预告

第 19 天:AI API 调用入门(requests + JSON + 大模型对接实战)

学了 18 天的 Python,明天终于要真正调用大模型 API 了!

  • requests 第三方库 vs urllib 标准库
  • 请求头、参数、鉴权、超时、重试
  • JSON 请求体拼装 + 响应解析
  • AI 场景:调用真实大模型 API(DeepSeek/通义/扣子),让你的 Agent 从"假装懂"变成"真的会"

激动人心的一天,别错过!🚀


十一、原创声明

本文为「梅雅达编程笔记」原创技术教程,未经授权禁止转载、洗稿或用于商业培训。转载合作请联系作者。系列内容持续更新中,欢迎收藏 CSDN 专栏「编程启蒙–scratch转python」追更 🍃

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐