> **GESP等级：三级 | 考级考点：GESP Python 三级**

# 09第09节4 — 字符串方法上：split() / join() / strip() / upper() / lower()

**关联GESP考点：GESP #28（字符串基础操作）、GESP #30（字符串方法）**

---

## 一、教学目标

### 知识目标
1. 理解 `split()` 的作用 —— 将字符串按指定分隔符拆分成列表
2. 掌握 `join()` 的用法 —— 将列表中的字符串通过指定分隔符合并成字符串
3. 掌握 `strip()` 的用法 —— 去掉字符串首尾的空格和换行符
4. 掌握 `upper()` 和 `lower()` 的用法 —— 字符串的大小写转换

### 能力目标
1. 能用 `split()` 将逗号分隔的文字解析成列表
2. 能用 `join()` 将列表合并成易读的字符串
3. 能用 `strip()` 清洗用户输入的空白字符
4. 能用 `upper()` / `lower()` 统一文字大小写进行比较

### 情感目标
- 培养"字符串方法工具箱"思维 —— 遇到文字处理任务，先想想有什么工具
- 体会字符串方法在实际数据处理中的价值（清洗、格式化、解析）

---

## 二、教学重点与难点

| 类型 | 内容 |
|------|------|
| **重点** | `split()` 按分隔符拆分；`join()` 合并列表为字符串；`strip()` 去首尾空格 |
| **难点** | `split()` 跟 `join()` 是"互逆操作"的对应关系；`" ".join(list)` 的语法（分隔符在左边） |
| **易错点** | `str.join(list)` 而不是 `list.join(str)`；`split()` 默认按空格分割；`strip()` 只去首尾不去中间 |

---

## 三、教学过程

### 第一阶段：导入（00:00-10:00）

**主题：字符串有很多内置方法 → 操作文字的工具箱**

引导语：
> 同学们，我们平时在生活中会用到各种工具——螺丝刀拧螺丝，锤子钉钉子，剪刀裁纸张。
> 在 Python 中，字符串也自带了很多"工具"，这些工具叫做**方法**（methods）。
> 今天我们就来认识字符串工具箱里的 5 个最常用工具！

**生活类比：**
- `split()`（拆分）→ 像把一串葡萄分成一颗颗葡萄
- `join()`（拼接）→ 像把一颗颗葡萄串成一串
- `strip()`（修剪）→ 像给蔬菜去掉头尾
- `upper()`（大写）→ 像把字写得大大的、很正式
- `lower()`（小写）→ 像把字写得小小的、很谦虚

**板书引入：**
```python
s = "a,b,c"
print(s.split(","))   # ['a', 'b', 'c']  ← 按逗号切开
```

---

### 第二阶段：知识点讲解（10:00-30:00）

#### 知识点①：`split(sep)` —— 按分隔符拆分成列表

```python
"a,b,c".split(",")     →  ['a', 'b', 'c']
"1-2-3".split("-")     →  ['1', '2', '3']
"hello world".split()  →  ['hello', 'world']    # 默认按空格拆分
"red blue green".split(" ")  →  ['red', 'blue', 'green']
```

**记忆钩子：** `split()切分列表` —— 把字符串"劈开"变成列表

| 用法 | 结果 | 说明 |
|------|:----:|:----:|
| `"a,b,c".split(",")` | `['a','b','c']` | 用逗号拆分 |
| `"1-2-3".split("-")` | `['1','2','3']` | 用减号拆分 |
| `"hello world".split()` | `['hello','world']` | 默认按空格拆分 |
| `"a,b,c,d".split(",", 2)` | `['a','b','c,d']` | 第二个参数控制拆分次数 |

**注意：** `split()` 不传参数时，默认按**任意空白字符**（空格、Tab、换行）拆分，并且会自动去掉连续空白！

#### 知识点②：`join(iterable)` —— 把列表合并成字符串

```python
"-".join(["a", "b"])        →  "a-b"
", ".join(["苹果", "香蕉"])  →  "苹果, 香蕉"
" ".join(["hello", "world"]) →  "hello world"
"".join(["P", "y", "t", "h", "o", "n"])  →  "Python"
```

