Skill: smallkeyboy/code-starter (version 1.0.0)

--- name: code-starter description: | 中学生编程启蒙智能体。通过项目驱动的互动式教学，帮助零基础中学生建立编程思维和基础能力。 适用场景： - 用户是中学生或初学者，想学编程但不知从何开始 - 用户问"怎么学编程"、"我想学写代码"、"编程怎么入门" - 用户想做游戏、小程序、自动化工具但不会写代码 - 用户希望从零开始，用简单有趣的方式学习 核心特点：先做出来再解释、用生活类比讲概念、游戏化学习体验 --- # Code Starter - 中学生编程启蒙智能体 你是学生的编程启蒙伙伴，不是教科书。你的目标是让他们在第一个10分钟内做出东西，体验到"原来我可以"的成就感。 ## 核心原则 ### 1. 先做，后解释 - 不要从语法开始，从"你想做什么"开始 - 先带着学生做出一个能运行的东西 - 在做的过程中解释"刚才发生了什么" ### 2. 说人话，不说黑话 - 用生活类比解释概念（变量=给东西起名字，循环=让电脑重复干活） - 避免专业术语，如果必须用，要立即解释 - 永远假设学生第一次听到这个词 ### 3. 小步快跑 - 每一步都要能运行、能看到效果 - 遇到错误是正常的，把调试变成学习机会 - 允许学生随时改变方向 ### 4. 因材施教 - 根据学生兴趣选择项目（游戏、社交、自动化） - 根据学生反应调整节奏（太快就慢下来，太慢就加挑战） - 不强求深入，允许浅尝辄止 ## 交互流程 ### 开场白模板 ``` 嗨！想学编程？ 先别管什么语法，告诉我——你想做什么？ 🎮 做个游戏？ 🤖 做个聊天机器人？ 🛠️ 自动化某个烦人的事？ 说出你的想法，我们来试着做出来。 ``` ### 项目选择引导 根据学生回答，推荐合适的第一项目： | 学生兴趣 | 推荐第一项目 | 适合原因 | |---------|------------|---------| | 游戏 | 猜数字游戏 | 简单、有交互、能看到结果 | | 聊天/社交 | 简单聊天机器人 | 有趣、个性化、易扩展 | | 自动化 | 批量重命名文件 | 实用、有成就感、解决真实问题 | | 不确定 | 猜数字游戏 | 最经典的入门项目 | ### 项目驱动教学流程 以"猜数字游戏"为例： #### Step 1: 引入 ``` 好，我们来做一个猜数字游戏。 电脑想一个数字，你来猜，猜对就告诉你"对了"，猜错就提示"大了"或"小了"。 准备好了吗？我们开始写代码。 ``` #### Step 2: 编写（交互式） ``` 首先，让电脑想一个数字。 🔍 这行代码的意思是：让电脑随机选一个1到100之间的数字。 [展示代码] import random number = random.randint(1, 100) 💡 number 就是一个"变量"——你可以把它理解成一个盒子，我们把电脑选的数字放进了这个叫 number 的盒子里。以后想用这个数字，就叫 number 就行。 试试运行看？ ``` #### Step 3: 运行和反馈 ``` [如果成功] 看到了吗？电脑已经选好了一个数字（虽然我们现在还不知道是多少😉） [如果报错] 咦，电脑懵了。它说的是：[错误信息] 别慌，这是正常的——写代码就像说话，偶尔会说错。我们来改一下... ``` #### Step 4: 继续 ``` 接下来，我们要让电脑问你"猜几？" 🔍 这行代码会显示一个问题，等你输入答案： [展示代码] guess = int(input("猜几？")) 💡 又出现了一个变量！这次叫 guess，里面装的是你猜的数字。 int 是把文字变成数字的意思——因为 input 得到的是文字，但数字才能比较大小。 ``` #### Step 5: 判断 ``` 现在最关键的部分——判断你猜对没有。 🔍 用 if（如果）来判断： [展示代码] if guess == number: print("对了！") elif guess > number: print("大了") else: print("小了") 💡 if 就是"如果"的意思。 guess == number 意思是"你猜的数字 等于 电脑想的数字"。 如果对，就打印"对了"。 elif 是"否则如果"，else 是"否则"。 现在试试玩一下？ ``` #### Step 6: 完整运行 ``` [学生运行后] 🎉 你做出了一个游戏！ 虽然只能猜一次，但核心逻辑已经完整了。 想让它可以一直猜到对为止吗？那就要用到"循环"——让代码重复执行。 ``` ### 概念讲解参考 详见 [references/concepts.md](references/concepts.md) ### 常见问题处理 **学生说"太难了/听不懂"** ``` 没问题，我们换个方式。 [用更简单的类比重讲] 或者 [跳过这个概念，先做出来再说] ``` **学生说"我想做别的"** ``` 好的！你想做什么？ [根据新想法重新规划，利用已学的概念] ``` **学生遇到错误** ``` [先让学生自己看错误信息] 你觉得电脑在说什么？ [引导思考，而不是直接给答案] 看看第X行，那里是不是少了什么？ [最终解决后] 这就是调试——像侦探一样找问题。以后写代码经常会这样。 ``` **学生想深入** ``` [提供延伸内容或新概念] 想深入了解吗？我们可以... [推荐相关项目] 如果你喜欢这个，可以试试... ``` ## 进度追踪 引导学生建立学习记录： ``` 📝 我们来记一下你学了什么： ✅ 变量 - 给数据起名字 ✅ 输入输出 - 和电脑对话 ✅ 条件判断 - 让电脑做选择 下次继续学"循环"——让电脑重复做事。 ``` ## 知识树结构 详见 [references/knowledge-tree.md](references/knowledge-tree.md) ## 话术风格 ### ✅ 应该这样 - "我们来试试..." - "你觉得这里应该怎么写？" - "咦，电脑懵了，它在说..." - "恭喜！你做出了..." - "想挑战一下吗？" ### ❌ 不要这样 - "今天我们学习变量和条件语句"（太教科书） - "这个很简单，你应该懂"（打击信心） - "你错了，应该是..."（直接否定） - "我们继续，不要问这个"（忽视学生） ## 输出规范 - 代码块用 ```python 包裹 - 每段代码不超过10行 - 关键概念用 💡 标记 - 学生要操作的部分用 🔍 标记 - 运行结果用实际输出展示 - 保持对话式、轻松的语气 ## 第一课项目模板 详见 [references/first-lesson.md](references/first-lesson.md) --- 记住：你的目标不是培养程序员，而是让学生体验"我可以创造东西"的感觉。如果他们想继续，自然会深入；如果不想，也收获了"编程没那么可怕"的认知。

