Files
PythonLearn/01_python基础/1_4_运算符/README.md
2026-07-22 16:42:56 +08:00

11 KiB
Raw Blame History

第 1-4 课:运算符

一、本课目标

完成本课后,你应该能够:

  1. 解释运算符和操作数是什么;
  2. 使用算术运算符完成基础计算;
  3. 区分普通除法、整除和取余;
  4. 使用比较运算符得到布尔值;
  5. 使用复合赋值运算符更新变量;
  6. 使用 andornot 组合或反转条件;
  7. 使用括号明确计算顺序;
  8. 编写一个包含输入、计算和判断结果的学习进度程序。

二、前置知识

开始本课前,你应该已经掌握:

  • 创建和使用变量;
  • 区分字符串、整数、浮点数和布尔值;
  • 使用 input() 接收输入;
  • 使用 int()float() 转换输入;
  • 使用 f-string 输出变量和计算结果。

三、运算符与操作数

运算符Operator是告诉 Python 执行某种运算的符号或关键字。

观察下面的代码:

total_hours = daily_hours * learning_days

其中:

  • * 是乘法运算符;
  • daily_hourslearning_days 是参与运算的数据称为操作数Operand
  • 计算结果赋值给 total_hours

运算不只是数学计算。比较两个数据、组合两个条件,也需要使用运算符。

四、算术运算符

算术运算符主要用于数字计算。

运算符 含义 示例 结果
+ 加法 10 + 3 13
- 减法 10 - 3 7
* 乘法 10 * 3 30
/ 普通除法 10 / 3 3.333...
// 整除 10 // 3 3
% 取余 10 % 3 1
** 幂运算 10 ** 3 1000

4.1 加、减、乘

completed_tasks = 5
new_tasks = 3

total_tasks = completed_tasks + new_tasks
remaining_tasks = total_tasks - completed_tasks
estimated_minutes = total_tasks * 20

这些运算与日常数学中的含义基本一致。

4.2 普通除法 /

average_hours = 10 / 4
print(average_hours)

输出:

2.5

Python 3 中,普通除法 / 的结果通常是浮点数。即使能够整除,结果也会带小数:

print(10 / 2)

输出:

5.0

4.3 整除 //

整除会得到向下取整后的商:

full_weeks = 17 // 7
print(full_weeks)

输出:

2

这表示 17 天中包含 2 个完整的 7 天周期。

对于正数,可以暂时理解为“只保留能完整分出的份数”。负数整除存在额外规则,将来遇到实际场景时再详细学习。

4.4 取余 %

取余得到除法中没有被完整分掉的余数:

remaining_days = 17 % 7
print(remaining_days)

输出:

3

因此 17 天可以表示为 2 个完整星期加 3 天。

取余还常用于判断一个整数是奇数还是偶数:

remainder = 8 % 2
print(remainder)

结果为 0,说明 8 可以被 2 整除。

4.5 幂运算 **

result = 2 ** 3
print(result)

输出为 8,表示 2 的 3 次方,即 2 × 2 × 2

注意Python 的幂运算不是 ^。符号 ^ 在 Python 中有其他含义,当前阶段不要用它表示乘方。

五、字符串也能使用部分算术运算符

5.1 字符串拼接

两个字符串可以使用 + 连接:

first_name = "Agent"
second_name = "开发者"
role_name = first_name + second_name

print(role_name)

输出:

Agent开发者

如果需要空格或其他符号,必须明确写入字符串:

role_name = first_name + " " + second_name

5.2 重复字符串

字符串乘以整数可以重复多次:

separator = "=" * 20
print(separator)

这会输出 20 个等号。

字符串不能与整数直接相加:

"学习天数:" + 3

如果确实要拼接,需要先使用 str(3) 转换;不过通常推荐使用更清晰的 f-string。

六、比较运算符

比较运算符用于比较两个数据,结果一定是布尔值 TrueFalse

运算符 含义 示例
== 等于 score == 100
!= 不等于 score != 0
> 大于 score > 60
< 小于 score < 60
>= 大于或等于 score >= 60
<= 小于或等于 score <= 100

示例:

completed_hours = 12
target_hours = 10

is_target_reached = completed_hours >= target_hours
print(is_target_reached)

输出:

True

6.1 === 的区别

这是初学者必须掌握的区别:

  • = 表示赋值,把右边的数据交给左边的变量;
  • == 表示比较,判断左右两边是否相等。
learning_days = 4
is_four_days = learning_days == 4

第一行创建或更新变量,第二行得到布尔值 True

6.2 不要把布尔结果写成字符串

is_finished = completed_tasks == total_tasks

这里的 is_finished 保存真正的布尔值。

下面写法只是保存普通文字:

is_finished = "True"

两者的数据类型和用途不同。

七、赋值运算符与复合赋值

普通赋值使用 =

completed_tasks = 3

如果完成了一个新任务,可以这样更新:

completed_tasks = completed_tasks + 1

Python 提供了更简洁的复合赋值写法:

completed_tasks += 1

两种写法在这个场景中作用相同。

常见复合赋值运算符:

