0%

已完成 0/14 关

教学模式

你可以随时调整。

此设置调整教师的教学方式,无需重新生成课程。

第 2 关 含代码 约 13 分钟

数字运算与文本字符串

Python 用作计算器:数字运算

启动 Python 解释器后,最直接的用法就是把它当成一台功能强大的计算器。在 >>> 提示符后键入表达式,解释器就会立即计算并给出结果。

常用算术运算符

  • +、-、*:分别执行加法、减法与乘法;
  • /:经典除法,请特别注意:除法在 Python 中总是返回带小数点的浮点数(float),例如 8 / 5 结果是 1.6,4 / 2 结果是 2.0;
  • //:向下取整除法(floor division),只保留商的整数部分,丢弃小数:17 // 3 结果是 5;
  • %:取余运算(modulus),计算相除后的余数:17 % 3 结果是 2(满足关系式:向下取整的商 ×\times 除数 ++ 余数 == 被除数);
  • **:乘方运算,计算指数幂:5 ** 2(5 的平方)得到 25,2 ** 7(2 的 7 次方)得到 128。

在 Python 中,像 2、4、20 这种没有小数部分的数字属于整数(int);而像 5.0、1.6 这种带有小数点的属于浮点数(float)。

变量与赋值操作

单纯做算术往往无法支撑复杂程序,我们需要给计算结果起一个名字保存起来,以便后续继续使用。用于存储和引用数据的名字叫做变量(variable)。

在 Python 中,使用等号 = 进行赋值(assignment):

>>> width = 20
>>> height = 5 * 9
>>> width * height
900
  • 等号 = 的含义是“将等号右侧表达式的计算结果,关联绑定到左侧的名字上”;
  • 赋值语句成功执行后,解释器不会在屏幕上打印任何输出;
  • 如果你试图访问一个未曾被赋值的变量,Python 会引发 NameError(名字错误),告诉你该名字尚未被定义:
>>> n
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'n' is not defined

在交互模式下,还有一个小技巧:上一次成功打印的表达式结果会自动存放在内置变量 _(单个下划线)中,可以方便地用作后续连续计算。

文本与字符串(str)

计算机不仅处理数字,还大量处理自然语言文本。在 Python 中,文本用**字符串(string,类型为 str)**表示。

界定符与转义字符

字符串可以用成对的单引号 '...' 或双引号 "..." 括起来,效果完全一致:

>>> 'spam eggs'
'spam eggs'
>>> "doesn't"  # 外层用双引号,内部就可以直接书写单引号
"doesn't"

如果外部用单引号包围,且内部也包含单引号,就需要使用反斜杠 \ 进行转义(escape):'doesn\'t'。

常见的特殊转义字符还包括:

  • \n:表示换行符(newline);
  • \t:表示制表符(tab)。

如果不希望前置 \ 的字符被解析为特殊转义字符,可以在字符串前加上字符 r,表示原始字符串(raw strings):

>>> print('C:\some\name')
C:\some
ame
>>> print(r'C:\some\name')  # 加上 r 后原样保留反斜杠
C:\some\name

多行字符串

字符串字面值还可以跨越多行,通常使用三重引号 """...""" 或 '''...''' 包裹。

字符串的拼接与重复

  • 使用 + 号可以将两个字符串**拼接(concatenation)**粘在一起;
  • 使用 * 号可以将字符串**重复(repetition)**指定次数:
>>> 3 * 'un' + 'ium'
'unununium'

两个相邻的字符串字面值(纯引号文本,不含变量)在书写时即使没有写加号,也会被 Python 自动合并连接。

下标索引(Indexing):定位单个字符

字符串属于序列(sequence)类型。序列中的每一个字符都有一个数字编号,称为索引(index)。我们可以用方括号 [...] 获取指定位置上的字符。

核心规则:Python 中的正向索引从 0 开始计数!

>>> word = 'Python'
>>> word[0]  # 第 1 个字符(0 号位)
'P'
>>> word[5]  # 第 6 个字符(5 号位)
'n'

此外,Python 原生支持负数索引,负数代表从字符串的最末尾倒着向前计数:

>>> word[-1]  # 倒数第 1 个字符(最末尾)
'n'
>>> word[-2]  # 倒数第 2 个字符
'o'

因为 -0 和 0 相同,所以负数索引从 -1 开始。

范围切片(Slicing):截取子字符串

如果说索引是取单个字符,那么**切片(slicing)**就是截取一段连续的子字符串。语法为:

word[start:stop]

切片的核心规则:包含起始位置(start),但不包含结束位置(stop),即数学上的左闭右开区间!

>>> word = 'Python'
>>> word[0:2]  # 取下标 0(含)到 2(不含)的字符
'Py'
>>> word[2:5]  # 取下标 2、3、4 的字符
'tho'

如果省略 start,默认从字符串开头截取;如果省略 stop,默认截取到字符串最末尾:

>>> word[:2]   # 开头到 2 号位(不含)
'Py'
>>> word[2:]   # 2 号位(含)到末尾
'thon'
>>> word[-2:]  # 倒数第 2 个(含)到末尾
'on'

这种设计使得 word[:i] + word[i:] 总是精确无缝地还原原字符串 word。

官方教程给出的坐标参考图清晰揭示了切片的几何意义——索引数字指向的是字符之间的分割缝隙:

 +---+---+---+---+---+---+
 | P | y | t | h | o | n |
 +---+---+---+---+---+---+
 0   1   2   3   4   5   6
-6  -5  -4  -3  -2  -1

字符串是不可变的(immutable)

在 Python 中,字符串是不可变的(immutable)。这意味着你无法对已有字符串的某个具体索引位置强行赋值修改:

>>> word = 'Python'
>>> word[0] = 'J'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

报错 TypeError 明确指出字符串不支持单项赋值。如果你需要得到一个修改后的文本,必须通过切片和拼接组合出一个全新的字符串:

>>> 'J' + word[1:]
'Jython'

内置函数 len() 可以随时返回字符串包含的字符总数:

>>> len(word)
6

掌握了数字与字符串的运算,我们已经具备了处理单个数据的能力。接下来,我们将迈入复合数据容器的大门——列表。

下一站:列表容器与初涉编程 →
© 2026 Python 官方教程