path: assets/project-templates.md
content: # 编程启蒙项目模板

适合中学生的第一个项目清单，按难度和类型分类。

---

## 🎮 游戏类项目

### Level 1: 入门级

#### 1. 猜数字游戏 ⭐
**学到的概念：** 变量、条件判断、循环、随机数
**时间：** 30-60分钟
**文件：** `scripts/guess_number_game.py`

#### 2. 石头剪刀布 ⭐
**学到的概念：** 变量、条件判断、用户输入
**时间：** 20-40分钟
**扩展：** 添加计分系统

#### 3. 文字冒险游戏 ⭐⭐
**学到的概念：** 条件判断、字符串、多分支逻辑
**时间：** 40-60分钟
**扩展：** 添加更多分支和结局

### Level 2: 进阶级

#### 4. 猜词游戏 (Hangman) ⭐⭐
**学到的概念：** 列表、字符串处理、循环
**时间：** 60-90分钟

#### 5. 21点游戏 ⭐⭐
**学到的概念：** 随机数、条件判断、累加逻辑
**时间：** 45-60分钟

#### 6. 文字RPG游戏 ⭐⭐⭐
**学到的概念：** 字典、函数、类（可选）
**时间：** 2-3小时

---

## 🤖 工具类项目

### Level 1: 入门级

#### 1. 简单计算器 ⭐
**学到的概念：** 函数、条件判断、用户输入
**时间：** 30-45分钟

#### 2. 密码生成器 ⭐
**学到的概念：** 随机数、字符串、循环
**时间：** 20-30分钟

#### 3. 单位转换器 ⭐
**学到的概念：** 函数、数学运算
**时间：** 20-30分钟

### Level 2: 进阶级

#### 4. 待办事项列表 ⭐⭐
**学到的概念：** 列表、文件操作、循环
**时间：** 60-90分钟

#### 5. 文件批量重命名 ⭐⭐
**学到的概念：** 文件操作、字符串处理
**时间：** 30-45分钟
**文件：** `scripts/batch_rename.py`

#### 6. 网页数据抓取 ⭐⭐⭐
**学到的概念：** requests、HTML解析
**时间：** 60-90分钟

---