运算符 示例 等价写法
+= value += 2 value = value + 2
-= value -= 2 value = value - 2
*= value *= 2 value = value * 2
/= value /= 2 value = value / 2
//= value //= 2 value = value // 2
%= value %= 2 value = value % 2

复合赋值会更新变量本身,因此执行前变量必须已经存在。

八、逻辑运算符

逻辑运算符用于组合或反转布尔条件。

Python 中最常用的三个逻辑运算符是:

  • and:并且;
  • or:或者;
  • not:取反。

8.1 and

and 两边的条件都为 True 时,整体才为 True

has_completed_course = True
has_finished_practice = True

can_start_next_course = has_completed_course and has_finished_practice
print(can_start_next_course)

输出为 True

如果其中任何一个条件为 False,整体就是 False

8.2 or

or 两边至少有一个条件为 True 时,整体就是 True

uses_pycharm = True
uses_vscode = False

has_code_editor = uses_pycharm or uses_vscode
print(has_code_editor)

输出为 True

8.3 not

not 会反转布尔值:

is_finished = False
is_still_learning = not is_finished

print(is_still_learning)

输出为 True

8.4 组合比较条件

daily_hours = 2.5
completed_tasks = 4

is_plan_healthy = daily_hours >= 1 and completed_tasks >= 3

这个结果表示“每天至少学习 1 小时,并且至少完成 3 个任务”是否同时成立。

本课只计算并输出布尔结果。下一课学习条件判断后,程序可以根据结果执行不同代码。

九、运算优先级

Python 会按照一定优先级计算表达式。

最基础的规则与数学类似:

  1. 先计算括号;
  2. 再计算幂运算;
  3. 再计算乘、除、整除和取余;
  4. 最后计算加减。
result = 2 + 3 * 4
print(result)

结果是 14,因为先计算 3 * 4

加入括号:

result = (2 + 3) * 4
print(result)

结果是 20

比较和逻辑运算组合时也有优先级规则,但不要依赖记忆复杂规则。推荐使用括号明确表达意图:

can_continue = (score >= 60) and (practice_finished == True)

上面代码中的 == True 可以省略,写成下面这样更自然:

can_continue = (score >= 60) and practice_finished

括号不仅影响运算顺序,也能帮助人更快读懂代码。

十、浮点数精度现象

运行下面代码:

print(0.1 + 0.2)

你可能看到:

0.30000000000000004

这不是 Python 随意算错,而是计算机使用二进制保存部分小数时产生的精度限制。

现阶段知道这种现象即可。涉及金额等要求精确的业务数据时,不能随意使用普通浮点数直接计算,后续数据库和项目课程会介绍合适的处理方式。

十一、运行本课示例

在 PowerShell 中执行:

cd D:\Code\Python\01_python基础\1_4_运算符
python operators.py

请边看源代码边观察输出,重点比较:

  • ///% 的不同结果;
  • === 的不同用途;
  • andornot 的布尔结果;
  • 添加括号前后的计算结果。

十二、常见错误

12.1 使用 ^ 表示乘方

Python 使用 ** 进行幂运算,不使用 ^

12.2 混淆 ===

需要比较时使用 ==,需要给变量保存数据时使用 =

12.3 除数为零

10 / 0

会产生 ZeroDivisionError,因为普通数字不能除以零。

12.4 字符串与数字直接相加

"总数:" + 10

会产生 TypeError。推荐使用 f-string

print(f"总数:{10}")

12.5 复杂表达式没有括号

即使程序结果正确,难以阅读的表达式也容易在维护时产生问题。优先使用括号和含义清晰的中间变量。

十三、课堂练习

打开 practice.py完成“Agent 学习进度计算器”。它会接收计划数据,计算完成率相关信息,并输出多个布尔判断结果。

运行命令:

python practice.py

本课重点是自己选择正确的运算符。请先不要参考示例文件逐行照抄。

十四、思考题

  1. 17 / 717 // 717 % 7 分别表示什么?
  2. score = 80score == 80 有什么区别?
  3. True and False 的结果是什么?
  4. True or False 的结果是什么?
  5. not True 的结果是什么?
  6. 为什么复杂表达式推荐使用括号?
  7. 2 + 3 * 4(2 + 3) * 4 为什么结果不同?

十五、本课小结

  • 算术运算符用于数字计算;
  • / 是普通除法,// 是整除,% 用于取得余数;
  • ** 用于幂运算;
  • 比较运算的结果是布尔值;
  • = 表示赋值,== 表示比较是否相等;
  • 复合赋值可以简洁地更新已有变量;
  • and 要求两个条件都成立;
  • or 要求至少一个条件成立;
  • not 用于反转布尔结果;
  • 括号可以改变或明确运算顺序。

十六、验收标准

  • 能正确使用七种基础算术运算符;
  • 能解释 ///% 的区别;
  • 能使用比较运算符得到布尔值;
  • 能区分赋值与相等比较;
  • 能使用至少一种复合赋值运算符;
  • 能使用 andornot
  • 能使用括号明确计算顺序;
  • 能完成并运行 practice.py
  • 能回答七道思考题。