第5课:计算机的语文课——字符串处理

🎯 本课目标

  • 掌握字符串的基本操作
  • 学会字符串切片和索引
  • 掌握常用的字符串方法
  • 能够制作文本处理工具
  • 理解字符串格式化的多种方法

🔤 趣味引入:字符串是什么?

小实验:请你说出下面哪些是字符串:

  1. "你好,世界!" ✅
  2. 123 ❌
  3. "3.14" ✅
  4. Python ❌
  5. "True" ✅
  6. True ❌

答案:只要用引号(单引号或双引号)包围的,就是字符串!

字符串就是计算机存储和处理的文本信息。就像人用语言交流一样,计算机用字符串处理文字信息。


📖 字符串基本操作

创建字符串

# 三种创建字符串的方法
str1 = "你好,Python!"    # 双引号
str2 = 'Hello World!'     # 单引号
str3 = """这是一个
多行
字符串"""                 # 三引号(可以跨行)

print(str1)
print(str2)
print(str3)

运行结果

alt text

转义字符

有些特殊字符需要用\转义:

| 转义字符 | 含义 | 示例 | 结果 |

|---------|------|------|------|

| \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\\小明")

alt text


🔍 字符串索引和切片

字符串索引

字符串中的每个字符都有一个位置编号,从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])   # 编

alt text

注意:中文一个字算一个字符,英文一个字母算一个字符

字符串切片

切片可以获取字符串的一部分:

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}")  # 天气

alt text


📊 字符串常用方法

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

alt text

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%}")  # 百分比

alt text

方法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}")

alt text

工具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()

alt text

游戏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——与计算机对话

下节课你将学习:

  1. 用input()实现用户交互
  2. 制作智能问答程序
  3. 实现简单对话逻辑
  4. 制作个性化聊天机器人
  5. 处理用户输入的各种情况

预习思考

  1. 如何让程序记住对话内容?
  2. 如何根据用户输入做出不同回应?
  3. 如何制作一个能聊天的机器人?

🏆 本课成就墙

完成本课学习,你获得了:

🔤 【字符串大师】:掌握字符串基本操作

✂️ 【切片高手】:熟练使用索引和切片

🛠️ 【方法专家】:掌握常用字符串方法

🎨 【格式化达人】:掌握多种格式化技巧

💡 【工具能手】:能制作实用文本工具

知识掌握评估

  • 我能熟练使用字符串方法:□ 完全掌握 □ 基本掌握 □ 还需练习
  • 我理解字符串索引和切片:□ 完全理解 □ 基本理解 □ 还需学习
  • 我能制作文本处理工具:□ 熟练制作 □ 基本制作 □ 初步尝试
  • 我能调试字符串相关错误:□ 熟练解决 □ 基本解决 □ 需要帮助

🌟 编程心法

文字是信息的载体
字符串是程序的语言
索引是位置的标记
切片是选择的方法
方法是操作的工具
格式化是美学的表达
从字符到篇章
从处理到创造
每一行文字都有意义
每一个操作都有价值

记住:在数字世界中,文字是沟通的桥梁。掌握字符串处理,就是掌握了与计算机"对话"的重要工具。


💬 给家长的话

亲爱的家长

今天孩子学习了Python中的字符串处理,这是编程中非常实用和重要的部分。

孩子的收获

  1. ✅ 理解字符串的基本概念
  2. ✅ 掌握字符串的索引和切片
  3. ✅ 学会多种字符串操作方法
  4. ✅ 能够制作实用的文本处理工具
  5. ✅ 掌握字符串格式化技巧

字符串处理的重要性

| 应用场景 | 技能点 | 实际价值 |

|---------|-------|---------|

| 文本分析 | 统计、查找 | 信息处理能力 |

| 数据清洗 | 替换、分割 | 数据分析基础 |

| 密码安全 | 验证、加密 | 安全意识培养 |

| 网页处理 | URL解析 | 网络知识基础 |

| 游戏开发 | 字符串操作 | 逻辑思维能力 |

您可以这样做

生活应用

  1. 文本分析:让孩子统计一篇作文的字数、标点
  2. 密码管理:一起检查家庭密码的强度
  3. 数据处理:整理通讯录、课程表等文本信息
  4. 游戏开发:制作猜单词、文字加密等小游戏

思维训练

  1. 问题分解:如何将复杂的文本处理分解为小步骤
  2. 算法思维:思考最高效的字符串处理方法
  3. 错误调试:从错误中学习字符串操作的细节
  4. 创意实现:用字符串操作实现有趣的功能

温馨提示

  • Python 3对中文支持很好,不用担心编码问题
  • 字符串操作需要细心,注意大小写、空格等细节
  • 鼓励孩子用Python处理实际文本问题
  • 分享孩子的文本工具给家人使用

第5课结束。你现在已经能用Python处理各种文本信息了!

实践任务:

1. 制作一个个人日记处理工具

2. 分析一篇文章的字数、词频

3. 制作一个密码生成和检测工具

4. 实现简单的文本加密功能

下节课,让我们用学到的知识制作一个聊天机器人!

第6课见!🚀


课程内容为本人与AI共创,如有问题可留言交流。