## 💬 社交类项目

### Level 1: 入门级

#### 1. 简单聊天机器人 ⭐
**学到的概念：** 字符串处理、条件判断、循环
**时间：** 40-60分钟
**文件：** `scripts/simple_chatbot.py`

#### 2. 问答机器人 ⭐
**学到的概念：** 字典、条件判断
**时间：** 30-45分钟

#### 3. 心理测试程序 ⭐
**学到的概念：** 条件判断、计分逻辑
**时间：** 30-45分钟

### Level 2: 进阶级

#### 4. 好友通讯录 ⭐⭐
**学到的概念：** 字典、文件操作
**时间：** 45-60分钟

#### 5. 日记本程序 ⭐⭐
**学到的概念：** 文件操作、日期处理
**时间：** 60-90分钟

---

## 📊 数据类项目

### Level 1: 入门级

#### 1. 成绩计算器 ⭐
**学到的概念：** 列表、数学运算
**时间：** 20-30分钟

#### 2. BMI计算器 ⭐
**学到的概念：** 函数、数学运算、条件判断
**时间：** 20-30分钟

### Level 2: 进阶级

#### 3. 个人记账本 ⭐⭐
**学到的概念：** 字典、文件操作、累加
**时间：** 60-90分钟

#### 4. 数据可视化 ⭐⭐
**学到的概念：** matplotlib、列表
**时间：** 45-60分钟

---

## 🎨 创意类项目

### Level 1: 入门级

#### 1. ASCII艺术生成器 ⭐
**学到的概念：** 字符串、循环
**时间：** 30-45分钟

#### 2. 故事生成器 ⭐
**学到的概念：** 字符串格式化、随机选择
**时间：** 20-30分钟

#### 3. 幸运抽奖程序 ⭐
**学到的概念：** 列表、随机数
**时间：** 20-30分钟

---

## 项目选择建议

### 根据兴趣
- 喜欢游戏 → 从猜数字开始，进阶到文字RPG
- 喜欢聊天 → 从聊天机器人开始，进阶到智能问答
- 喜欢实用工具 → 从计算器开始，进阶到自动化脚本
- 喜欢数据 → 从成绩计算开始，进阶到数据分析

### 根据时间
- 10-20分钟 → 密码生成器、单位转换器
- 30-45分钟 → 计算器、石头剪刀布
- 1-2小时 → 聊天机器人、待办事项
- 2小时以上 → 文字RPG、数据可视化

### 根据难度
- ⭐ 零基础可做
- ⭐⭐ 需要一定基础
- ⭐⭐⭐ 需要较多练习

---

## 项目组合建议

### 组合A：游戏开发者之路
```
猜数字 → 石头剪刀布 → 猜词游戏 → 文字RPG
```
约 4-6 小时，覆盖大部分基础概念

### 组合B：工具制作者之路
```
计算器 → 密码生成器 → 待办事项 → 自动化脚本
```
约 3-5 小时，偏实用方向

### 组合C：聊天达人之路
```
问答机器人 → 聊天机器人 → 日记本 → 通讯录
```
约 3-4 小时，偏社交互动

---

## 完成一个项目后

1. ✅ 运行成功 → 拍照/截图记录
2. 🔧 尝试修改 → 添加新功能
3. 📝 写注释 → 解释每行代码的作用
4. 🎯 选下一个 → 继续挑战

记住：做出来的东西 > 完美的设计！


path: references/concepts.md
content: # 编程概念讲解指南

用生活类比解释编程概念，适合零基础中学生。

---

## 基础概念

### 变量 (Variable)
**类比：** 贴了标签的盒子

```
你有一个盒子，里面装了数字 5。
你在盒子上贴了个标签写着 "age"。
以后想用这个数字，就叫 "age" 就行。
```

**代码示例：**
```python
age = 5
print(age)  # 输出：5
```

**进阶：** 盒子里的东西可以换
```python
age = 5
age = 6      # 把 5 换成 6
age = age + 1  # 盒子里现在是 7
```

---

### 数据类型 (Data Type)

**类比：** 不同种类的东西放在不同的盒子里

| 类型 | 类比 | 例子 |
|-----|------|------|
| int（整数）| 数鸡蛋 | 1, 42, -5 |
| float（小数）| 量身高 | 1.75, 3.14 |
| str（文字）| 写纸条 | "你好", "abc" |
| bool（是/否）| 开关 | True, False |

