20 分钟
Python 入门

字符串基础

掌握字符串的创建、索引、切片和常用方法

  • 理解字符串是字符序列
  • 掌握正索引和负索引
  • 掌握切片语法
  • 学会常用字符串方法
  • 了解 f-string 格式化

创建字符串

字符串就是一段文字,用引号包裹。单引号、双引号都可以,效果完全一样:

示例代码(可运行)

字符串本身带引号的话,要么用不同的引号包,要么用反斜杠 \ 转义:

示例代码(可运行)

字符串是不可变的

字符串一旦创建,就不能修改它的内容。你看到的「修改」其实是创建了新字符串:

示例代码(可运行)
🐍资深工程师经验谈

字符串不可变性有个性能上的实际影响:循环里用 += 拼接字符串会很慢,每次都会创建新字符串。Python 开发者拼大量字符串时,都用 ''.join(list),效率高。另外 Python 有个优化机制叫「字符串驻留」(interning),短字符串会被缓存复用,所以写 a = "hello"; b = "hello" 时,a 和 b 可能指向同一个对象。注意别依赖这个行为。比内容用 ==,比身份用 is。

字符串索引

字符串里每个字符都有编号,从 0 开始数。用负数的话就从末尾倒着数,-1 对应最后一个字符:

示例代码(可运行)
🚫索引越界

索引超出范围时,Python 会报 IndexError。比如 s = "Py",取 s[5] 就会报错,因为这个字符串只有索引 0 和 1。长度为 n 的字符串,正索引范围是 0 到 n-1。

预测输出
s = "Hello"
print(s[1])
print(s[-1])

切片:截取一段

切片是 Python 最实用的特性之一。语法是 [起始:结束:步长],记清楚左闭右开:包含起始位置的元素,不包含结束位置的元素。

示例代码(可运行)

切片非常安全:即使索引超出范围也不会报错,Python 会自动截取到边界:

示例代码(可运行)
预测输出
s = "abcdef"
print(s[1:4])
print(s[::-1])

字符串拼接与重复

示例代码(可运行)

常用方法

字符串自带很多实用方法。注意:这些方法都返回新字符串,不修改原字符串。

示例代码(可运行)

f-string 格式化(重点!)

f-string 是 Python 最常用的字符串格式化方式,在字符串前加 f,用花括号嵌入变量:

示例代码(可运行)
💡为什么用 f-string

f-string 比用 + 做字符串拼接更简洁、可读性更好,是 Python 3.6+ 推荐的写法。

找 Bug索引越界:字符串只有6个字符(索引0-5),访问 s[10] 会报 IndexError。
s = "Python" print(s[10])
填空题填写空白处的代码
s = "Python" print(s[]) # 输出 P print(s[]) # 输出 n
选择题

"Hello"[1:4] 的结果是?

选择题

"hello"[1] 的值是?

选择题

"Python"[-1] 的值是?

选择题

"Python"[::2] 的值是?

资深工程师加餐

底层原理 · 大厂视角 · 工程经验,点卡片展开

print 把对象交给 sys.stdout 写出,显示时默认调用对象的 __str__;在交互环境直接回显变量走的是 __repr__(更偏「给开发者看的表示」)。sep 改分隔符、end 改结尾、file 可重定向到文件。面试常追问:生产环境为什么用 logging 而不是 print?因为日志有级别、能落盘、可结构化、可统一关闭,print 只适合临时调试。

挑战任务

字符串操作

简单+50 XP

从 "Hello, World!" 中提取 "World" 并转为大写输出。

字符串操作
2 个测试用例

课后作业

名字反转

中等+20 XP

输入名字,用切片 [::-1] 输出反转后的名字。

名字反转
1 个测试用例