Python 学习笔记(第四期)------字符串:格式化、操作与文本处理------核心知识点自测与详解
本自测解析针对 Python 学习笔记系列第四期(字符串:格式化、操作与文本处理)的核心内容。共 10 题,每题包含题目回顾、考查知识点、详细解答与分析,帮助读者巩固 Python 字符串处理的核心技能。
文章索引:Python 学习笔记(第四期)------字符串:格式化、操作与文本处理
更多自我检测系列欢迎浏览:每日知识点小问答
我的主页:AOwhisky,这里有更多运维系统性知识整理和其他有趣内容,欢迎与我一起探讨学习~
第四期:字符串(第 1-5 题)
题目一:字符串的定义与转义字符
题目 :Python 中定义字符串有哪三种方式?分别适用于什么场景?请写出转义字符 \n、\t、\\ 的作用,并说明原始字符串(raw string)的使用场景。
考查知识点
- 字符串的三种定义方式 ------ 第四期 §1.1
- 转义字符 ------ 第四期 §1.2
- 原始字符串 ------ 第四期 §1.3
详细解答
三种定义方式及适用场景:
| 定义方式 | 语法 | 适用场景 |
|---|---|---|
| 单引号 | '内容' |
定义单行字符串,内部可包含双引号 |
| 双引号 | "内容" |
定义单行字符串,内部可包含单引号 |
| 三引号 | '''内容''' 或 """内容""" |
定义多行字符串,保留换行格式 |
python
# 单引号与双引号互相嵌套
print('她说:"你好!"') # 外部单引号,内部双引号
print("let's go") # 外部双引号,内部单引号
# 三引号保留换行格式
poem = """
床前明月光,
疑是地上霜。
"""
print(poem)
转义字符表:
| 转义字符 | 含义 | 示例 |
|---|---|---|
\n |
换行 | "第一行\n第二行" |
\t |
横向制表符(Tab) | "姓名\t年龄" |
\\ |
反斜杠本身 | "C:\\Users\\" |
\' |
单引号 | 'It\'s ok' |
\" |
双引号 | "She said \"Hi\"" |
原始字符串(raw string):
在字符串引号前加 r 或 R,反斜杠不再具有转义功能,全部按原样输出。常用于文件路径和正则表达式。
python
# 普通字符串:反斜杠需要转义
path = "C:\\Users\\Admin\\Documents"
# 原始字符串:反斜杠原样输出
raw_path = r"C:\Users\Admin\Documents"
print(raw_path) # C:\Users\Admin\Documents
# 正则表达式中的妙用
import re
pattern = r"\d{3}-\d{4}-\d{4}" # 不用写 \\d
题目二:三种字符串格式化方式的对比
题目:Python 有哪三种字符串格式化方式?请分别写出使用示例,并从语法简洁度、性能、表达式支持三个维度对比它们的优劣。在实际开发中应该优先选择哪种?
考查知识点
%格式化 ------ 第四期 §2.1format()方法 ------ 第四期 §2.2f-string格式化 ------ 第四期 §2.3
详细解答
三种格式化方式对比:
| 对比维度 | % 格式化 |
format() |
f-string |
|---|---|---|---|
| 引入版本 | Python 1.x | Python 3.0 | Python 3.6 |
| 语法简洁度 | 一般(需记忆格式符) | 较好 | ⭐ 最简洁 |
| 表达式支持 | ❌ 不支持 | ✅ 支持 | ⭐ 完全支持 |
| 性能 | 较慢 | 中等 | ⭐ 最快 |
| 可读性 | 一般 | 较好 | ⭐ 最好 |
使用示例:
python
name = "Tom"
age = 20
pi = 3.14159
# 1. % 格式化(传统方式)
print("姓名:%s,年龄:%d岁" % (name, age))
print("圆周率:%.2f" % pi)
# 2. format() 方法(通用方式)
print("姓名:{},年龄:{}岁".format(name, age))
print("姓名:{n},年龄:{a}".format(n=name, a=age))
print("圆周率:{:.2f}".format(pi))
# 3. f-string(现代方式,Python 3.6+)
print(f"姓名:{name},年龄:{age}岁")
print(f"明年{age + 1}岁")
print(f"圆周率:{pi:.2f}")
实际开发建议:
| 场景 | 推荐方式 | 原因 |
|---|---|---|
| 日常开发 | f-string |
语法最简洁、性能最好、可读性最强 |
| 动态构建格式化模板 | format() |
模板内容来自配置文件或数据库时更灵活 |
| 维护 Python 3.5 及更早版本 | % 格式化 |
兼容旧版本 |
题目三:字符串的查找与替换
题目 :请写出以下代码的输出,并说明 find() 和 replace() 方法的作用及返回值。
python
text = "Python is a powerful programming language"
# 查找
pos1 = text.find("powerful")
pos2 = text.find("Java")
pos3 = text.find("a", 15)
pos4 = text.find("a", 10, 20)
print(pos1, pos2, pos3, pos4)
# 替换
text2 = "hello world hello python"
new_text = text2.replace("hello", "hi")
new_text_limit = text2.replace("hello", "hi", 1)
print(new_text)
print(new_text_limit)
考查知识点
find()方法 ------ 第四期 §3.1replace()方法 ------ 第四期 §3.2
详细解答
代码输出:
text
12 -1 32 -1
hi world hi python
hi world hello python
find() 方法详解:
| 特性 | 说明 |
|---|---|
| 作用 | 在字符串中查找指定子串,返回首次出现的索引位置 |
| 未找到时 | 返回 -1(与 index() 不同,后者抛出异常) |
| 参数 | find(sub[, start[, end]]),可指定查找范围 |
python
# 逐个解析
pos1 = text.find("powerful") # "powerful" 从索引12开始 → 12
pos2 = text.find("Java") # 不存在 → -1
pos3 = text.find("a", 15) # 从索引15开始找 "a" → 32
pos4 = text.find("a", 10, 20) # 在索引10~20区间找 → -1
replace() 方法详解:
| 特性 | 说明 |
|---|---|
| 作用 | 将字符串中的指定子串替换为新的子串 |
| 返回值 | 返回新字符串(原字符串不变,因为字符串不可变) |
| 参数 | replace(old, new[, count]),count 限制替换次数 |
python
text2 = "hello world hello python"
# 全部替换
new_text = text2.replace("hello", "hi")
# → "hi world hi python"
# 只替换前1次
new_text_limit = text2.replace("hello", "hi", 1)
# → "hi world hello python"
题目四:字符串的分割与拼接
题目 :请写出以下代码的输出,并说明 split() 和 join() 方法的作用。为什么在循环中拼接大量字符串时推荐使用 join() 而不是 +?
python
# split 示例
text = "苹果,香蕉,橙子,葡萄,西瓜"
print(text.split(","))
print(text.split(",", 2))
words = "Python Java C++ JavaScript"
print(words.split())
# join 示例
fruits = ["苹果", "香蕉", "橙子"]
print("-".join(fruits))
print("".join(["P", "y", "t", "h", "o", "n"]))
# + 与 * 操作
print("Hello" + " " + "World")
print("=" * 30)
考查知识点
split()方法 ------ 第四期 §4.1join()方法 ------ 第四期 §4.2- 字符串拼接性能 ------ 第四期 §4.3
详细解答
代码输出:
text
['苹果', '香蕉', '橙子', '葡萄', '西瓜']
['苹果', '香蕉', '橙子,葡萄,西瓜']
['Python', 'Java', 'C++', 'JavaScript']
苹果-香蕉-橙子
Python
Hello World
==============================
split() 方法详解:
| 特性 | 说明 |
|---|---|
| 作用 | 按指定分隔符将字符串分割为多个子串,返回列表 |
| 不传参数时 | 按所有空白字符分割,多个连续空白视为一个分隔符 |
| 限制分割次数 | split(sep, maxsplit),第二个参数控制分割次数 |
python
# 限制分割次数:只分割前2次,剩余部分作为一个整体
text.split(",", 2) # → ['苹果', '香蕉', '橙子,葡萄,西瓜']
join() 方法详解:
| 特性 | 说明 |
|---|---|
| 作用 | 使用指定分隔符,将可迭代对象(如列表)拼接成一个字符串 |
| 语法 | 分隔符.join(可迭代对象) |
| 性能 | 在循环中拼接大量字符串时,join() 比 + 高效得多 |
为什么 join() 比 + 更快:
python
# ❌ 低效方式:每次 + 都会创建新的字符串对象
result = ""
for word in words:
result += word # 产生大量临时对象
# ✅ 高效方式:一次性完成拼接
result = "".join(words) # 只创建一次新字符串
+ 与 \* 操作字符串:
| 运算符 | 作用 | 示例 |
|---|---|---|
+ |
拼接字符串 | "Hello" + "World" → "HelloWorld" |
* |
重复字符串 | "=" * 30 → "==============================" |
题目五:删除字符串的指定字符
题目 :请写出以下代码的输出,并说明 strip()、lstrip()、rstrip() 三个方法的区别与使用场景。
python
text = " Python编程 "
text_star = "*****Python*****"
print(f"'{text.strip()}'")
print(f"'{text.lstrip()}'")
print(f"'{text.rstrip()}'")
print(text_star.strip("*"))
print(text_star.lstrip("*"))
print(text_star.rstrip("*"))
考查知识点
- 删除字符串指定字符 ------ 第四期 §5
strip()、lstrip()、rstrip()方法
详细解答
代码输出:
text
'Python编程'
'Python编程 '
' Python编程'
Python
Python*****
*****Python
三个方法的对比:
| 方法 | 作用 | 默认删除 | 适用场景 |
|---|---|---|---|
strip() |
删除字符串两端的指定字符 | 空格 | 清理用户输入的前后空格 |
lstrip() |
删除字符串左端(开头)的指定字符 | 空格 | 删除行首缩进或特定前缀 |
rstrip() |
删除字符串右端(末尾)的指定字符 | 空格 | 删除行尾换行符或特定后缀 |
python
# 指定删除特定字符
text_star = "*****Python*****"
print(text_star.strip("*")) # Python
print(text_star.lstrip("*")) # Python*****
print(text_star.rstrip("*")) # *****Python
实战场景:
python
# 1. 清理文件读取时的换行符
with open("data.txt") as f:
for line in f:
line = line.strip() # 删除末尾的 \n 和前后的空格
# 2. 清理用户输入
username = input("请输入用户名:").strip() # 忽略用户误输入的空格
第四期:字符串(第 6-10 题)
题目六:字符串大小写转换
题目 :请写出以下代码的输出,并说明 upper()、lower()、capitalize()、title() 四个方法的区别。
python
text = "Life is short. I use Python"
print(text.upper())
print(text.lower())
print(text.capitalize())
print(text.title())
print(text.swapcase())
考查知识点
- 字符串大小写转换 ------ 第四期 §6
详细解答
代码输出:
text
LIFE IS SHORT. I USE PYTHON
life is short. i use python
Life is short. i use python
Life Is Short. I Use Python
lIFE IS SHORT. i USE pYTHON
四种方法对比:
| 方法 | 作用 | 示例(输入 "hello WORLD") |
|---|---|---|
upper() |
全部转为大写 | "HELLO WORLD" |
lower() |
全部转为小写 | "hello world" |
capitalize() |
首字母大写,其余小写 | "Hello world" |
title() |
每个单词首字母大写 | "Hello World" |
swapcase() |
大小写互换 | "HELLO world" |
实战场景:
python
# 1. 用户登录时忽略大小写(用户名不区分大小写)
input_username = "Admin"
if input_username.lower() == "admin": # 统一转为小写比较
print("登录成功")
# 2. 格式化标题
title = "python programming guide"
print(title.title()) # Python Programming Guide
题目七:字符串对齐方法
题目 :请写出以下代码的输出,并说明 center()、ljust()、rjust() 三个方法的作用。请用这三个方法实现一个简单的商品价格表。
python
text = "Python"
print(f"'{text.center(15, '-')}'")
print(f"'{text.ljust(15, '*')}'")
print(f"'{text.rjust(15, '*')}'")
考查知识点
- 字符串对齐 ------ 第四期 §7
详细解答
代码输出:
text
'----Python----'
'Python*********'
'*********Python'
三种对齐方法对比:
| 方法 | 作用 | 示例(text.center(15, '-')) |
|---|---|---|
center(width[, fillchar]) |
居中显示 | '----Python----' |
ljust(width[, fillchar]) |
左对齐显示 | 'Python*********' |
rjust(width[, fillchar]) |
右对齐显示 | '*********Python' |
参数说明:
width:输出字符串的总宽度(必填)fillchar:填充字符(可选,默认为空格)
实战:商品价格表
python
products = [
("iPhone 15", 5999),
("AirPods Pro", 1899),
("MacBook Air", 9499),
]
print("=" * 50)
print("商品名称".ljust(20) + "价格".rjust(30))
print("-" * 50)
for name, price in products:
print(name.ljust(20) + f"¥{price:,.0f}".rjust(30))
print("=" * 50)
运行结果:
text
==================================================
商品名称 价格
--------------------------------------------------
iPhone 15 ¥5,999
AirPods Pro ¥1,899
MacBook Air ¥9,499
==================================================
题目八:字符串内容判断方法
题目 :请写出以下代码的输出,并说明 isdigit()、isalpha()、isalnum()、startswith()、endswith() 方法的作用。在什么场景下需要使用这些方法?
python
text1 = "Python3"
text2 = "123"
text3 = "abc"
text4 = "hello.txt"
print(text1.isdigit())
print(text1.isalpha())
print(text1.isalnum())
print(text2.isdigit())
print(text3.isalpha())
print(text4.startswith("hello"))
print(text4.endswith(".txt"))
考查知识点
- 字符串内容判断方法 ------ 第四期 §9(补充知识)
详细解答
代码输出:
text
False
False
True
True
True
True
True
常用判断方法表:
| 方法 | 说明 | 示例 |
|---|---|---|
isdigit() |
是否只包含数字 | "123".isdigit() → True |
isalpha() |
是否只包含字母 | "abc".isalpha() → True |
isalnum() |
是否只包含字母或数字 | "abc123".isalnum() → True |
isspace() |
是否只包含空白字符 | " ".isspace() → True |
isupper() |
是否全为大写 | "HELLO".isupper() → True |
islower() |
是否全为小写 | "hello".islower() → True |
startswith(prefix) |
是否以指定前缀开头 | "Hello".startswith("He") → True |
endswith(suffix) |
是否以指定后缀结尾 | "Hello".endswith("lo") → True |
实战场景:
python
# 1. 输入校验(判断是否为纯数字)
age = input("请输入年龄:")
if age.isdigit():
age = int(age)
else:
print("请输入有效数字!")
# 2. 文件类型判断
filename = "report.pdf"
if filename.endswith(".pdf"):
print("PDF文件")
elif filename.endswith((".docx", ".doc")):
print("Word文档")
# 3. 路径或URL前缀判断
url = "https://example.com"
if url.startswith("https://"):
print("安全连接")
题目九:综合实战------文本进度条
题目 :请补全以下文本进度条的代码,使其实现动态更新进度的效果。要求:使用 \r 实现同一行刷新,进度条长度为 50 格,已完成部分用 █ 表示,未完成部分用 ░ 表示。
python
import time
def show_progress(total=100):
for i in range(total + 1):
percent = ________ # 补全:计算百分比
bar_length = 50
filled = ________ # 补全:计算已填充格数
bar = ________ # 补全:生成进度条字符串
print(f"\r进度:{percent:>6.1f}% |{bar}| {i}/{total}", end="", flush=True)
time.sleep(0.03)
print("\n✅ 完成!")
show_progress(100)
考查知识点
- 转义字符
\r(回车)------ 第四期 §1.2 - 字符串重复
*与拼接 ------ 第四期 §4.3 - f-string 格式化 ------ 第四期 §2.3
详细解答
补全后的代码:
python
import time
def show_progress(total=100):
for i in range(total + 1):
percent = i / total * 100 # 补全:计算百分比
bar_length = 50
filled = int(i / total * bar_length) # 补全:计算已填充格数
bar = "█" * filled + "░" * (bar_length - filled) # 补全:生成进度条字符串
print(f"\r进度:{percent:>6.1f}% |{bar}| {i}/{total}", end="", flush=True)
time.sleep(0.03)
print("\n✅ 完成!")
show_progress(100)
核心技术点解析:
| 技术点 | 说明 |
|---|---|
\r |
回车符,让光标回到行首,实现同一行覆盖更新 |
end="" |
禁止 print() 自动换行 |
flush=True |
强制立即刷新输出缓冲区 |
"█" * filled |
字符串重复生成进度条已完成部分 |
"░" * (bar_length - filled) |
字符串重复生成未完成部分 |
percent:>6.1f |
右对齐、占6位、保留1位小数的浮点数格式 |
题目十:综合实战------敏感词替换与文字排版
题目 :请编写一个函数 clean_text(text),实现以下功能:
- 删除文本中多余的空格(多个连续空格合并为1个)
- 将预定义的敏感词替换为
***(敏感词列表:["暴力", "色情", "赌博"]) - 将英文句号
.替换为中文句号。
测试用例:"Python 是 一种 简单 易学 的 语言 。 它 的 语法 很 简洁 。"
考查知识点
split()+join()合并空格 ------ 第四期 §4replace()方法 ------ 第四期 §3.2- 综合字符串操作
详细解答
python
def clean_text(text):
"""
清理文本:
1. 合并多余空格
2. 替换敏感词为 ***
3. 英文句号替换为中文句号
"""
# 1. 合并多个连续空格为一个
text = " ".join(text.split())
# 2. 替换敏感词
sensitive_words = ["暴力", "色情", "赌博"]
for word in sensitive_words:
text = text.replace(word, "***")
# 3. 英文句号替换为中文句号
text = text.replace(".", "。")
return text
# 测试
raw = "Python 是 一种 简单 易学 的 语言 。 它 的 语法 很 简洁 。"
cleaned = clean_text(raw)
print("原始文本:", raw)
print("清理后: ", cleaned)
运行结果:
text
原始文本: Python 是 一种 简单 易学 的 语言 。 它 的 语法 很 简洁 。
清理后: Python 是 一种 简单 易学 的 语言 。 它 的 语法 很 简洁 。
核心技术点解析:
| 步骤 | 代码 | 原理 |
|---|---|---|
| 合并空格 | " ".join(text.split()) |
split() 不传参数时按所有空白分割,多个连续空白只产生一个分割点 |
| 替换敏感词 | text.replace(word, "***") |
遍历敏感词列表,逐一替换 |
| 标点替换 | text.replace(".", "。") |
英文句号转中文句号 |
附:知识点对应总表
| 题号 | 主要考查知识点(对应笔记章节) |
|---|---|
| 1 | 第四期 §1.1 字符串三种定义方式;§1.2 转义字符;§1.3 原始字符串 |
| 2 | 第四期 §2.1 % 格式化;§2.2 format() 方法;§2.3 f-string 格式化 |
| 3 | 第四期 §3.1 find() 方法;§3.2 replace() 方法 |
| 4 | 第四期 §4.1 split() 方法;§4.2 join() 方法;§4.3 字符串拼接 |
| 5 | 第四期 §5 strip()、lstrip()、rstrip() 方法 |
| 6 | 第四期 §6 upper()、lower()、capitalize()、title() 方法 |
| 7 | 第四期 §7 center()、ljust()、rjust() 对齐方法 |
| 8 | 第四期 §9 isdigit()、isalpha()、startswith()、endswith() 判断方法 |
| 9 | 第四期 §1.2 \r 转义字符;§4.3 字符串重复;§2.3 f-string 格式化 |
| 10 | 第四期 §3.2 replace() 方法;§4.1、§4.2 分割与拼接综合应用 |
学习建议:对于答错的题目,请回看第四期对应章节,并动手在 Python 交互式环境中执行相关命令。字符串处理是日常开发中最常用的技能之一,建议通过实际编写文本处理程序加深理解。
--- Compiled and Authored by Whisky --- July 14 th, 2026