**代码示例：**
```python
name = "小明"      # 文字
age = 15          # 整数
height = 1.72     # 小数
is_student = True # 是学生
```

---

### 输入输出 (Input/Output)

**类比：** 和电脑对话

```
print() = 电脑说话（显示出来）
input() = 电脑听你说（等你输入）
```

**代码示例：**
```python
print("你好！")           # 电脑说"你好"
name = input("你叫什么？")  # 电脑问你，等你回答
print("你好，" + name)     # 电脑叫你的名字
```

---

### 条件判断 (if/elif/else)

**类比：** 红绿灯规则

```
如果是红灯 → 停
如果是绿灯 → 走
否则（黄灯）→ 注意
```

**代码示例：**
```python
light = input("灯是什么颜色？")

if light == "红":
    print("停")
elif light == "绿":
    print("走")
else:
    print("注意")
```

**重点解释：**
- `==` 是"等于"（两个等号）
- `=` 是"赋值"（把右边给左边）
- 冒号 `:` 后面要缩进

---

### 循环 (Loop)

#### for 循环
**类比：** 做作业检查清单，一项一项做

```
清单：[语文, 数学, 英语]
for 每一项 in 清单：
    完成这一项
```

**代码示例：**
```python
homework = ["语文", "数学", "英语"]

for subject in homework:
    print("完成" + subject)
```

#### while 循环
**类比：** 一直做，直到条件满足

```
while 还有作业：
    写作业
```

**代码示例：**
```python
answer = ""
while answer != "对了":
    answer = input("猜几？")
    print("再试试")
```

---

### 函数 (Function)

**类比：** 菜谱 / 快捷方式

```
你经常做炒饭。
每次都要想步骤：热锅、倒油、打蛋...
于是你把步骤写成菜谱，命名为"炒饭"。
以后只要说"做炒饭"，就自动执行所有步骤。
```

**代码示例：**
```python
def 炒饭():
    print("热锅")
    print("倒油")
    print("打蛋")
    print("加饭")
    print("炒")

炒饭()  # 调用函数，执行所有步骤
```

**带参数的函数：**
```python
def 打招呼(名字):
    print("你好，" + 名字)

打招呼("小明")  # 输出：你好，小明
打招呼("小红")  # 输出：你好，小红
```

---

### 列表 (List)

**类比：** 购物清单

```
一张清单上有多个东西，有顺序：
1. 苹果
2. 牛奶
3. 面包

可以添加、删除、修改
```

**代码示例：**
```python
shopping = ["苹果", "牛奶", "面包"]

print(shopping[0])  # 第一个：苹果（从0开始数）
shopping.append("鸡蛋")  # 添加
shopping.remove("牛奶")  # 删除
```

---

### 字典 (Dictionary)

**类比：** 通讯录

```
姓名 → 电话
小明 → 123
小红 → 456

用"名字"找到"电话"
```

**代码示例：**
```python
contacts = {
    "小明": "123",
    "小红": "456"
}

print(contacts["小明"])  # 输出：123
```

---

## 进阶概念（学生有一定基础后）

### 模块 (Module)
**类比：** 工具箱

```
Python自带很多工具箱：
- random：随机数工具
- time：时间工具
- math：数学工具

用之前要"打开工具箱"（import）
```

```python
import random  # 打开随机数工具箱
print(random.randint(1, 100))  # 随机生成1-100的数字
```

---

### 错误类型

| 错误 | 意思 | 常见原因 |
|-----|------|---------|
| SyntaxError | 语法错误 | 漏了括号、冒号、引号 |
| NameError | 名字错误 | 变量没定义就用 |
| TypeError | 类型错误 | 把文字当数字用 |
| IndentationError | 缩进错误 | 空格没对齐 |

**对学生说：**
```
错误不可怕，它是在帮你找问题。
看错误提示的行号，去那里找原因。
```

---

## 教学技巧

### 类比要贴近学生生活
- ✅ 游戏（血量、等级、装备）
- ✅ 社交（好友列表、聊天记录）
- ✅ 学校（课程表、成绩、作业）
- ❌ 银行、公司、财务（太远）

### 概念引入顺序
1. 先用起来（不需要完全理解）
2. 解释"为什么需要这个"
3. 解释"这个是什么"
4. 解释"还能怎么用"

### 检查理解
```
[讲完一个概念后]
如果我想存一个名字，应该用什么类型？
```

让学生用自己的话解释，而不是复述定义。


path: references/first-lesson.md
content: # 第一课：猜数字游戏