**记忆钩子：** `join()拼接字符串` —— 用分隔符把列表"串"起来

**语法关键：** 分隔符写在左边，列表写在括号里！
```python
# ✅ 正确
",".join(["a", "b"])    →  "a,b"

# ❌ 错误（初学者常犯）
["a", "b"].join(",")    →  AttributeError！
```

**核心理解：`split()` 和 `join()` 是互逆操作！**
```python
s = "a,b,c"
s.split(",")             →  ['a', 'b', 'c']
",".join(["a", "b", "c"])  →  "a,b,c"  ← 变回来了！
```

#### 知识点③：`strip()` —— 去掉首尾空格

```python
"  hello  ".strip()   →  "hello"     # 去掉首尾空格
"\n\t你好\n".strip()  →  "你好"      # 去掉换行和Tab
"  a b c  ".strip()   →  "a b c"     # 只去首尾，不去中间
```

**记忆钩子：** `strip()去掉首尾空格` —— 就像给蔬菜削皮去头尾

**变体：**
```python
"---hello---".strip("-")  →  "hello"    # 去掉指定字符
```

#### 知识点④：`upper()` —— 全部转大写

```python
"Hello".upper()      →  "HELLO"
"hello world".upper()  →  "HELLO WORLD"
"123 abc!".upper()   →  "123 ABC!"
```

#### 知识点⑤：`lower()` —— 全部转小写

```python
"Hello".lower()      →  "hello"
"HELLO WORLD".lower()  →  "hello world"
"Hello World!".lower()  →  "hello world!"
```

**记忆钩子（upper + lower）：** `upper()全大写像喊出来，lower()全小写像悄悄话`

**应用场景：统一大小写再比较**
```python
user_input = "Yes"
if user_input.lower() == "yes":
    print("用户确认了！")
```

---

### 第三阶段：演示（30:00-40:00）

#### 核心演示：用 `split()` + `turtle` 画彩色点阵

```python
import turtle

t = turtle.Turtle()
t.speed(5)

# 用字符串存储颜色数据，用 split 解析
colors_str = "red,blue,green,yellow,purple"
colors = colors_str.split(",")  # → ['red','blue','green','yellow','purple']

# 画5个不同颜色的点
for i in range(5):
    t.color(colors[i])
    t.dot(30)
    t.penup()
    t.forward(50)
    t.pendown()
```

**师生互动演示：**

演示1：`split()` 切分颜色名
```python
colors_str = "red,blue,green"
colors = colors_str.split(",")
print(colors)  # ['red', 'blue', 'green']
```

演示2：`join()` 合并为句子
```python
words = ["我", "爱", "Python"]
sentence = " ".join(words)
print(sentence)  # "我 爱 Python"
```

演示3：`strip()` 清洗输入
```python
name = "  小明  \n".strip()
print(f"你好，{name}！")  # "你好，小明！"
```

演示4：`upper()` + `lower()` 统一比较
```python
answer = input("要继续吗？(yes/no)：")
if answer.lower() == "yes":
    print("继续...")
else:
    print("结束")
```

---

### 第四阶段：实操（40:00-55:00）

#### 实操①：填空方法作用

根据描述，写出对应的字符串方法名称：

| 描述 | 方法名 |
|------|:------:|
| 把字符串按指定字符拆成列表 | `____()` |
| 把列表中的元素合并成字符串 | `____()` |
| 去掉字符串首尾的空格和换行 | `____()` |
| 把字符串中所有字母变成大写 | `____()` |
| 把字符串中所有字母变成小写 | `____()` |

**答案：** `split`、`join`、`strip`、`upper`、`lower`

#### 实操②：代码补全 split / join

补全下面的代码，使其能正确运行：

**题目1：将日期字符串拆分成年、月、日**
```python
date_str = "2026-06-05"
parts = date_str.____("-")   # 填什么？
print(f"年：{parts[0]}，月：{parts[1]}，日：{parts[2]}")
# 期望输出：年：2026，月：06，日：05
```
答案：`split`

