第5课:计算机的语文课——字符串处理
🎯 本课目标
- 掌握字符串的基本操作
- 学会字符串切片和索引
- 掌握常用的字符串方法
- 能够制作文本处理工具
- 理解字符串格式化的多种方法
🔤 趣味引入:字符串是什么?
小实验:请你说出下面哪些是字符串:
- "你好,世界!" ✅
- 123 ❌
- "3.14" ✅
- Python ❌
- "True" ✅
- True ❌
答案:只要用引号(单引号或双引号)包围的,就是字符串!
字符串就是计算机存储和处理的文本信息。就像人用语言交流一样,计算机用字符串处理文字信息。
📖 字符串基本操作
创建字符串
# 三种创建字符串的方法
str1 = "你好,Python!" # 双引号
str2 = 'Hello World!' # 单引号
str3 = """这是一个
多行
字符串""" # 三引号(可以跨行)
print(str1)
print(str2)
print(str3)
运行结果:

转义字符
有些特殊字符需要用\转义:
| 转义字符 | 含义 | 示例 | 结果 |
|---------|------|------|------|
| \n | 换行 | "A\nB" | A换行B |
| \t | 制表符 | "A\tB" | A B |
| \\ | 反斜杠 | "C:\\" | C:\ |
| \" | 双引号 | "他说:\"你好\"" | 他说:"你好" |
| \' | 单引号 | 'I\'m fine' | I'm fine |
# 转义字符示例
print("第一行\n第二行")
print("姓名\t年龄\t成绩")
print("他说:\"好好学习!\"")
print('I\'m a student.')
print("路径:C:\\Users\\小明")

🔍 字符串索引和切片
字符串索引
字符串中的每个字符都有一个位置编号,从0开始:
text = "Python编程"
# 正向索引:0 1 2 3 4 5 6 7
# 反向索引:-8 -7 -6 -5 -4 -3 -2 -1
# 字符: P y t h o n 编 程
print(text[0]) # P
print(text[5]) # n
print(text[6]) # 编
print(text[-1]) # 程
print(text[-2]) # 编

注意:中文一个字算一个字符,英文一个字母算一个字符
字符串切片
切片可以获取字符串的一部分:
text = "我爱学Python编程"
# 基本切片:[开始:结束:步长]
print(text[0:3]) # 我爱学 (索引0-2)
print(text[3:9]) # Python (索引3-8)
print(text[:3]) # 我爱学 (从开头到索引2)
print(text[3:]) # Python编程 (从索引3到结尾)
print(text[-2:]) # 编程 (最后2个字符)
print(text[::2]) # 我学Pto编 (每隔一个取一个)
print(text[::-1]) # 程编nohtyP学爱我 (反转字符串)
切片练习
# 提取信息练习
sentence = "2023年10月15日,星期天,天气晴"
# 提取日期
date = sentence[0:10]
print(f"日期:{date}") # 2023年10月15日
# 提取星期
week = sentence[12:15]
print(f"星期:{week}") # 星期天
# 提取天气
weather = sentence[16:18]
print(f"天气:{weather}") # 天气

📊 字符串常用方法
1. 长度和统计
text = "Hello Python 你好"
# 字符串长度
print(f"字符串长度:{len(text)}") # 16
# 统计字符出现次数
print(f"'o'出现次数:{text.count('o')}") # 2
print(f"'P'出现次数:{text.count('P')}") # 1
print(f"空格出现次数:{text.count(' ')}") # 2

