写程序时,经常需要让计算机帮我们“算东西”“做判断”“组合数据”。
例如:
这里的 * 就是运算符,表示乘法。
再比如:
这里的 >= 也是运算符,表示“大于等于”。
在 Python 中,运算符和表达式几乎无处不在。学习变量、输入输出、条件判断、循环、函数时,都会用到它们。
简单来说:
运算符:用来进行计算、比较、判断或赋值的符号或关键字。表达式:由变量、常量、运算符、函数调用等组成,并且能够计算出一个结果的代码。掌握运算符和表达式,学生才能真正写出“会计算、会判断、会处理数据”的程序。
运算符是 Python 中具有特殊含义的符号或关键字,用来对数据进行操作。
例如:
这里的 + 是运算符,表示加法。
这里的 >= 是运算符,表示大于等于。
这里的 == 是运算符,表示判断两个值是否相等。
表达式是能够计算出一个结果的代码。
例如:
这是一个表达式,结果是:
再比如:
这也是一个表达式,结果可能是:
或者:
再看一个例子:
如果:
那么表达式 price * count 的结果就是:
教学时可以告诉学生:
表达式就像一道算式,程序会把它算出一个结果。
运算符通常是表达式的一部分。
例如:
这里:
再如:
这里:
score >= 60 整体是表达式,结果是布尔值 True 或 False。
Python 中常见的运算符可以分为以下几类:
初学阶段最重要的是:
位运算符和身份运算符可以作为了解内容,不需要一开始讲得太深。
算术运算符用于数学计算。
常见算术运算符:
| | | |
|---|
+ | | 3 + 2 | 5 |
- | | 3 - 2 | 1 |
* | | 3 * 2 | 6 |
/ | | 3 / 2 | 1.5 |
// | | 3 // 2 | 1 |
% | | 3 % 2 | 1 |
** | | 3 ** 2 | 9 |
+ 可以用于数字加法。
输出:
+ 也可以用于字符串拼接。
print(first_name + last_name)输出:
注意:
数字加法和字符串拼接不是一回事。
输出:
第一个是数学加法,第二个是字符串拼接。
- 用于数字减法。
输出:
也可以表示负数:
输出:
* 用于数字乘法。
输出:
* 还可以让字符串重复多次。
输出:
这个特性可以用于简单分隔线:
输出:
/ 表示普通除法。
输出:
注意:
在 Python 中,使用 / 做除法时,结果通常是浮点数。
即使能整除:
输出也是:
而不是整数 5。
// 表示整除,也叫地板除。
它会得到除法结果的整数部分。
输出:
可以这样理解:
10 除以 3 等于 3 余 1,所以 10 // 3 的结果是 3。9 除以 2 等于 4 余 1,所以 9 // 2 的结果是 4。注意:
// 不是四舍五入,而是向下取整。
输出:
% 表示取余数。
输出:
取余在编程中很常用。
例如,判断一个数是奇数还是偶数:
number = int(input("请输入一个整数:"))这里:
表示 number 除以 2 的余数。
如果余数是 0,说明它能被 2 整除,是偶数。
** 表示乘方。
输出:
解释:
2 ** 3 表示 2 的 3 次方,也就是 2 * 2 * 2。3 ** 2 表示 3 的 2 次方,也就是 3 * 3。计算正方形面积:
输出:
由数字、变量和算术运算符组成的表达式,叫算术表达式。
例如:
例子:计算平均分。
average = (chinese + math + english) / 3print(f"平均分是{average:.2f}")输出:
这里:
(chinese + math + english) / 3就是一个算术表达式。
赋值运算符用于给变量赋值,或者更新变量的值。
最常见的赋值运算符是:
例子:
这里不是数学中的“相等”,而是把右边的值保存到左边的变量中。
可以读作:
输出:
变量的值可以被重新赋值。
输出:
因为第二次赋值会覆盖第一次的值。
可以同时给多个变量赋同一个值。
输出:
这表示 a、b、c 的值都是 0。
Python 支持一次给多个变量赋值。
name, age, city = "小明", 18, "北京"输出:
注意:
左边变量个数和右边数据个数要一致。
错误示例:
这会报错,因为左边有 2 个变量,右边有 3 个值。
复合赋值运算符用于“在原来变量的基础上进行运算,再赋值回去”。
常见复合赋值运算符:
| | |
|---|
+= | | x = x + n |
-= | | x = x - n |
*= | | x = x * n |
/= | | x = x / n |
//= | | x = x // n |
%= | | x = x % n |
**= | | x = x ** n |
例子:
输出:
这里:
等价于:
统计次数:
输出:
累加总和:
输出:
循环中经常会用到复合赋值:
for number inrange(1, 6):输出:
比较运算符用于比较两个值之间的关系。
比较表达式的结果一定是布尔值:
或:
常见比较运算符:
| | | |
|---|
== | | 3 == 3 | True |
!= | | 3 != 2 | True |
> | | 5 > 3 | True |
< | | 5 < 3 | False |
>= | | 5 >= 5 | True |
<= | | 4 <= 5 | True |
== 用来判断两个值是否相等。
输出:
注意:
== 和 = 不一样。
age == 18# 判断 age 是否等于 18这是初学者非常容易混淆的地方。
!= 用来判断两个值是否不相等。
print(password != "admin")输出:
输出:
这些比较运算符经常用在 if 条件判断中。
score = int(input("请输入成绩:"))
Python 支持链式比较。
例如,判断成绩是否在 0 到 100 之间:
这比下面写法更简洁:
if score >= 0and score <= 100:不过初学时可以先讲普通写法,再介绍链式比较。
比较表达式是使用比较运算符组成的表达式。
例如:
比较表达式的结果是 True 或 False。
例子:
输出:
这里:
先被计算成 True,然后赋值给变量 result。
逻辑运算符用于组合多个条件。
Python 中常见逻辑运算符有三个:
and 表示“并且”。
只有左右两个条件都成立,结果才是 True。
if age >= 18and has_ticket:这里必须同时满足:
才可以入场。
or 表示“或者”。
只要左右两个条件有一个成立,结果就是 True。
if is_member or has_coupon:这里只要是会员,或者有优惠券,就可以享受优惠。
not 表示“不是”或“取反”。
is_login 是 False,not is_login 就是 True。
所以会输出:
and 的规则:
| |
|---|
True and True | True |
True and False | False |
False and True | False |
False and False | False |
or 的规则:
| |
|---|
True or True | True |
True or False | True |
False or True | True |
False or False | False |
not 的规则:
| |
|---|
not True | False |
not False | True |
由比较表达式和逻辑运算符组成的表达式,叫逻辑表达式。
例如:
score >= 60or is_makeup_exam逻辑表达式经常作为 if 的条件。
if score >= 60and attendance >= 80:
成员运算符用于判断一个值是否在某个序列中。
常见成员运算符:
这里的序列可以是字符串、列表、元组等。
输出:
可以用于简单关键词判断:
students = ["小明", "小红", "小刚"]输出:
用于判断用户输入是否在允许范围内:
level = input("请输入等级 A/B/C:")if level in ["A", "B", "C"]:
not in 表示“不在里面”。
forbidden_names = ["admin", "root"]username = input("请输入用户名:")if username notin forbidden_names:
身份运算符用于判断两个变量是否引用同一个对象。
常见身份运算符:
初学时可以简单理解:
例子:
输出通常是:
解释:
a == b 是 True,因为两个列表的内容相同。a is b 是 False,因为它们是两个不同的列表对象。a is c 是 True,因为 c 引用的就是 a 指向的那个列表。初学阶段需要重点记住:
判断两个值是否相等,一般使用 ==,不要随便用 is。
常见用法是判断是否为 None:
位运算符用于对整数的二进制位进行运算。
这部分在 Python 基础入门阶段不是最常用内容,可以作为了解。
常见位运算符:
| 运算符 | 名称 || ------ | -------- | ------ || & | 按位与 || | | 按位或 || ^ | 按位异或 || ~ | 按位取反 || << | 左移 || >> | 右移 |
例子:
可以把整数先想象成二进制:
按位与 &:
结果是二进制 001,也就是十进制 1。
对于初学者,不需要一开始掌握复杂位运算,只要知道它是“对二进制位进行操作”的运算符即可。
当一个表达式中有多个运算符时,Python 会按照一定顺序计算。
这就是运算符优先级。
比如:
输出:
因为乘法 * 的优先级高于加法 +,所以先算:
再算:
如果想先算加法,可以使用小括号:
输出:
下面列出初学阶段常见的优先级,从高到低:
不建议让初学者死记整张优先级表。
更实用的建议是:
如果不确定先算谁,就加小括号。
例子:
if (score >= 60) and (attendance >= 80):虽然这里不加括号也能运行,但加括号后更容易读懂。
表达式求值,就是 Python 计算表达式结果的过程。
例子:
result = (10 + 5) * 2 > 20可以分步骤理解:
所以:
输出:
教学时可以让学生把复杂表达式一步一步拆开,这样更容易理解。
逻辑运算符 and 和 or 有一个重要特点:短路运算。
短路运算指的是:
当 Python 已经能确定整个表达式结果时,就不会继续计算后面的部分。
and 要求左右都为真,结果才为真。
如果左边已经是 False,整个表达式一定是 False,右边就不需要再计算。
if age >= 18andinput("请输入验证码:") == "1234":这里 age >= 18 是 False,所以 Python 不会再执行右边的 input()。
因为无论右边是真是假,整个 and 表达式都已经不可能为 True。
or 只要求有一个条件为真,结果就为真。
如果左边已经是 True,整个表达式一定是 True,右边就不需要再计算。
if is_admin orinput("请输入邀请码:") == "8888":这里 is_admin 是 True,所以 Python 不会再执行右边的 input()。
短路运算在实际开发中很常见,但初学阶段只需要知道:
and 和 or 不一定会计算所有条件。
一个单独的值也可以是表达式。
它们本身就能得到一个结果。
一个变量也可以是表达式。
变量表达式的结果就是变量当前保存的值。
结果通常是数字。
结果是 True 或 False。
score >= 60or is_makeup_exam结果也是 True 或 False。
函数调用也可以是表达式,因为它可能返回一个结果。
例子:
输出:
这里 len("Python") 是表达式,它的结果是 6。
初学者有时会混淆表达式和语句。
可以这样简单区分:
例如:
这是表达式,结果是 30。
这是赋值语句,它把表达式 10 + 20 的结果赋值给变量 x。
这是条件语句,用来控制程序执行流程。
在教学中,不需要一开始讲得过于抽象,可以先让学生记住:
表达式通常能放在 print() 里面输出,因为它能算出一个值。
例如:
Python 对不同数据类型之间的运算有一定规则。
整数和浮点数可以一起做算术运算,结果通常是浮点数。
输出:
print("Hello" + "Python")输出:
如果想中间有空格:
print("Hello" + " " + "Python")输出:
错误示例:
这会报错,因为字符串不能和整数直接拼接。
正确写法:
更推荐:
输出:
但字符串不能和字符串相乘。
错误示例:
如果数字来自 input(),要先转换:
times = int(input("请输入重复次数:"))
错误示例:
问题:
if 条件中应该使用比较运算符 ==,不能使用赋值运算符 =。
正确写法:
错误示例:
用户输入:
输出:
原因:
input() 得到的是字符串,+ 在字符串之间表示拼接。
正确写法:
a = int(input("请输入第一个数:"))b = int(input("请输入第二个数:"))输出:
错误示例:
程序会报错,因为数学中不能除以 0。
可以在计算前判断:
输出:
// 是整除,不是四舍五入。
如果要四舍五入,可以使用 round()。
输出:
再如:
输出:
错误示例:
if score >= 60or score <= 100:这段代码看起来像是判断成绩是否在 60 到 100 之间,但逻辑有问题。
因为很多数字都会满足其中一个条件。
比如 score = 150 时:
是 True,所以整个 or 表达式也是 True。
正确写法:
if score >= 60and score <= 100:也可以写成:
结果是 14,不是 20。
如果想先算加法,要写:
建议学生:
不确定优先级时就加括号。
不推荐:
普通值相等判断应使用 ==。
推荐:
is 通常用于判断是否是 None:
可以用生活中的例子解释:
运算符像数学符号和判断词。
表达式就像一句“可以得出结果的话”。
例如:
这句话能算出总价。
这句话能判断是否及格。
这句话能判断是否满足入场条件。
可以把表达式的结果分为两大类:
算出一个数,例如 10 + 20 的结果是 30。判断真假,例如 score >= 60 的结果是 True 或 False。
score = float(input("请输入学生成绩:"))attendance = float(input("请输入出勤率:"))if0 <= score <= 100and0 <= attendance <= 100:if score >= 60and attendance >= 80:这段代码中包含:
表达式:score >= 60 and attendance >= 80可以带学生一步一步分析:
请让用户输入商品单价和购买数量,计算总价。
参考答案:
price = float(input("请输入商品单价:"))count = int(input("请输入购买数量:"))print(f"商品总价是{total:.2f}元")
请让用户输入一个整数,判断它是奇数还是偶数。
参考答案:
number = int(input("请输入一个整数:"))
请让用户输入成绩,判断成绩是否在 0 到 100 之间。
参考答案:
score = float(input("请输入成绩:"))
入场条件:
请写程序判断用户是否可以入场。
参考答案:
age = int(input("请输入年龄:"))has_ticket = input("是否有门票?请输入 yes 或 no:")if age >= 18and has_ticket == "yes":
禁止使用的用户名有:
["admin", "root", "test"]请判断用户输入的用户名是否可以使用。
参考答案:
forbidden_names = ["admin", "root", "test"]username = input("请输入用户名:")if username notin forbidden_names:
请判断下面表达式的结果。
参考答案:
下面代码有什么问题?请改正。
参考答案:
问题是 input() 得到的是字符串,不能直接和整数 18 比较。
正确写法:
age = int(input("请输入年龄:"))
请使用循环和 += 计算 1 到 100 的和。
参考答案:
for number inrange(1, 101):输出:
| | |
|---|
if age = 18: | | |
| input() | |
| / | |
5 // 2 | // | |
| and | |
| | |
| | |
| | |
运算符是 Python 中用来计算、赋值、比较和判断的符号或关键字。
表达式是能够计算出一个结果的代码。
本节需要重点掌握:
算术运算符用于数学计算,例如 +、-、*、/、//、%、**。赋值运算符用于给变量保存数据,例如 =、+=、-=。比较运算符用于比较两个值,结果是 True 或 False。逻辑运算符用于组合多个条件,包括 and、or、not。成员运算符用于判断某个值是否在序列中,包括 in 和 not in。input() 得到的是字符串,参与数学运算前要转换类型。运算符负责“怎么算、怎么比、怎么判断”,表达式负责“算出一个结果”。