**题目2：将列表用逗号连接成字符串**
```python
fruits = ["苹果", "香蕉", "橘子"]
result = "____".____(fruits)   # 填什么？
print(f"我喜欢吃：{result}")
# 期望输出：我喜欢吃：苹果, 香蕉, 橘子
```
答案：`", "` 和 `join`

**题目3：清洗用户输入的内容**
```python
user_input = "    Python 很有趣！\n"
clean = user_input.____()   # 填什么？
print(clean)  # 期望输出："Python 很有趣！"
```
答案：`strip`

#### 实操③：用 split + join + upper 处理颜色名

编写一个程序，完成以下步骤：

1. 有一个字符串 `colors_str = "red, blue, green"`
2. 用 `split()` 按 `", "`（逗号+空格）拆分成列表
3. 将列表中的每种颜色名用 `upper()` 转成大写
4. 用 `join()` 重新组合成字符串，用 `" | "` 作为分隔符
5. 输出结果

**参考输出：**
```
原字符串：red, blue, green
处理结果：RED | BLUE | GREEN
```

**参考代码：**
```python
colors_str = "red, blue, green"
colors = colors_str.split(", ")
upper_colors = []
for c in colors:
    upper_colors.append(c.upper())
result = " | ".join(upper_colors)
print("原字符串：", colors_str)
print("处理结果：", result)
```

---

### 第五阶段：小测与总结（55:00-60:00）

#### 小测题目

```
1. "'1-2-3'.split('-')" 返回什么？
   A. ['1', '2', '3']
   B. '1-2-3'
   C. ['1-2-3']
   D. 报错
   答案：A（按 - 拆分成 3 个元素的列表）

2. '-'.join(['a', 'b', 'c']) 的结果是？
   A. 'a-b-c'
   B. ['a', 'b', 'c']
   C. 'abc'
   D. 'a,b,c'
   答案：A（用 - 把列表元素连接成字符串）

3. "   Hello World   ".strip() 的结果是？
   A. "   Hello World   "
   B. "Hello World"
   C. "HelloWorld"
   D. "   Hello World"
   答案：B（去掉首尾空格）

4. "Python".upper() + "fun".lower() 的结果是？
   A. "PYTHONfun"
   B. "pythonFUN"
   C. "PYTHONFUN"
   D. "Pythonfun"
   答案：A（upper 全大写，lower 全小写）

5. 下面哪句话是正确的？
   A. " ".join("abc") 会报错
   B. "a,b,c".split() 和 "a,b,c".split(",") 结果相同
   C. 'hello'.strip('h') 返回 'ello'
   D. split() 和 join() 是互逆操作
   答案：D（split 拆分，join 合并，互为逆操作）
```

#### 课堂总结口诀

```
split()切分列表
join()拼接字符串
strip()去掉首尾空格
upper()变大写
lower()变小写
互逆操作要记牢：split 和 join 是一对！
```

---

## 四、板书设计

```
┌─────────────────────────────────────────┐
│  字符串方法（上）—— 操作文字的工具箱    │
│                                         │
│  split(分隔符)  → 字符串 → 列表        │
│    "a,b,c".split(",") → ['a','b','c']  │
│                                         │
│  join(列表)     → 列表 → 字符串        │
│    "-".join(['a','b']) → "a-b"         │
│                                         │
│  strip()        → 去掉首尾空格          │
│    " hello ".strip() → "hello"         │
│                                         │
│  upper()        → 全转大写              │
│    "Hello".upper() → "HELLO"           │
│                                         │
│  lower()        → 全转小写              │
│    "Hello".lower() → "hello"           │
│                                         │
│  ⚠ join 语法：分隔符.join(列表)        │
│  ⚠ split 和 join 互为逆操作            │
└─────────────────────────────────────────┘
```

---

## 五、课后反思

| 项目 | 记录 |
|------|------|
| 学生掌握较好的点 | |
| 学生易混淆的点 | |
| 需要补充练习的点 | |
| 下节调整建议 | |
