Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

PyFirst

07. 字符串魔法

你已经在用 print() 和字符串了。但字符串其实是一个魔法工具箱——它可以被切割、拼接、变形、查找……学会这些魔法,处理文字就像变魔术一样轻松!

🎒 打个比方:字符串就像你书包里的笔袋。笔袋里每支笔都有自己的位置(索引),你可以取出特定的笔(切片),可以把笔袋里的笔全部倒出来重新排列(方法),还可以在橡皮上贴标签(拼接)。字符串也是这样——你随时可以"打开它",取出、修改、重组里面的任何字符。


7.1 f-string:让字符串"活"起来 ✨

还记得之前用 + 拼接字符串吗?又长又容易出错。f-string 让你在字符串里直接嵌入变量:

Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

f-string 的花式用法

Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

💡 f-string 的格式{变量:格式} — 冒号后面可以控制小数位数、对齐方式、填充字符等。

🧠 一步一步读代码

计算机读这段 f-string 代码时,脑子里的思考过程是这样的:

f"{price * count} 元"
  ↓ 计算机先看 { } 里面有什么
  ↓ price 是 19.9,count 是 3
  ↓ 19.9 * 3 = 59.7
  ↓ 把 59.7 转成文字 "59.7"
  ↓ 拼接到 " 元" 前面
  ↓ 最终得到:"59.7 元"

🎮 为什么这很重要? 你在 Minecraft 或 Roblox 里看到的排行榜——“玩家 XXX 得分 XXX”——就是用类似的字符串拼接做出来的!当你想做自己的游戏时,f-string 就是你显示分数、血量、等级的秘密武器。

✋ 试试看:用 f-string 做更多好玩的事

Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

💡 小技巧:.2f 中的 2 可以改成任何数字。试试 :.0f(不保留小数)、:.4f(保留四位),看看有什么变化!


7.2 字符串切片——精准提取

你可以像切蛋糕一样切字符串——只取你想要的那部分:

Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...
Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

🍕 切片是什么感觉?

想象你有一块披萨 "Hello Python",你想只吃 “Hello” 这块:

从开头切到第 5 块(不含第 5 块)→ text[0:5] = "Hello"

  H  e  l  l  o     P  y  t  h  o  n
  🍕 🍕 🍕 🍕 🍕 ┃ 🍕 🍕 🍕 🍕 🍕 🍕
  0  1  2  3  4  ┃ 6  7  8  9  10 11
       只取这部分 ↗

📱 什么时候用到切片? 你在手机上输入 @ 好友名字时,程序需要从消息中"切出" @ 后面的用户名。你玩的 Minecraft 皮肤文件名可能是 "steve.png",游戏需要切片判断是 .png 还是 .jpg。切片无处不在!

✋ 动手试试

Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

🗺️ 一张图看懂索引

来,把字符串想象成一条有编号的格子带。"Python" 这个单词,每个字符都有两个地址——从左数的正数和从右数的负数:

字符:      P     y     t     h     o     n
正索引:    0     1     2     3     4     5
负索引:   -6    -5    -4    -3    -2    -1
         ↑                                  ↑
     text[0]                            text[-1]
     text[-6]                           text[5]

记住三个关键点:

🏓 为什么 [0:3] 不含 3? 想象你在操场上排队:老师说"第 0 号到第 3 号出列"——如果 0、1、2 三个人出列了,你会不会问第 3 号该不该出?Python 定了个规矩:冒号后面的数字不算在内。这样 text[0:3] 的长度永远是 3 - 0 = 3 个字符,方便计算!


7.3 字符串常用方法——瑞士军刀 🔧

Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...
Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

🧠 一步一步读代码:split 和 join

s.split(",") 到底在做什么?跟着计算机思考一遍:

s = "apple,banana,orange,grape"
        ↓ 计算机扫描字符串,找逗号
        ↓ 第1段:从开头到第1个逗号 → "apple"
        ↓ 第2段:从第1个逗号后到第2个逗号 → "banana"
        ↓ 第3段:从第2个逗号后到第3个逗号 → "orange"
        ↓ 第4段:从第3个逗号后到结尾 → "grape"
        ↓ 放进一个列表 → ["apple", "banana", "orange", "grape"]

" --> ".join(fruits) 是 split 的"逆操作":

["apple", "banana", "orange", "grape"]
   ↓ 取第1个 "apple"
   ↓ 加箭头 " --> "
   ↓ 取第2个 "banana"
   ↓ 加箭头 " --> "
   ↓ ……以此类推……
   ↓ 最终: "apple --> banana --> orange --> grape"

📋 类比split 就像把一串手链剪开,得到一颗颗珠子;join 就像用新绳子把珠子串回去。绳子(分隔符)可以随便换——可以用逗号、箭头、甚至 emoji!

💡 常见误区:方法不改变原字符串!

很多初学者会写出这样的代码,然后困惑为什么"没生效":

Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

为什么? 字符串方法是**"不粘锅"型的**——它们不会修改原字符串,而是返回一个新的字符串。如果你不把它存起来,就白白扔掉了!

正确的做法:

Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

🧠 记忆口诀:字符串方法是"印钞机"不是"橡皮擦"——它印一张新钞票给你,不是把旧钞票上的污点擦掉。所有的字符串方法(strip()upper()replace()…)都是这个规则!

🎯 小练习:把句子拆开再拼回去

Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

7.4 实用案例:制作花式表格 📊

来,我们一起做一个成绩单。做之前,先想清楚三件事:

🧠 思考过程:
1. 表格有几列? → 姓名、科目、成绩(3列)
2. 每列多宽? → 中文一个字占两个英文字母的位置,用全角空格填充
3. 对齐方向? → 文字类型左对齐,数字类型右对齐

然后一条一条写代码:

Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

🏆 想一想:你在学校运动会上看到的大屏幕排行榜——“班级 4x100米 名次”——背后的原理就是这个!用对齐和格式化让数据整齐排列,不管是成绩单、游戏排行榜、还是超市收银小票,都是同一种技术。


7.5 趣味挑战:密码生成器 🔐

用学到的字符串魔法,做一个随机密码生成器。做之前先动脑:

🧠 思考过程:
1. 好密码需要哪些元素? → 小写字母 + 大写字母 + 数字 + 符号
2. 从哪获得这些字符? → string 模块?但我们手写!用 lower.upper() 生成大写
3. 怎么随机抽取? → random.choices() 可以随机挑字符
4. 怎么拼成一根字符串? → "".join() 把字符列表粘起来

想清楚了吗?来写代码:

Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

7.6 字符串方法速查表

方法作用示例
s.upper()全部大写"hi".upper()"HI"
s.lower()全部小写"HI".lower()"hi"
s.strip()去首尾空格" a ".strip()"a"
s.split(x)按x分割"a,b".split(",")["a","b"]
x.join(list)用x连接列表"-".join(["a","b"])"a-b"
s.replace(a,b)替换"ab".replace("a","c")"cb"
s.find(x)查找位置"abc".find("b")1
s.startswith(x)是否x开头"hi".startswith("h")True
s.count(x)出现次数"aba".count("a")2
f"{x:.2f}"格式化小数f"{3.1415:.2f}""3.14"

🧪 终极挑战:密语生成器

把本章学的五样本领组合起来,做一个密语生成器——把一句话变成只有你自己能看懂的"加密消息"!

Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

🎯 熟能生巧:处理文字是编程中最常见的任务之一。多练习这些方法,你会发现自己处理文本越来越得心应手!