2. 查找和判断
email = "student@school.com"
# 查找位置
print(f"@的位置:{email.find('@')}") # 7
print(f".com的位置:{email.find('.com')}") # 13
print(f"不存在的查找:{email.find('abc')}") # -1
# 判断开头和结尾
print(f"是否以stu开头:{email.startswith('stu')}") # True
print(f"是否以.com结尾:{email.endswith('.com')}") # True
# 判断内容
print(f"是否全为字母:{'Hello'.isalpha()}") # True
print(f"是否全为数字:{'123'.isdigit()}") # True
print(f"是否全为字母或数字:{'Hello123'.isalnum()}") # True
print(f"是否全为小写:{'hello'.islower()}") # True
print(f"是否全为大写:{'HELLO'.isupper()}") # True
3. 大小写转换
text = "Hello World!"
# 大小写转换
print(f"全大写:{text.upper()}") # HELLO WORLD!
print(f"全小写:{text.lower()}") # hello world!
print(f"首字母大写:{text.capitalize()}") # Hello world!
print(f"每个单词首字母大写:{text.title()}") # Hello World!
# 大小写反转
text2 = "HeLLo PyThOn"
print(f"大小写反转:{text2.swapcase()}") # hEllO pYtHoN
4. 去除空白
text = " Hello Python! \n"
print(f"原字符串:'{text}'")
print(f"去除左边空白:'{text.lstrip()}'")
print(f"去除右边空白:'{text.rstrip()}'")
print(f"去除两边空白:'{text.strip()}'")
# 去除特定字符
text2 = "###重要通知###"
print(f"去除#:'{text2.strip('#')}'")
5. 分割和连接
# 分割字符串
sentence = "苹果,香蕉,橙子,葡萄"
fruits = sentence.split(",")
print(f"分割结果:{fruits}") # ['苹果', '香蕉', '橙子', '葡萄']
# 连接字符串
colors = ["红色", "绿色", "蓝色"]
color_str = "-".join(colors)
print(f"连接结果:{color_str}") # 红色-绿色-蓝色
# 多行分割
poem = "床前明月光\n疑是地上霜\n举头望明月\n低头思故乡"
lines = poem.splitlines()
print(f"行数:{len(lines)}") # 4
for i, line in enumerate(lines, 1):
print(f"第{i}行:{line}")
6. 替换
text = "我喜欢苹果,苹果很好吃"
# 简单替换
new_text = text.replace("苹果", "香蕉")
print(f"替换后:{new_text}") # 我喜欢香蕉,香蕉很好吃
# 指定替换次数
text2 = "aaaaabbbbbaaaaa"
new_text2 = text2.replace("a", "X", 3) # 只替换前3个
print(f"部分替换:{new_text2}") # XXXaabbbbbaaaaa
🎨 字符串格式化
方法1:f-string(推荐)
name = "小明"
age = 10
score = 95.5
# 基本使用
print(f"{name}今年{age}岁,考了{score}分")
# 控制小数位数
pi = 3.1415926
print(f"π的值是:{pi:.2f}") # 保留2位小数
print(f"π的值是:{pi:.4f}") # 保留4位小数
# 控制宽度和对齐
print(f"姓名:{name:<10}年龄:{age}") # 左对齐
print(f"姓名:{name:^10}年龄:{age}") # 居中对齐
print(f"姓名:{name:>10}年龄:{age}") # 右对齐
# 数字格式化
money = 1234567.89
print(f"金额:{money:,}元") # 千位分隔符
print(f"百分比:{0.75:.1%}") # 百分比

