# GESP等级：三级 | GESP Python 三级考点

# -*- coding: utf-8 -*-
"""
09第2节4 — 字符串方法上：split() / join() / strip() / upper() / lower()
GESP考点：#28（字符串基础操作）、#30（字符串方法）
==============================================================
"""

print("=" * 60)
print("【导入】字符串有很多内置方法 → 操作文字的工具箱")
print("=" * 60)

s = "a,b,c"
print(f'原始字符串："{s}"')
print(f's.split(",") → {s.split(",")}')
print()

print("=" * 60)
print("【知识点①】split(sep) — 按分隔符拆分成列表")
print("=" * 60)

# split 基础用法
print(f'"a,b,c".split(",")      → {"a,b,c".split(",")}')
print(f'"1-2-3".split("-")      → {"1-2-3".split("-")}')
print(f'"hello world".split()   → {"hello world".split()}')
print(f'"red blue green".split(" ") → {"red blue green".split(" ")}')
print()

# split 第二参数（拆分次数）
print(f'"a-b-c-d".split("-")    → {"a-b-c-d".split("-")}')
print(f'"a-b-c-d".split("-", 2) → {"a-b-c-d".split("-", 2)}  ← 只拆2次')
print()

# split 默认行为 vs 指定空格
print('split() 不传参数：自动合并连续空白')
print(f'"  hello   world  ".split()  → {"  hello   world  ".split()}')
print(f'"  hello   world  ".split(" ") → {"  hello   world  ".split(" ")}  ← 注意空字符串！')
print()

print("=" * 60)
print("【知识点②】join(iterable) — 把列表合并成字符串")
print("=" * 60)

print(f'"-".join(["a", "b"])              → "{ "-".join(["a", "b"]) }"')
print(f'" ".join(["我", "爱", "Python"])   → "{ " ".join(["我", "爱", "Python"]) }"')
print(f'"".join(["P", "y", "t", "h", "o", "n"]) → "{ "".join(["P", "y", "t", "h", "o", "n"]) }"')
print(f'", ".join(["苹果", "香蕉", "橘子"]) → "{ ", ".join(["苹果", "香蕉", "橘子"]) }"')
print()

# 验证 split 和 join 是互逆操作
print("【验证互逆操作】")
original = "a,b,c"
parts = original.split(",")
back = ",".join(parts)
print(f'原始: "{original}"')
print(f'split → {parts}')
print(f'join  → "{back}"')
print(f'互逆验证: {original == back}')
print()

print("=" * 60)
print("【知识点③】strip() — 去掉首尾空格")
print("=" * 60)

# strip 基础
print(f'"  hello  ".strip()    → "{ "  hello  ".strip() }"')
strip_text = "\n\t你好\n"
print(f'"\\n\\t你好\\n".strip() → "{ strip_text.strip() }"')
print(f'"  a b c  ".strip()    → "{ "  a b c  ".strip() }"  ← 只去首尾，不去中间')
print()

# strip 带参数：去掉指定字符
print(f'"---hello---".strip("-") → "{ "---hello---".strip("-") }"')
print()

print("=" * 60)
print("【知识点④】upper() — 全部转大写")
print("=" * 60)

print(f'"Hello".upper()         → "{ "Hello".upper() }"')
print(f'"hello world".upper()   → "{ "hello world".upper() }"')
print(f'"123 abc!".upper()      → "{ "123 abc!".upper() }"')
print()

print("=" * 60)
print("【知识点⑤】lower() — 全部转小写")
print("=" * 60)

print(f'"Hello".lower()         → "{ "Hello".lower() }"')
print(f'"HELLO WORLD".lower()   → "{ "HELLO WORLD".lower() }"')
print(f'"Hello World!".lower()  → "{ "Hello World!".lower() }"')
print()

# 综合应用：统一大小写比较
print("【应用：统一大小写判断】")
user_input = "Yes"
if user_input.lower() == "yes":
    print(f'用户输入 "{user_input}"，lower() 后判断为 yes')
print()

print("=" * 60)
print("【演示①】split 拆分颜色名")
print("=" * 60)

colors_str = "red,blue,green,yellow,purple"
colors = colors_str.split(",")
print(f"颜色字符串: {colors_str}")
print(f"拆分成列表: {colors}")
print(f"第一种颜色: {colors[0]}")
print(f"颜色数量: {len(colors)} 种")
print()

print("=" * 60)
print("【演示②】join 合并为句子")
print("=" * 60)

words = ["我", "爱", "Python"]
sentence = " ".join(words)
print(f"词语列表: {words}")
print(f"合并成句: {sentence}")
print()

print("=" * 60)
print("【演示③】strip 清洗输入")
print("=" * 60)

raw_name = "  小明  \n"
clean_name = raw_name.strip()
print(f"原始输入: {repr(raw_name)}")
print(f"清洗后: {repr(clean_name)}")
print(f"你好，{clean_name}！")
print()

print("=" * 60)
print("【演示④】upper / lower 统一比较")
print("=" * 60)

