> **GESP等级：三级 | 考级考点：GESP Python 三级**

# 字符串方法上：split / join / strip / upper / lower

## GESP #28 #30

---

## 🧰 导入：字符串有很多内置方法 → 操作文字的工具箱

> 生活中有各种工具：螺丝刀、锤子、剪刀
> Python 字符串也自带**方法**，就是处理文字的工具！

| 生活类比 | 对应方法 |
|-----------|:--------:|
| 把一串葡萄分成颗 | `split()` |
| 把散落的珠子串成串 | `join()` |
| 给蔬菜去头去尾 | `strip()` |
| 把字写大、喊出来 | `upper()` |
| 把字写小、悄悄话 | `lower()` |

```python
s = "a,b,c"
print(s.split(","))   # ['a', 'b', 'c']  ← 按逗号切开
```

---

## ✂️ 知识点①：split(sep) → 按分隔符拆分成列表

| 代码 | 结果 | 说明 |
|------|:----:|:----:|
| `"a,b,c".split(",")` | `['a','b','c']` | 按逗号拆分 |
| `"1-2-3".split("-")` | `['1','2','3']` | 按减号拆分 |
| `"hello world".split()` | `['hello','world']` | 默认按空格拆分 |
| `"a b c".split(" ")` | `['a','b','c']` | 明确按空格拆分 |

> 💡 **记忆钩子：** `split()切分列表` —— 把字符串"劈开"变成列表

**小细节：**
- `split()` 不带参数：按任意空白拆分，自动合并连续空白
- `split(",")` 带参数：按指定字符精确拆分

---

## 🔗 知识点②：join(iterable) → 把列表合并成字符串

| 代码 | 结果 | 说明 |
|------|:----:|:----:|
| `"-".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 是互逆操作

```
"a,b,c".split(",")         →  ['a', 'b', 'c']
",".join(['a', 'b', 'c'])  →  "a,b,c"    ← 变回来了！
```

---

## 🪥 知识点③：strip() → 去掉首尾空格

| 代码 | 结果 | 说明 |
|------|:----:|:----:|
| `"  hello  ".strip()` | `"hello"` | 去掉首尾空格 |
| `"\n\t你好\n".strip()` | `"你好"` | 去掉换行和Tab |
| `"  a b c  ".strip()` | `"a b c"` | 只去首尾，不去中间 |
| `"---hello---".strip("-")` | `"hello"` | 去掉指定字符 |

> 💡 **记忆钩子：** `strip()去掉首尾空格` —— 像给蔬菜削皮去头尾

---

## 🔠 知识点④：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()全小写像悄悄话`

### 真实应用：统一大小写再比较

```python
user_input = "Yes"
if user_input.lower() == "yes":
    print("用户确认了！")
```

---

## ⚡ 演示①：split 拆颜色名 → turtle 画点

```python
import turtle

t = turtle.Turtle()
t.speed(3)

colors_str = "red,blue,green,yellow,purple"
colors = colors_str.split(",")
# colors = ['red','blue','green','yellow','purple']

for i in range(5):
    t.color(colors[i])
    t.dot(30)
    t.penup()
    t.forward(50)
    t.pendown()
```

## ⚡ 演示②：join 合并为句子

```python
words = ["我", "爱", "Python"]
sentence = " ".join(words)
print(sentence)  # "我 爱 Python"
```

## ⚡ 演示③：strip 清洗输入

```python
name = "  小明  \n".strip()
print(f"你好，{name}！")  # "你好，小明！"
```

## ⚡ 演示④：upper/lower 统一大小写

```python
answer = input("要继续吗？(yes/no)：")
if answer.lower() == "yes":
    print("继续...")
else:
    print("结束")
```

---

## 🎯 实操①：填空方法作用

| 描述 | 方法名 |
|------|:------:|
| 把字符串按指定字符拆成列表 | `____()` |
| 把列表中的元素合并成字符串 | `____()` |
| 去掉字符串首尾的空格和换行 | `____()` |
| 把字符串中所有字母变成大写 | `____()` |
| 把字符串中所有字母变成小写 | `____()` |

**答案：** `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]}")
```
答案：`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 处理颜色名

```python
colors_str = "red, blue, green"
# 1. split 拆分成列表
colors = colors_str.split(", ")      # ['red', 'blue', 'green']

# 2. upper 转大写
upper_colors = []
for c in colors:
    upper_colors.append(c.upper())   # ['RED', 'BLUE', 'GREEN']

# 3. join 重新合并
result = " | ".join(upper_colors)
print("原字符串：", colors_str)  # red, blue, green
print("处理结果：", result)      # RED | BLUE | GREEN
```

---

## 📝 小测

```
1. "'1-2-3'.split('-')" 返回什么？
   A. ['1', '2', '3']
   B. '1-2-3'
   C. ['1-2-3']
   D. 报错

2. '-'.join(['a', 'b', 'c']) 的结果是？
   A. 'a-b-c'
   B. ['a', 'b', 'c']
   C. 'abc'
   D. 'a,b,c'

3. "   Hello World   ".strip() 的结果是？
   A. "   Hello World   "
   B. "Hello World"
   C. "HelloWorld"
   D. "   Hello World"

4. "Python".upper() + "fun".lower() 的结果是？
   A. "PYTHONfun"
   B. "pythonFUN"
   C. "PYTHONFUN"
   D. "Pythonfun"

5. 下面哪句话是正确的？
   A. " ".join("abc") 会报错
   B. "a,b,c".split() 和 "a,b,c".split(",") 结果相同
   C. 'hello'.strip('h') 返回 'ello'
   D. split() 和 join() 是互逆操作
```

**答案：** 1-A, 2-A, 3-B, 4-A, 5-D

---

## 📖 课堂总结

```
split()切分列表
join()拼接字符串
strip()去掉首尾空格
upper()变大写
lower()变小写
互逆操作要记牢：split 和 join 是一对！
```