方法2:format()方法
# 位置参数
print("{}今年{}岁".format("小明", 10))
# 关键字参数
print("{name}考了{score}分".format(name="小红", score=98))
# 数字格式化
print("π的值是:{:.3f}".format(3.14159)) # 3.142
print("百分比:{:.1%}".format(0.85)) # 85.0%
方法3:%格式化(旧方法)
# 基本格式化
print("%s今年%d岁" % ("小明", 10))
# 数字格式化
print("π的值是:%.2f" % 3.14159) # 3.14
print("百分比:%.1f%%" % 85.5) # 85.5%
🔧 字符串工具制作
工具1:密码强度检测器
def check_password_strength(password):
"""检查密码强度"""
if len(password) < 6:
return "密码太短!至少需要6个字符"
score = 0
tips = []
# 检查长度
if len(password) >= 8:
score += 1
elif len(password) >= 12:
score += 2
# 检查是否包含数字
if any(char.isdigit() for char in password):
score += 1
else:
tips.append("建议添加数字")
# 检查是否包含小写字母
if any(char.islower() for char in password):
score += 1
else:
tips.append("建议添加小写字母")
# 检查是否包含大写字母
if any(char.isupper() for char in password):
score += 1
else:
tips.append("建议添加大写字母")
# 检查是否包含特殊字符
special_chars = "!@#$%^&*()_+-=[]{}|;:,.<>?"
if any(char in special_chars for char in password):
score += 1
else:
tips.append("建议添加特殊字符")
# 根据分数评级
if score <= 2:
strength = "弱"
elif score <= 4:
strength = "中"
else:
strength = "强"
return strength, score, tips
# 使用示例
print("🔐 密码强度检测器")
print("=" * 30)
password = input("请输入密码:")
strength, score, tips = check_password_strength(password)
print(f"\n密码强度:{strength}")
print(f"安全分数:{score}/6")
if tips:
print("\n改进建议:")
for tip in tips:
print(f" • {tip}")

工具2:文本统计工具
def text_statistics(text):
"""统计文本信息"""
stats = {
"总字符数": len(text),
"字母数": sum(1 for char in text if char.isalpha()),
"数字数": sum(1 for char in text if char.isdigit()),
"空格数": text.count(" "),
"标点符号数": sum(1 for char in text if char in ",.!?;:,。!?;:"),
"行数": text.count("\n") + 1,
"单词数": len([word for word in text.split() if word]), # 非空单词
}
return stats
# 使用示例
print("📊 文本统计工具")
print("=" * 30)
sample_text = """Python是一种简单易学的编程语言。
它被广泛用于数据分析、人工智能、网络开发等领域。
Python的设计哲学强调代码的可读性和简洁性。"""
print("示例文本:")
print(sample_text)
print("=" * 30)
stats = text_statistics(sample_text)
for key, value in stats.items():
print(f"{key}:{value}")
工具3:简繁体转换器
# 简繁对照表(简化版)
simple_to_traditional = {
"学": "學", "习": "習", "编": "編", "程": "程",
"语": "語", "言": "言", "计": "計", "算": "算",
"机": "機", "科": "科", "技": "技", "发": "發",
"展": "展", "未": "未", "来": "來", "人": "人",
"工": "工", "智": "智", "能": "能", "数": "數",
"据": "據", "分": "分", "析": "析"
}
traditional_to_simple = {v: k for k, v in simple_to_traditional.items()}
def convert_text(text, direction="to_traditional"):
"""转换简繁体"""
result = ""
if direction == "to_traditional":
for char in text:
result += simple_to_traditional.get(char, char)
else: # to_simple
for char in text:
result += traditional_to_simple.get(char, char)
return result
# 使用示例
print("🔄 简繁体转换器")
print("=" * 30)
text = "学习编程语言,计算机科学发展,未来人工智能数据分析"
print(f"简体原文:{text}")
traditional = convert_text(text, "to_traditional")
print(f"繁体转换:{traditional}")
simple_again = convert_text(traditional, "to_simple")
print(f"转回简体:{simple_again}")
🎮 字符串游戏
游戏1:猜单词游戏
import random
words = ["python", "program", "computer", "algorithm", "variable", "function", "string", "integer"]
def hangman():
"""猜单词游戏"""
word = random.choice(words)
guessed = ["_"] * len(word)
attempts = 6
guessed_letters = []
print("🎮 猜单词游戏")
print("=" * 20)
print(f"单词长度:{len(word)}")
print(f"当前状态:{' '.join(guessed)}")
while attempts > 0 and "_" in guessed:
print(f"\n剩余尝试次数:{attempts}")
print(f"已猜字母:{' '.join(guessed_letters)}")
guess = input("猜一个字母:").lower()
if len(guess) != 1 or not guess.isalpha():
print("请输入单个字母!")
continue
if guess in guessed_letters:
print("这个字母已经猜过了!")
continue
guessed_letters.append(guess)
if guess in word:
for i, letter in enumerate(word):
if letter == guess:
guessed[i] = guess
print(f"✅ 正确!字母 {guess} 在单词中")
else:
attempts -= 1
print(f"❌ 错误!字母 {guess} 不在单词中")
print(f"当前状态:{' '.join(guessed)}")
if "_" not in guessed:
print(f"\n🎉 恭喜!你猜对了单词:{word}")
else:
print(f"\n💀 游戏结束!正确答案是:{word}")
# 开始游戏
hangman()