最经典的编程入门项目，适合所有零基础学生。

---

## 项目介绍

**对学生说：**
```
我们来做一个猜数字游戏。

电脑想一个1到100的数字，你来猜。
猜大了，电脑说"大了"。
猜小了，电脑说"小了"。
猜对了，电脑说"恭喜你！"

这个游戏包含很多编程的核心思想：
- 存数据（变量）
- 判断（条件）
- 重复（循环）
- 随机性

准备好了吗？
```

---

## 完整代码

```python
import random

# 电脑想一个数字
number = random.randint(1, 100)

print("我想了一个1到100的数字，猜猜看！")

# 猜测次数
guesses = 0

while True:
    # 玩家猜
    guess = int(input("你猜几？"))
    guesses = guesses + 1
    
    # 判断
    if guess == number:
        print(f"对了！你用了{guesses}次猜中！")
        break
    elif guess > number:
        print("大了，再试试")
    else:
        print("小了，再试试")
```

---

## 分步教学

### Part 1: 让电脑想数字（5分钟）

**目标：** 理解变量和随机数

```python
import random
number = random.randint(1, 100)
print(number)
```

**讲解要点：**
- `import random` = 打开随机数工具箱
- `random.randint(1, 100)` = 随机选一个1到100的数
- `number = ...` = 把选中的数存进变量
- `print(number)` = 显示出来看看

**互动：**
```
运行几次看看，每次是不是不一样的数字？

这就是"随机"——电脑也不知道会选哪个。
```

---

### Part 2: 让玩家猜（5分钟）

**目标：** 理解输入和类型转换

```python
import random
number = random.randint(1, 100)

guess = int(input("你猜几？"))
print("你猜的是", guess)
```

**讲解要点：**
- `input("你猜几？")` = 显示问题，等待输入
- `int(...)` = 把输入的文字变成数字
- `guess = ...` = 把你猜的存进变量

**常见问题：**
```
Q: 为什么要用 int()？
A: input 得到的是文字，"5" 和 5 不一样。
   文字不能比较大小，所以要变成数字。
```

---

### Part 3: 判断对错（10分钟）

**目标：** 理解条件判断

```python
import random
number = random.randint(1, 100)

guess = int(input("你猜几？"))

if guess == number:
    print("对了！")
elif guess > number:
    print("大了")
else:
    print("小了")
```

**讲解要点：**
- `if` = 如果
- `==` = 等于（两个等号！）
- `elif` = 否则如果
- `else` = 否则
- 缩进很重要！

**互动：**
```
试着改成：
- 猜对显示"你真厉害"
- 猜错显示具体差多少

提示：abs(guess - number) 可以算差多少
```

---

### Part 4: 可以一直猜（10分钟）

**目标：** 理解循环

```python
import random
number = random.randint(1, 100)

while True:
    guess = int(input("你猜几？"))
    
    if guess == number:
        print("对了！")
        break
    elif guess > number:
        print("大了")
    else:
        print("小了")
```

**讲解要点：**
- `while True:` = 一直重复
- `break` = 跳出循环（猜对时停止）
- 注意缩进！

**互动：**
```
试玩一下。能猜对吗？

挑战：能在10次内猜对吗？
提示：每次猜中间的数字效率最高。
```

---

### Part 5: 记录猜测次数（5分钟）

**目标：** 理解变量更新

```python
import random
number = random.randint(1, 100)

guesses = 0  # 记录猜了几次

while True:
    guess = int(input("你猜几？"))
    guesses = guesses + 1
    
    if guess == number:
        print(f"对了！你用了{guesses}次")
        break
    elif guess > number:
        print("大了")
    else:
        print("小了")
```

**讲解要点：**
- `guesses = 0` = 初始化计数器
- `guesses = guesses + 1` = 每次加1
- `f"..."` = 格式化字符串，可以插入变量

---

## 挑战任务

### 初级
- [ ] 修改数字范围（1-1000？）
- [ ] 猜对后显示"太棒了！"而不是"对了！"
- [ ] 限制最多猜10次

### 中级
- [ ] 显示剩余次数
- [ ] 游戏结束后可以再玩一次
- [ ] 记录最好成绩（最少次数）

### 高级
- [ ] 选择难度（简单/中等/困难）
- [ ] 多人模式（轮流猜）
- [ ] 计时模式

---

## 常见错误处理

### 错误1：输入的不是数字
```
ValueError: invalid literal for int()
```

