5. Python 运算符
Python 中的运算符共有五种:算术运算符、赋值运算符、比较运算符、逻辑运算符、成员运算符、位运算符
5.1 算术运算符
算术运算符即为日常生活中的加减乘除四则运算。
| 运算符 | 功能说明 |
|---|---|
| 加法运算符(+) | 用于获取两个对象相加的结果 |
| 减法运算符(-) | 用于得到负数或获取a减b的结果 |
| 乘法运算符(*) | 用于获取两个对象相乘的结果 |
| 除法运算符(/) | 用于获取a除以b的商的结果 |
| 取余运算符(%) | 用于获取a除以b的余数 |
| 整除运算符(//) | 用于获取a除以b的商的整数部分 |
| 幂运算符(**) | 用于获取a的b次幂 |
a, b = 5, 3
print("a + b 的结果为: ", a + b) # 输出结果为: 8
print("a - b 的结果为: ", a - b) # 输出结果为: 2
print("-a 的结果为: ", -a) # 输出结果为: -5
print("a * b 的结果为: ", a * b) # 输出结果为: 15
print("a / b 的结果为: ", a / b) # 输出结果为: 1.6666666666666667
print("a % b 的结果为: ", a % b) # 输出结果为: 2
print("a // b 的结果为: ", a // b) # 输出结果为: 1
print("a ** b 的结果为: ", a ** b) # 输出结果为: 125
5.2 赋值运算符
赋值运算符只有一个,即“ = ”,它的作用是把等号右边的值赋给左边。
但赋值运算符可以和算术运算符复合使用,起到待赋值的变量先参与运算,再赋值的效果。
| 运算符 | 功能说明 |
|---|---|
| 加法赋值运算符(+=) | c += a 等效于 c = c + a |
| 减法赋值运算符(-=) | c -= a 等效于 c = c - a |
| 乘法赋值运算符(*=) | c *= a 等效于 c = c * a |
| 除法赋值运算符(/=) | c /= a 等效于 c = c / a |
| 取模赋值运算符(%=) | c %= a 等效于 c = c % a |
| 取整除赋值运算符(//=) | c //= a 等效于 c = c // a |
| 幂赋值运算符(**=) | c **= a 等效于 c = c ** a |
a, c = 2, 3
c += a
print("c += a的结果为: ", c)
c -= a
print("c -= a的结果为: ", c)
c *= a
print("c *= a的结果为: ", c)
""" 输出结果
c += a的结果为: 5
c -= a的结果为: 3
c *= a的结果为: 6
"""
5.3 比较运算符
比较运算符的返回值均为 bool 型变量,当符合比较结果时,将返回 True,反之将返回 False。
| 运算符 | 功能说明 |
|---|---|
| == | 检查两个操作数的值是否相等 |
| != | 检查两个操作数的值是否不相等 |
| > | 检查左操作数的值是否大于右操作数的值 |
| < | 检查左操作数的值是否小于右操作数的值 |
| >= | 检查左操作数的值是否不小于右操作数的值 |
| <= | 检查左操作数的值是否不大于右操作数的值 |
a, b = 2, 3
print(a < b) # 输出结果为:True
print(a >= b) # 输出结果为:False
5.4 逻辑运算符
与集成电路中的与、或、非相似,逻辑运算符主要用于多条件逻辑计算。
| 运算符 | 逻辑表达式 | 功能说明 | 简化理解 |
|---|---|---|---|
| and | x and y | 与运算,如果x为False,x and y返回False,否则它返回y的计算值 | 当x和y均为True时返回True,否则返回False |
| or | x or y | 或运算,如果x为True,它返回True,否则返回y的计算值 | 当x和y有一个为True时返回True,否则返回False |
| not | not x | 非运算,如果x为True,返回False,如果x为False,它返回True | 当x为True时返回False,否则返回True |
a, b, c = 2, 3, 4
print(a < b and b < c) # True,按Python的语法,此处可以简化链式比较,写成a<b<c
print(a > b and b < c) # False
print(a > b > c) # False
print(a < b or b < c) # True
print(a > b or b < c) # True
print(a > b or b > c) # False
print(not a < b) # False
print((not a > b) and b < c) # True
5.5 成员运算符
用于判断值是否在指定的序列中存在。
| 运算符 | 功能说明 |
|---|---|
| in | 如果在指定的序列中找到值返回 True,否则返回 False。 |
| not in | 如果在指定的序列中没有找到值返回 True,否则返回 False。 |
myList = [1, 2, 3, 4, 5]
print(1 in myList) # True
print(6 in myList) # False
print(7 not in myList) # True
5.6 位运算符
位运算符用于对比特位进行操作,包括按位与、按位或、按位异或、按位取反和移位。
| 运算符 | 功能说明 | 简化理解 |
|---|---|---|
| 按位取反(~) | 用于将一个数的每个位取反 | 如果按十进制来理解,~n = -(n+1) |
| 按位与运算符(&) | 用于对两个数的每个位执行与操作 | 两个二进制相应位同时为1,结果才为1,否则为0 |
| 按位或运算符(|) | 用于对两个数的每个位执行或操作 | 两个二进制相应位有一个为1,结果就为1,否则为0 |
| 按位异或运算符(^) | 用于对两个数的每个位执行异或操作 | 两个二进制相应位值不同,结果就为1,否则为0 |
| 左移运算符(<<) | 用于将一个数的位向左移动指定的位数 | 二进制数整体向左移动,如果右侧空出位置,则自动填充为 0 |
| 右移运算符(>>) | 用于将一个数的位向右移动指定的位数 | 二进制数整体向右移动,移动过程中超出的值将被丢弃 |
a, b = 5, 9
print("十进制5对应的二进制为: ", bin(a)) # 输出结果为:0b101
print("十进制9对应的二进制为: ", bin(b)) # 输出结果为:0b1001
print("a&b:", a & b) # 输出结果为:1,对应二进制为:0b1
print("a|b:", a | b) # 输出结果为:13,对应二进制为:0b1101
print("a^b:", a ^ b) # 输出结果为:12,对应二进制为:0b1100
print("~a:", ~a) # 输出结果为:-6,对应二进制为:-0b110
print("b<<2:", b << 2) # 输出结果为:36,对应二进制为:0b100100
print("b>>2:", b >> 2) # 输出结果为:2,对应二进制为:0b10
在计算机中,数值是通过补码存储的,正数的补码等于它本身,负数的补码等于源码的数字部分按位取反后加1
理解一下为什么~5的结果会是-6:
例如例子中的5(对应二进制为:00000101),取反后得到二进制为:11111010,这个二进制在计算机看来实际上是一个补码
那么它实际上对应的十进制值为:11111010(补码)-- 按位取反 -> 10000101 -- +1 -> 10000110(源码) -> -6
补充知识⚠️ 知道某个数的补码,要求其十进制值的方法是:
① 先看符号位(最左的一位),如果是1代表是负数,如果是0代码是正数;
② 将补码的数字部分取反,再+1,可以得到这个数的源码,再将源码转成对应的十进制即可
5.7 运算符的优先级
| 优先级 | 运算符 | 描述 |
|---|---|---|
| 最高级1 | ** | 幂运算符/指数运算符 |
| 2 | +x,-x,~x | 正,负,按位取反 |
| 3 | *,/,//,% | 乘,除,取模,取整除 |
| 4 | +,- | 加,减 |
| 5 | <<,>> | 左移,右移 |
| 6 | & | 按位与 |
| 7 | ^ | 按位异或 |
| 8 | | | 按位或 |
| 9 | in,not in,<,<=,>,>=,!=,== | 比较运算符和成员运算符 |
| 10 | and,or,not | 逻辑运算符 |
6. Python 常用语句
程序设计中有几类常用的语句:条件语句、循环语句和其他语句。
6.1 条件语句
通过条件表达式的执行结果(True或者False)来决定代码块是否执行的语句。
| if语句 | if-else语句 | |
|---|---|---|
| 基本形式 | if 判断条件: 满足条时要执行的代码块 | if 判断条件: 满足条件时要执行的代码块 else: 不满足条件时要执行的代码块 |
| 应用实例 | | |
| if-elif语句 | if嵌套语句 | |
| 基本形式 | if 判断条件1: 满足条件1时要执行的代码块 elif 判断条件2: 满足条件2时要执行的代码块 else 不满足任何一个条件时要执行的代码块 | if嵌套指的是在if或者 if-else语句里面包含if或者if-else |
| 应用实例 | | |
6.2 循环语句
Python 中的语句一般遵循从上到下按顺序执行,但有时需要将某个代码块重复执行多次,若将该代码块复制粘贴多次显然是低效且繁琐的,那么就需要用到循环语句。
循环语句实际上是通过条件表达式决定将某个代码块重复执行若干次,直到不满足条件为止。
Python 中提供了 for 循环和 while 循环,需要注意的是,在 Python 中没有 do ... while 循环。
6.2.1 while 循环
while 循环是在给定的判断条件为 True (或非零值)时执行循环体,否则退出循环体,其基本形式为:
while 条件表达式:
满足条件时要执行的代码块
当条件表达式永远为 True 且不存在退出条件时,将陷入无限循环,请尽量避免这类情况出现。

a, b = 0, 3
while a < b:
print("a=" + str(a) + ",a<b")
a += 1
""" 输出结果
a=0,a<b
a=1,a<b
a=2,a<b
"""
6.2.2 for 循环
for 循环可以遍历任何序列(比如列表、字符串等)的项目,以达到重复执行语句的效果,其基本形式为:
for 变量 in 序列:
循环语句
for 循环最基础的应用实例:
for i in [1, 2, 3]:
print("i的值为: " + str(i))
for i in "abc":
print("i的值为: " + i)
""" 输出结果
i的值为: 1 i的值为: a
i的值为: 2 i的值为: b
i的值为: 3 i的值为: c
"""
请思考⚠️:之前提到复合数据类型的索引默认 0 开始,但是在遍历列表 [1,2,3] 的过程中,为什么变量 i 的首个输出值是1而不是0?
原因:for 循环遍历列表时,实质上是依次(从索引为0开始依次往后)将列表中的值取出并赋值给变量 i,所以变量 i 代表着列表中的值而不是索引。
为了方便生成数字序列,Python 提供了一个内置 range() 函数,详细说明可以参考文档:Built-in Types — Python 3.10.13 documentation
https://docs.python.org/3.10/library/stdtypes.html#rangerange() 函数有两种调用方式:
-
range(stop):生成一个从零开始的数字序列,范围为 0 到 stop-1 ,步进值为1。
-
range(start, stop[, step]):
-
生成一个从 start 开始,以 step 为步进值(默认值为1),第 i 项 r[i] = start + step*i;
-
如果 step>0,则序列终止条件为 r[i+1] >= stop,反之如果 step<0,则序列终止条件为 r[i+1] <= stop。
-
需要注意,range 函数中的所有参数都必须为整型 integer ,否则会报错。
例如:range(5)=[0,1,2,3,4],range(0,3)=[0,1,2],range(2,10,3)=[2,5,8],range(3,-3,-2)=[3,1,-1]
有了 range() 函数的帮助,现在可以很方便的实现根据输入显式控制循环执行多少次这个问题,其基本形式为:
for i in range(start,end):
执行循环语句
该循环结构可以理解为:①循环计时器变量 i 被设置为start;②执行循环语句;③ i+1;④ i 每次递增都会执行一次循环;⑤当 i 等于end时,循环结束。
mylist = ["My", "Name", "is", "XiaoMing"]
for i in range(len(mylist)): # len()方法用于返回对象长度,将mylist的长度4作为循环次数
print("第%d个单词是:%s" % (i, mylist[i])) # 逐个输出mylist中的单词,此处涉及了print()格式化输出
""" 输出结果
第0个单词是:My
第1个单词是:Name
第2个单词是:is
第3个单词是:XiaoMing
"""
print() 格式化输出的两种输出格式
(1)类似 C语言的 printf()函数的语法,在字符串中加入对应的占位符,并在字符串后指定变量
print('My name is %s and I am %d years old.' % ("XiaoMing", 18))常用的占位符如下表所示,其余的请需要时自行百度检索:
数据类型
格式化占位符
数据类型
格式化占位符
字符
%c
字符串
%s
有符号整数(十进制)
%d
无符号整数(十进制)
%u
浮点数(用小数点符号)
%f
浮点数(科学计数法)
%e
(2)使用format()方法,用大括号来替换占位符
print('My name is {} and I am {} years old.'.format("XiaoMing", 18))
关于print()函数,还有 sep、end 等参数,详细可见:python文档:内置函数 print(*objects, sep=' ', end='\n', file=None, flush=False)
https://docs.python.org/zh-cn/3/library/functions.html#print
sep:用来间隔多个对象,默认值是一个空格。
end:用来设定以什么结尾。默认值是换行符 \n,我们可以换成其他字符串。
6.3 其他辅助语句
6.3.1 break 语句
break语句用来立即终止循环,并开始执行循环体后的下一行代码。
如果是嵌套循环,break语句将终止最深层的循环,并开始执行上一层循环体的下一轮循环。
for i in range(4):
if i == 2: # 当i为2时终止外层循环
break
for j in range(4):
if j == 2: # 当j为2时终止内层循环
break
print("(i,j)={},{}".format(i, j))
print("finish-inner")
print("finish-outer")
""" 输出结果
(i,j)=0,0
(i,j)=0,1
finish-inner
(i,j)=1,0
(i,j)=1,1
finish-inner
finish-outer
"""
6.3.2 continue语句
continue 语句用来跳过当前循环的剩余语句,然后继续进行下一轮循环
和 break 语句的区别在于:continue 语句跳出本次循环,而break跳出整个循环。
for i in range(4):
if i == 2: # 当i为2时跳过本轮外层循环
continue
for j in range(4):
if j == 2: # 当j为2时跳过本轮内层循环
continue
print("(i,j)={},{}".format(i, j))
print("finish-inner")
print("finish-outer")
""" 输出结果
(i,j)=0,0
(i,j)=0,1
(i,j)=0,3
finish-inner
(i,j)=1,0
(i,j)=1,1
(i,j)=1,3
finish-inner
(i,j)=3,0
(i,j)=3,1
(i,j)=3,3
finish-inner
finish-outer
"""
本文详细介绍了Python中的各种运算符,如算术运算、赋值运算、比较运算、逻辑运算、成员运算和位运算,以及条件语句(if、elif、else)、while和for循环的用法。此外,还讨论了break和continue语句的作用。

被折叠的 条评论
为什么被折叠?