# 模拟用户输入
test_responses = ["Yes", "yes", "YES", "yEs"]
for resp in test_responses:
    print(f'"{resp}" → lower() → "{resp.lower()}" → 是 yes 吗？{resp.lower() == "yes"}')
print()

print("=" * 60)
print("【实操①】填空方法作用 — 看结果猜方法")
print("=" * 60)

# 演示每个方法的效果，让学生填方法名
test_str = "a,b,c"
print(f'字符串 "{test_str}" 调用某个方法后 → {test_str.split(",")}  ← 调的是 split()')

test_str2 = ["a", "b"]
print(f'列表 {test_str2} 调方法 → "{ "-".join(test_str2) }"  ← 调的是 join()')

test_str3 = "  hello  "
print(f'字符串 "{test_str3}" 调方法 → "{ test_str3.strip() }"  ← 调的是 strip()')

test_str4 = "Hello"
print(f'字符串 "{test_str4}" 调方法 → "{ test_str4.upper() }"  ← 调的是 upper()')

test_str5 = "Hello"
print(f'字符串 "{test_str5}" 调方法 → "{ test_str5.lower() }"  ← 调的是 lower()')
print()

print("=" * 60)
print("【实操②】代码补全 — 日期拆分")
print("=" * 60)

date_str = "2026-06-05"
parts = date_str.split("-")
print(f"日期: {date_str}")
print(f"年: {parts[0]}, 月: {parts[1]}, 日: {parts[2]}")
print()

print("【实操②续】连接水果列表")
fruits = ["苹果", "香蕉", "橘子"]
result = ", ".join(fruits)
print(f"水果列表: {fruits}")
print(f"连接后: {result}")
print()

print("【实操②续】清洗输入")
user_input = "    Python 很有趣！\n"
clean = user_input.strip()
print(f"原始: {repr(user_input)}")
print(f"清洗: {repr(clean)}")
print()

print("=" * 60)
print("【实操③】split + join + upper 处理颜色名")
print("=" * 60)

colors_str = "red, blue, green"
print(f"原字符串：{colors_str}")

# 1. split 拆分成列表
colors = colors_str.split(", ")
print(f"1. split → {colors}")

# 2. upper 转大写
upper_colors = []
for c in colors:
    upper_colors.append(c.upper())
print(f"2. upper → {upper_colors}")

# 3. join 重新合并
result = " | ".join(upper_colors)
print(f"3. join  → {result}")
print()

# 更简洁的写法（列表推导式）
upper_colors2 = [c.upper() for c in colors_str.split(", ")]
result2 = " | ".join(upper_colors2)
print(f"简洁写法结果：{result2}")
print()

print("=" * 60)
print("【小测验证】")
print("=" * 60)

# 题目1
s1 = "1-2-3"
print(f'题目1："{s1}".split("-") = {s1.split("-")}')

# 题目2
parts2 = ["a", "b", "c"]
result2 = "-".join(parts2)
print(f'题目2："-".join({parts2}) = "{result2}"')

# 题目3
s3 = "   Hello World   "
cleaned3 = s3.strip()
print(f'题目3："{s3}".strip() = "{cleaned3}"')

# 题目4
p4 = "Python".upper()
f4 = "fun".lower()
print(f'题目4："Python".upper() + "fun".lower() = "{p4 + f4}"')

# 题目5
s1 = "a,b,c".split()
s2 = "a,b,c".split(",")
print(f"题目5：split() 不带参数: {s1}")
print(f"       split(',') 带参数: {s2}")
print(f"       结果相同吗？{s1 == s2}")
print()

print("=" * 60)
print("【课外挑战】综合运用")
print("=" * 60)

# 挑战1：将名和姓合并并统一大小写
first = "john"
last = "SMITH"
full_name = first.upper() + " " + last.lower()
print(f"名: {first}, 姓: {last}")
print(f"统一格式: {full_name}")

# 挑战2：字符串清洗 + 解析
data = "  12.5,  34.8 , 56.1  "
# 先 strip 去掉首尾空格，再 split 拆开
items = data.strip().split(",")
print(f"\n原始数据: {repr(data)}")
print(f"清洗后: {items}")
# 去掉每个元素的空格
clean_items = [item.strip() for item in items]
print(f"再去掉元素空格: {clean_items}")
# 转成数字
numbers = [float(item) for item in clean_items]
print(f"转为数字: {numbers}")
print(f"总和: {sum(numbers):.1f}")

# 挑战3：单词反转
sentence = "hello world python"
words_list = sentence.split()
reversed_words = words_list[::-1]  # 反转列表
result_sentence = " ".join(reversed_words)
print(f"\n原句: {sentence}")
print(f"反转: {result_sentence}")

print()
print("=" * 60)
print("【总结口诀】")
print("split()切分列表")
print("join()拼接字符串")
print("strip()去掉首尾空格")
print("upper()变大写")
print("lower()变小写")
print("互逆操作要记牢：split 和 join 是一对！")
print("=" * 60)