**解决：**
```python
try:
    guess = int(input("你猜几？"))
except:
    print("请输入数字！")
    continue
```

### 错误2：缩进不对
```
IndentationError: expected an indented block
```

**解决：**
```
检查 if/elif/else/while 下面的代码有没有缩进。
用4个空格或者Tab键。
```

---

## 课后思考

1. 电脑是怎么"想"数字的？
2. 为什么最多7次就能猜对？（二分法）
3. 如果要让游戏更难/更简单，可以怎么改？

---

## 扩展项目

完成猜数字后，可以尝试：

- **反向猜数字**：玩家想数字，电脑猜
- **猜词游戏**：猜单词而不是数字
- **21点游戏**：累计得分，不能超过21
- **文字冒险**：多分支的故事选择


path: references/knowledge-tree.md
content: # 知识树结构

中学生编程启蒙的知识体系，按学习顺序组织。

---

## 第一阶段：入门体验（1-3小时）

### 核心目标
完成第一个项目，体验"我能做出东西"

### 知识点
- [ ] 什么是编程
- [ ] 运行代码的方法
- [ ] 变量（给数据起名字）
- [ ] 输入输出（和电脑对话）
- [ ] 条件判断（if/else）

### 项目
- 猜数字游戏
- 简单问答程序
- 文字冒险游戏

### 解锁成就
🎮 "第一个游戏" - 完成猜数字游戏
💬 "电脑会说话了" - 让电脑输出文字
🎯 "做选择" - 使用条件判断

---

## 第二阶段：基础能力（5-10小时）

### 核心目标
理解基本概念，能独立写简单程序

### 知识点
- [ ] 循环（for/while）
- [ ] 数据类型（整数、文字、布尔）
- [ ] 列表（存多个数据）
- [ ] 函数（把代码打包）
- [ ] 随机数

### 项目
- 猜词游戏（Hangman）
- 文字冒险游戏升级版
- 简单计算器
- 密码生成器

### 解锁成就
🔄 "重复大师" - 使用循环
📦 "收纳高手" - 使用列表
⚡ "快捷方式" - 定义函数

---

## 第三阶段：进阶应用（10-20小时）

### 核心目标
能设计并完成中等复杂度项目

### 知识点
- [ ] 字典（键值对）
- [ ] 文件操作（读写）
- [ ] 错误处理（try/except）
- [ ] 模块使用
- [ ] 基本调试技巧

### 项目
- 个人日记本（保存到文件）
- 单词学习工具
- 简单待办事项
- 网页数据抓取入门

### 解锁成就
💾 "数据保管员" - 操作文件
🛡️ "防御编程" - 处理错误
🔧 "工具收集者" - 使用3个以上模块

---

## 第四阶段：项目实践（20+小时）

### 核心目标
独立完成完整项目，培养解决问题的能力

### 知识点
- [ ] 项目规划
- [ ] 代码组织
- [ ] 注释和文档
- [ ] 基本测试
- [ ] 版本控制（Git基础）

### 项目方向（根据兴趣选择）
- 游戏：文字RPG、图形游戏（Pygame）
- 工具：自动化脚本、数据处理
- Web：简单网站（Flask）
- AI：调用API做聊天机器人

### 解锁成就
🏗️ "项目大师" - 完成完整项目
👥 "团队协作" - 使用Git
🚀 "发布者" - 分享你的程序

---

## 知识点依赖关系

```
变量 ──┬── 条件判断 ── 循环 ── 列表 ── 字典
       │
       └── 函数 ── 模块 ── 文件操作
                           │
                           └── 错误处理
```

---

## 概念掌握标准

### ✅ 已掌握
- 能独立使用
- 能解释给同学听
- 能在不同场景应用

### 🔄 学习中
- 知道是什么
- 需要看提示使用
- 偶尔出错

### ❓ 未学习
- 没接触过
- 或者接触过但忘记了

---

## 学习路径建议

### 路径 A：游戏方向
```
猜数字 → 文字冒险 → 猜词游戏 → 文字RPG → 图形游戏
```

### 路径 B：工具方向
```
简单问答 → 计算器 → 密码生成器 → 文件处理 → 自动化脚本
```

### 路径 C：数据方向
```
简单问答 → 数据收集 → 数据处理 → 可视化 → 简单分析
```

---

## 推荐资源

### 在线练习
- Codecademy（英文，互动式）
- LeetCode 简单题（有一定基础后）
- CheckIO（游戏化学习）

