Python 学习笔记(第四期)——字符串:格式化、操作与文本处理——核心知识点自测与详解

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.1
  • format() 方法 ------ 第四期 §2.2
  • f-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.1
  • replace() 方法 ------ 第四期 §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.1
  • join() 方法 ------ 第四期 §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. 删除文本中多余的空格(多个连续空格合并为1个)
  2. 将预定义的敏感词替换为 ***(敏感词列表:["暴力", "色情", "赌博"])
  3. 将英文句号 . 替换为中文句号 。

测试用例:"Python 是 一种 简单 易学 的 语言 。 它 的 语法 很 简洁 。"

考查知识点
  • split() + join() 合并空格 ------ 第四期 §4
  • replace() 方法 ------ 第四期 §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

相关推荐
朝朝辞暮i10 小时前
C++ 第 23 课:class —— 开始真正进入面向对象
开发语言·c++·算法
言乐611 小时前
HTML视频审核模型
python·django·virtualenv·pygame·tornado
小师兄吃牛肉11 小时前
C语言篇:宏
c语言·开发语言
郑同学的笔记11 小时前
【c++随笔28】strcmp 和 memcmp对比
开发语言·c++
言乐612 小时前
Python根据无法识别搜索词找出可能输入内容模型
开发语言·python·django·virtualenv·pygame
weixin_3077791312 小时前
有限产能智能排产与动态重排智能体:从需求解构到技术实现
开发语言·人工智能·算法·架构
kakakahahahaha12 小时前
Windows C盘临时文件清理:%temp%、Windows Temp、Prefetch、Windows.old与hiberfil.sys处理指南
c语言·开发语言·windows
朝朝辞暮i12 小时前
C++ 第 27 课:智能指针 shared_ptr
开发语言·c++·算法
by2099912 小时前
学会使用std::string类,并理解其内部是如何管理字符串的详细阐述(上)
c++·笔记·字符串·类和对象·string
yl453013 小时前
硫酸泄露处理生产商怎么选才够专业
大数据·人工智能·python