游戏2:文字加密解密
def caesar_cipher(text, shift, mode="encrypt"):
"""凯撒密码加密/解密"""
result = ""
for char in text:
if char.isalpha():
# 获取基准字符
base = ord('a') if char.islower() else ord('A')
# 计算新位置
if mode == "encrypt":
new_pos = (ord(char) - base + shift) % 26
else: # decrypt
new_pos = (ord(char) - base - shift) % 26
result += chr(base + new_pos)
else:
result += char
return result
# 使用示例
print("🔐 凯撒密码加密器")
print("=" * 30)
text = "Hello Python 你好"
shift = 3
print(f"原文:{text}")
print(f"偏移量:{shift}")
# 加密
encrypted = caesar_cipher(text, shift, "encrypt")
print(f"密文:{encrypted}")
# 解密
decrypted = caesar_cipher(encrypted, shift, "decrypt")
print(f"解密:{decrypted}")
📊 实际应用案例
案例1:学生信息处理
def process_student_info(info_str):
"""处理学生信息字符串"""
# 假设格式:姓名,年龄,成绩1,成绩2,成绩3
parts = info_str.split(",")
if len(parts) < 5:
return "格式错误!"
name = parts[0]
age = int(parts[1])
scores = [float(score) for score in parts[2:5]]
# 计算统计信息
total = sum(scores)
average = total / len(scores)
highest = max(scores)
lowest = min(scores)
# 格式化输出
result = f"""
学生信息报告
============
姓名:{name}
年龄:{age}岁
成绩:{scores[0]}, {scores[1]}, {scores[2]}
总分:{total:.1f}
平均分:{average:.1f}
最高分:{highest:.1f}
最低分:{lowest:.1f}
"""
return result
# 使用示例
print("📋 学生信息处理系统")
print("=" * 30)
info = "张三,12,95.5,88.0,92.5"
print(process_student_info(info))
案例2:URL解析器
def parse_url(url):
"""解析URL"""
result = {}
# 解析协议
if "://" in url:
result["协议"], rest = url.split("://", 1)
else:
result["协议"] = "http"
rest = url
# 解析域名
if "/" in rest:
result["域名"], path = rest.split("/", 1)
result["路径"] = "/" + path
else:
result["域名"] = rest
result["路径"] = "/"
# 解析参数
if "?" in url:
result["路径"], query = result["路径"].split("?", 1)
result["参数"] = query
return result
# 使用示例
print("🌐 URL解析器")
print("=" * 30)
urls = [
"https://www.example.com/path/to/page",
"http://google.com/search?q=python",
"github.com/user/repo"
]
for url in urls:
print(f"\nURL: {url}")
parsed = parse_url(url)
for key, value in parsed.items():
print(f" {key}: {value}")
🔧 常见错误与调试
错误1:索引越界
# ❌ 错误示例
text = "Python"
print(text[10]) # IndexError
# ✅ 正确做法
text = "Python"
if len(text) > 10:
print(text[10])
else:
print("索引超出范围!")
错误2:字符串不可变
# ❌ 错误示例
text = "Hello"
text[0] = "h" # TypeError
# ✅ 正确做法
text = "Hello"
text = "h" + text[1:] # 创建新字符串
错误3:编码问题
# ❌ 可能出错
text = "你好" + "world"
# 混合中英文时注意编码
# ✅ 推荐做法
text = "你好" + "world" # Python 3默认UTF-8,通常没问题
print(text)
📅 下节课预告
第6课:聊天机器人V1.0——与计算机对话
下节课你将学习:
- 用input()实现用户交互
- 制作智能问答程序
- 实现简单对话逻辑
- 制作个性化聊天机器人
- 处理用户输入的各种情况
预习思考:
- 如何让程序记住对话内容?
- 如何根据用户输入做出不同回应?
- 如何制作一个能聊天的机器人?
🏆 本课成就墙
完成本课学习,你获得了:
🔤 【字符串大师】:掌握字符串基本操作
✂️ 【切片高手】:熟练使用索引和切片
🛠️ 【方法专家】:掌握常用字符串方法
🎨 【格式化达人】:掌握多种格式化技巧
💡 【工具能手】:能制作实用文本工具
知识掌握评估:
- 我能熟练使用字符串方法:□ 完全掌握 □ 基本掌握 □ 还需练习
- 我理解字符串索引和切片:□ 完全理解 □ 基本理解 □ 还需学习
- 我能制作文本处理工具:□ 熟练制作 □ 基本制作 □ 初步尝试
- 我能调试字符串相关错误:□ 熟练解决 □ 基本解决 □ 需要帮助
🌟 编程心法
文字是信息的载体
字符串是程序的语言
索引是位置的标记
切片是选择的方法
方法是操作的工具
格式化是美学的表达
从字符到篇章
从处理到创造
每一行文字都有意义
每一个操作都有价值
记住:在数字世界中,文字是沟通的桥梁。掌握字符串处理,就是掌握了与计算机"对话"的重要工具。
💬 给家长的话
亲爱的家长:
今天孩子学习了Python中的字符串处理,这是编程中非常实用和重要的部分。
孩子的收获:
- ✅ 理解字符串的基本概念
- ✅ 掌握字符串的索引和切片
- ✅ 学会多种字符串操作方法
- ✅ 能够制作实用的文本处理工具
- ✅ 掌握字符串格式化技巧
字符串处理的重要性:
| 应用场景 | 技能点 | 实际价值 |
|---------|-------|---------|
| 文本分析 | 统计、查找 | 信息处理能力 |
| 数据清洗 | 替换、分割 | 数据分析基础 |
| 密码安全 | 验证、加密 | 安全意识培养 |
| 网页处理 | URL解析 | 网络知识基础 |
| 游戏开发 | 字符串操作 | 逻辑思维能力 |
您可以这样做:
生活应用:
- 文本分析:让孩子统计一篇作文的字数、标点
- 密码管理:一起检查家庭密码的强度
- 数据处理:整理通讯录、课程表等文本信息
- 游戏开发:制作猜单词、文字加密等小游戏
思维训练:
- 问题分解:如何将复杂的文本处理分解为小步骤
- 算法思维:思考最高效的字符串处理方法
- 错误调试:从错误中学习字符串操作的细节
- 创意实现:用字符串操作实现有趣的功能
温馨提示:
- Python 3对中文支持很好,不用担心编码问题
- 字符串操作需要细心,注意大小写、空格等细节
- 鼓励孩子用Python处理实际文本问题
- 分享孩子的文本工具给家人使用
第5课结束。你现在已经能用Python处理各种文本信息了!
实践任务:
1. 制作一个个人日记处理工具
2. 分析一篇文章的字数、词频
3. 制作一个密码生成和检测工具
4. 实现简单的文本加密功能
下节课,让我们用学到的知识制作一个聊天机器人!
第6课见!🚀
课程内容为本人与AI共创,如有问题可留言交流。