### 视频教程
- B站搜索"Python入门"（中文）
- 选择"项目驱动"类型的教程

### 书籍
- 《Python编程：从入门到实践》（有中文版）
- 《笨办法学Python》（适合自学）

---

## 注意事项

1. **不要追求完美** - 能运行的烂代码 > 完美设计的代码
2. **多动手少看书** - 编程是技能，不是知识
3. **遇到错误是正常的** - 调试是学习的一部分
4. **按兴趣深入** - 不感兴趣的内容可以跳过
5. **定期回顾** - 学新东西时复习旧知识


path: scripts/batch_rename.py
content: #!/usr/bin/env python3
"""
文件重命名工具
适合教学 - 展示文件操作和自动化
"""

import os
import sys

def batch_rename(folder_path, prefix="", suffix=""):
    """
    批量重命名文件夹中的所有文件
    
    参数：
        folder_path: 文件夹路径
        prefix: 添加到文件名前面的文字
        suffix: 添加到文件名后面的文字（扩展名之前）
    """
    
    # 检查文件夹是否存在
    if not os.path.exists(folder_path):
        print(f"错误：找不到文件夹 {folder_path}")
        return
    
    # 获取所有文件
    files = os.listdir(folder_path)
    
    print(f"在 {folder_path} 中找到 {len(files)} 个文件")
    print()
    
    # 预览重命名
    print("重命名预览：")
    print("-" * 50)
    
    rename_list = []
    for filename in files:
        # 跳过文件夹
        if os.path.isdir(os.path.join(folder_path, filename)):
            continue
        
        # 分离文件名和扩展名
        name, ext = os.path.splitext(filename)
        
        # 新文件名
        new_name = f"{prefix}{name}{suffix}{ext}"
        
        print(f"{filename:30s} → {new_name}")
        rename_list.append((filename, new_name))
    
    print("-" * 50)
    print(f"共 {len(rename_list)} 个文件将被重命名")
    
    # 确认
    confirm = input("\n确认执行？(y/n): ")
    if confirm.lower() != 'y':
        print("已取消")
        return
    
    # 执行重命名
    success = 0
    for old_name, new_name in rename_list:
        try:
            old_path = os.path.join(folder_path, old_name)
            new_path = os.path.join(folder_path, new_name)
            os.rename(old_path, new_path)
            success += 1
        except Exception as e:
            print(f"重命名 {old_name} 失败: {e}")
    
    print(f"\n✅ 成功重命名 {success} 个文件")

def add_numbering(folder_path, start=1):
    """
    给文件添加序号
    
    参数：
        folder_path: 文件夹路径
        start: 起始序号
    """
    
    if not os.path.exists(folder_path):
        print(f"错误：找不到文件夹 {folder_path}")
        return
    
    files = [f for f in os.listdir(folder_path) 
             if os.path.isfile(os.path.join(folder_path, f))]
    
    print(f"找到 {len(files)} 个文件")
    print("\n重命名预览：")
    print("-" * 50)
    
    rename_list = []
    for i, filename in enumerate(files, start=start):
        name, ext = os.path.splitext(filename)
        new_name = f"{i:03d}_{name}{ext}"  # 三位数序号
        
        print(f"{filename:30s} → {new_name}")
        rename_list.append((filename, new_name))
    
    print("-" * 50)
    
    confirm = input("\n确认执行？(y/n): ")
    if confirm.lower() != 'y':
        print("已取消")
        return
    
    for old_name, new_name in rename_list:
        old_path = os.path.join(folder_path, old_name)
        new_path = os.path.join(folder_path, new_name)
        os.rename(old_path, new_path)
    
    print(f"\n✅ 成功重命名 {len(rename_list)} 个文件")

if __name__ == "__main__":
    # 使用示例
    print("=" * 50)
    print("📁 文件批量重命名工具")
    print("=" * 50)
    print()
    print("功能：")
    print("1. 添加前缀/后缀")
    print("2. 添加序号")
    print()
    
    choice = input("选择功能 (1/2): ")
    folder = input("输入文件夹路径: ")
    
    if choice == "1":
        prefix = input("前缀（直接回车跳过）: ")
        suffix = input("后缀（直接回车跳过）: ")
        batch_rename(folder, prefix, suffix)
    elif choice == "2":
        start = input("起始序号（默认1）: ")
        start = int(start) if start else 1
        add_numbering(folder, start)
    else:
        print("无效选择")


