第十三课:字符串深挖——玩转文字
入门 python教学 · 2026-10-21 · 阅读 2

其实你早就离不开字符串了:input() 读进来的、f-string 拼出来的、文件里一行一行读回的,全是字符串。上一课我们用 split 把一行成绩拆开——那只是字符串本事的冰山一角。这一课把字符串"玩透":怎么精确地取出一部分、怎么拆、怎么拼、怎么找、怎么换。
一、字符串是一串排好队的字符
把字符串想成一排座位,每个字符坐一个位置,位置编号叫索引。规矩是:从 0 开始数;从后往前数,用负数,-1 是最后一个。
s = "Python" print(s[0]) # P 第一个 print(s[5]) # n 最后一个 print(s[-1]) # n 倒着数第一个,还是它 print(len(s)) # 6 len() 数一共有几个字符
易错点先说清:6 个字符,索引只到 5。写 s[6] 不是"取不到",是直接报错——座位只排到 5 号,没有 6 号。
二、切片:一刀切走一段
想一次取出好几个字符,用切片,写法是 s[起:止]。最重要的规矩:含头不含尾——取到"止"的前一个为止。
s = "Python" print(s[0:3]) # Pyt 取 0、1、2 号,不含 3 号 print(s[3:]) # hon 省略"止",一直取到末尾 print(s[:3]) # Pyt 省略"起",从头取 print(s[-2:]) # on 最后两个
再加第三个参数步长,s[起:止:步长],每隔几个取一个:
print(s[::2]) # Pto 隔一个取一个 print(s[::-1]) # nohtyP 步长 -1:整个倒过来!
记住这个 s[::-1],把字符串倒序只要一招,后面的回文判断就靠它。
三、常用方法:字符串的工具箱
方法是"字符串自带的工具",用点号调用:字符串.方法(...)。挑最常用的几个:
| 方法 | 干什么 | 例子 |
|---|---|---|
| split(分隔符) | 按分隔符拆成列表 | "a,b,c".split(",") → ['a', 'b', 'c'] |
| join(列表) | 把列表拼成字符串(split 的反操作) | "-".join(['a','b']) → "a-b" |
| strip() | 削掉两头的空格和换行 | " 好 ".strip() → "好" |
| replace(旧, 新) | 把出现的旧串全换成新串 | "我爱猫".replace("猫", "狗") → "我爱狗" |
| find(子串) | 找子串第一次出现的位置,找不到返回 -1 | "banana".find("na") → 2 |
| count(子串) | 数子串出现了几次 | "banana".count("a") → 3 |
| startswith / endswith | 判断开头/结尾,返回 True/False | "test.jpg".endswith(".jpg") → True |
| upper / lower | 英文大小写转换 | "AbC".lower() → "abc" |
还有个不用方法的快捷判断——in,问"在不在里面":
print("Py" in "Python") # True
print("猫" in "我爱编程") # False
四、字符串是"只读"的
有个坑迟早要踩,先给你打预防针:字符串不能改。想把 "hello" 的 h 改成大写,这样写会报错:
s = "hello"正确做法是拼一个新串——切片正好派上用场:
s = "H" + s[1:] # 取新首字母 + 原来的后半截 print(s) # Helloreplace、upper 这些方法看起来像在"改"字符串,其实都是生成了一个新串,原来的没动。记住:字符串只读,要改就重拼。
五、三个小实战
实战 1:拆学号。假设学号 "20250312" 的含义是:前 4 位入学年份、接着 2 位班级、最后 2 位座号。用切片一刀一个:
sid = "20250312" print("入学年份:", sid[:4]) # 2025 print("班级:", sid[4:6]) # 03 print("座号:", sid[6:]) # 12实战 2:数词频。统计一句话里每个词出现几次——split 拆词,配上第九课的字典,一气呵成:
text = "apple banana apple orange banana apple" count = {} for w in text.split(): count[w] = count.get(w, 0) + 1 print(count) # {'apple': 3, 'banana': 2, 'orange': 1}其中 count.get(w, 0) 的意思是"有这个词就取它的次数,没有就当 0"——字典的安全取法,值得记住。
实战 3:回文判断。正着读反着读一样的句子叫回文,比如"上海自来水来自海上"。判断方法简单粗暴:和倒过来的自己比一比。
def is_palindrome(s): return s == s[::-1] print(is_palindrome("上海自来水来自海上")) # True print(is_palindrome("我爱编程")) # False本课小结
· 索引从 0 开始,-1 是最后一个;len() 数长度,索引最大只到 len-1。
· 切片 s[起:止:步长],含头不含尾;s[::-1] 一招倒序。
· 工具箱:split 拆、join 拼、strip 削两头、replace 换、find 找(找不到是 -1)、count 数、in 判断在不在。
· 字符串只读:要"改",就用切片拼一个新串。练一练
1. 文件名侦探:给一个文件名如 "报告.docx",取出它的扩展名 "docx"(提示:split 按 "." 拆開,取最后一块;或者想想切片怎么定位那个点)。
2. 敏感词过滤:留言墙同款功能——输入一句话,把里面的某个敏感词(自己定一个)用 replace 换成 "***",打印过滤后的句子。
3. 挑战题:升级实战 2 的词频统计:统计完之后,把出现次数最多的词打印出来(提示:max 配合字典,或者先排序)。下一课,我们让数据"画出来":用 matplotlib 把成绩变成图表。
学·教在线
小ta