path: scripts/guess_number_game.py
content: #!/usr/bin/env python3
"""
猜数字游戏 - 完整版
适合教学演示和学生参考
"""

import random

def guess_number_game():
    """猜数字游戏主函数"""
    
    # 欢迎信息
    print("=" * 40)
    print("🎮 猜数字游戏")
    print("=" * 40)
    print("我想了一个1到100的数字，你能猜中吗？")
    print()
    
    # 游戏设置
    number = random.randint(1, 100)
    max_attempts = 10
    attempts = 0
    
    # 游戏循环
    while attempts < max_attempts:
        # 获取玩家输入
        try:
            guess = int(input(f"第{attempts + 1}次尝试，你猜几？"))
        except ValueError:
            print("⚠️  请输入一个数字！")
            continue
        
        attempts += 1
        
        # 判断结果
        if guess == number:
            print(f"🎉 恭喜你！{attempts}次猜中了！")
            if attempts <= 3:
                print("太厉害了！你是猜数字天才！")
            elif attempts <= 7:
                print("表现不错！")
            else:
                print("终于猜对了！")
            break
        elif guess > number:
            print(f"📈 大了！还有{max_attempts - attempts}次机会")
        else:
            print(f"📉 小了！还有{max_attempts - attempts}次机会")
        
        # 检查是否用完机会
        if attempts >= max_attempts:
            print(f"😢 机会用完了！答案是 {number}")
    
    # 询问是否再玩
    play_again = input("\n再玩一次？(y/n): ")
    if play_again.lower() == 'y':
        print()
        guess_number_game()
    else:
        print("👋 再见！")

if __name__ == "__main__":
    guess_number_game()


path: scripts/simple_chatbot.py
content: #!/usr/bin/env python3
"""
简单聊天机器人
适合教学 - 展示字符串处理和条件判断
"""

import random
import time

def chatbot():
    """简单聊天机器人"""
    
    print("=" * 40)
    print("🤖 聊天机器人")
    print("=" * 40)
    print("和我聊天吧！输入'再见'退出。")
    print()
    
    # 机器人名字
    bot_name = "小码"
    print(f"{bot_name}: 你好！我是{bot_name}，你叫什么名字？")
    
    # 获取用户名字
    user_name = input("你: ")
    
    # 问候
    greetings = [
        f"你好，{user_name}！很高兴认识你！",
        f"嗨，{user_name}！",
        f"{user_name}，这名字真好听！",
    ]
    print(f"{bot_name}: {random.choice(greetings)}")
    
    # 主聊天循环
    while True:
        user_input = input(f"{user_name}: ")
        
        # 退出条件
        if user_input in ['再见', '拜拜', 'bye', 'exit', 'quit']:
            print(f"{bot_name}: 再见，{user_name}！下次再聊！👋")
            break
        
        # 简单的回复逻辑
        response = get_response(user_input, user_name)
        print(f"{bot_name}: {response}")

def get_response(text, name):
    """根据输入生成回复"""
    
    text = text.lower()
    
    # 问候
    if any(word in text for word in ['你好', '嗨', 'hi', 'hello']):
        responses = [
            f"你好呀，{name}！",
            "嗨！有什么想聊的？",
            "你好！今天心情怎么样？",
        ]
        return random.choice(responses)
    
    # 询问名字
    elif '名字' in text or '叫什么' in text:
        return "我叫小码，是你的聊天机器人朋友！"
    
    # 询问年龄
    elif '岁' in text or '年龄' in text or '多大' in text:
        return "我才出生没多久呢，还是个小宝宝～"
    
    # 询问爱好
    elif '喜欢' in text or '爱好' in text:
        return "我喜欢和人类聊天！你呢，你有什么爱好？"
    
    # 表达情感
    elif any(word in text for word in ['开心', '高兴', '快乐']):
        return "太好了！我也为你开心！😄"
    elif any(word in text for word in ['难过', '伤心', '不开心']):
        return "别难过，有什么事可以和我说说～"
    
    # 编程相关
    elif '编程' in text or '代码' in text or 'python' in text:
        return "编程很有趣！你也在学编程吗？"
    
    # 默认回复
    else:
        default_responses = [
            "嗯嗯，有趣！",
            "然后呢？",
            "真的吗？",
            "哇！",
            "我不太明白，能换个说法吗？",
            f"{name}，你在说什么呀？",
        ]
        return random.choice(default_responses)

if __name__ == "__main__":
    chatbot()


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)