py02_python的运算符和流程控制语句
在 Python 编程中,运算符是构建表达式的基础,而流程控制语句则是实现逻辑跳转与重复执行的核心。掌握这两部分内容,是写出灵活、高效代码的前提。本文将系统梳理 Python 中的运算符分类、特性及使用场景,详解流程控制语句的语法规则与实践技巧,帮助你夯实编程基础。
一、运算符:构建表达式的基本单元
- **概述:**运算符用于对数据进行运算或比较,根据功能可分为算术运算符、赋值运算符、比较运算符和逻辑运算符四大类。
1. 算术运算符:处理数值计算
-
**概述:**算术运算符用于执行基本的数学运算,包括加、减、乘、除等,是处理数值型数据的核心工具。
-
常用的算术运算符:
运算符 名称 功能说明 示例 结果 +加法 求两个数的和 5 + 38-减法 求两个数的差 5 - 32*乘法 求两个数的积 5 * 315/除法 求两个数的商(结果为浮点数) 5 / 3、4 / 22.5、2.0//整除 求商的整数部分 5 // 3、5.3 // 21、2.0%取余(取模) 求除法的余数 5 % 3、5.3 % 32、2.3**幂次运算 求一个数的 n次方5 ** 3125 -
特性:
- 除法运算(
/)的结果永远是浮点型数据,即便是可以整除(如4/2=2.0) - 只要有浮点型数据参与运算,结果都是浮点数
- 算术运算的优先级:** > * / // % > + -
- 不确定优先级的时候直接加括号来规定运算顺序
- 使用括号来确定优先级可以增强代码的可读性
- 除法运算(
-
代码示例:
# python中常用的算术运算符: # + 加 取两个数的和 print(5 + 3) # 8 # - 减 取两个数的差 print(5 - 3) # 2 # * 乘 取两个数的积 print(5 * 3) # 15 # / 除 取两个数的商 print(5 / 2) # 2.5 print(4 / 2) # 2.0 # // 整除 5 / 3 商 1 余 2 整除取的就是整数商部分 print(5 // 3) # 1 print(5.3 // 2) # 2.0 # % 取模/取余 5 / 3 商 1 余 2 取模取得是余数部分 print(5 % 3) # 2 print(5.3 % 3) # 2.3 # ** 幂次运算 print(5 ** 3) # 代表5的3次方 125 # 除法运算的结果是浮点型数据,所有有浮点数参与的运算,结果都是浮点型 # 算术运算符的优先级 # 测试后发现乘除和取余运算在连续运算时从左至右依次计算 print(5 // 2 * 2) # 4 print(5 * 3 // 2) # 7 print(5 % 2 * 2) # 2 print(5 * 3 % 2) # 1 # 幂次运算的优先级高于其他算术运算符 print(2 * 3 ** 2) # 18,先计算 3 ** 2 = 9,再计算 2 * 9 = 18
2. 赋值运算符:变量赋值与更新
-
**概述:**赋值运算符用于将数据或表达式结果存储到变量中,核心是
=,并衍生出复合赋值运算符以简化代码。 -
基本赋值运算符(
=):- 功能:将等号右侧的值(或表达式结果)赋给左侧变量
- 规则:
- 左侧必须是变量(如
name = 'Alice'正确,'Alice' = name错误) - 右侧可以是常量、表达式或已定义的变量(如
total = 1 + 2 + 3、age = user_age) - 支持多次赋值,变量最终值为最后一次赋值结果(如
x = 1; x = 2,最终x=2) - 支持 “连等” 给多个变量赋相同值(如
a = b = c = 0) - 支持 “多变量同时赋值”(左侧变量数需与右侧值数一致,如
name, age = 'Bob', 20)
- 左侧必须是变量(如
-
**复合赋值运算符:**复合赋值运算符是算术运算符与
=的结合,用于简化 “变量自身更新” 的操作(如num = num + 3可简写为num += 3)。运算符 等价表达式 说明 +=num += 3→num = num + 3变量自增后赋值 -=num -= 3→num = num - 3变量自减后赋值 *=num *= 3→num = num * 3变量自乘后赋值 /=num /= 3→num = num / 3变量自除后赋值(结果为浮点型) //=num //= 3→num = num // 3变量自整除后赋值 %=num %= 3→num = num % 3变量自取余后赋值 **=num **= 3→num = num ** 3变量自幂次后赋值
注意:Python 没有自增(i++)、自减(i–)运算符,需用
i += 1、i -= 1替代。
- 代码示例:
# 基本赋值运算符 name = '刘亦菲' print(name) # 刘亦菲 actress = name print(actress) # 刘亦菲 total = 1 + 2 + 3 + 4 print(total) # 10 # 等号左边只能是变量,等号右边可以是数据、表达式或已经被定义的变量 # '欧阳锋' = name # 18 = age # 可以对同一个变量进行多次赋值,最终的结果是最后一次赋值的数据 name = '小龙女' print(name) # 小龙女 # 可以使用连等给多个变量赋相同的值 a = b = c = 1 print(a, b, c) # 1 1 1 # 可以使用逗号分隔一次性给多个变量赋值 name, age = '洪七公', 99 print(name, age) # 洪七公 99 # 复合赋值运算符 num = 9 num += 3 print(num) # 12 num -= 3 print(num) # 9 num *= 3 print(num) # 27 num /= 3 print(num) # 9.0 除法的结果是浮点数
3. 比较运算符:判断数据关系
-
**概述:**比较运算符用于判断两个数据的关系,结果为布尔值(
True或False),是流程控制中条件判断的基础。 -
常用的比较运算符:
运算符 名称 功能说明 示例 结果 ==等于 判断两个值是否相等 1 == True、2 == 3True、False!=不等于 判断两个值是否不相等 1 != 2、'a' != 'a'True、False>大于 判断左侧是否大于右侧 5 > 3、True > 1True、False<小于 判断左侧是否小于右侧 3 < 5、False < 0True、False>=大于等于 判断左侧是否大于或等于右侧 3 >= 3、5 >= 10True、False<=小于等于 判断左侧是否大于或等于右侧 2 <= 5、7 <= 3True、False -
特性:
- 布尔类型在比较运算中,布尔值
True等价于整数1,False等价于整数0(如True == 1结果为True,False > 0结果为False) <=和>=表示的是小于或等于 和 大于或等于,所以3 >= 2,1 <= 2的结果都是True- 整数(int)、浮点数(float)、布尔值(bool)可混合比较(如
3 > 2.5结果为True) - 其他类型(如字符串与整数)不能比较大小(如
'2' > 1会报错),但可判断是否相等(结果必为False,如'2' == 2为False)
- 布尔类型在比较运算中,布尔值
-
字符串之间比较大小的规则:
- 按字符编码(ASCII/Unicode)从左到右逐个比较,首个不同字符的大小决定整体大小(如
'15' < '18',比较第一个字符'1' == '1',再比较第二个字符'5' < '8',结果为True) - 字符串之间的大小和长短没有必然关系(如
'9' > '10',因为首个字符'9' > '1' - 规则:空格<数字<大写字母<小写字母<汉字,空格是最小的可见字符
- 我们一般不会使用字符串进行数字逻辑的比较,而是用于排序
- 按字符编码(ASCII/Unicode)从左到右逐个比较,首个不同字符的大小决定整体大小(如
-
代码示例:
# 不能使用 = 判断相等 # print(1 = 2) # SyntaxError: expression cannot contain assignment, perhaps you meant "=="? print(1 == 2) # False print(1 == True) # True print(0 == False) # True print(2 == True) # False print(2 == False) # False print(1 != 2) # True print(1 != False) # True print('-' * 27) print(True > 0) # True print(True > 1) # False print(False < 0) # False print(False > 0) # False print(3 >= 2) # True print(1 <= 2) # True print(1 >= 1) # True # 如果数据类型不相同,除了(int float bool)之外,不能比较大小 # TypeError: '<' not supported between instances of 'int' and 'str' # print(1 < '2') # 如果数据类型不相同,除了(int float bool)之外,则判断是否相等时不会报错,但一定不相等 print(3 != '3') # True print(5 == '5') # False print('-' * 27) # 字符串之间的比较运算 print('1' > '2') # False print('15' < '18') # True print('19' > '5') # False print('A' > 'a') # False print('985' > '98k') # False print('abc' > 'de') # False
4. 逻辑运算符:组合布尔表达式
- **概述:**逻辑运算符用于组合或反转布尔值,实现复杂条件判断,包括
and(逻辑与)、or(逻辑或)、not(逻辑非),常用于判断条件、循环控制等。 - 分类:
- 逻辑与(and):同真即真
- 逻辑或(or):同假即假
- 逻辑非(not):真假互换
- 代码示例:
# 逻辑运算符 # and 逻辑与,同真即真 print(True and True) # True print(False and True) # False print(True and False) # False print(False and False) # False print('-' * 27) # or 逻辑或,同假即假 print(True or True) # True print(True or False) # True print(False or True) # True print(False or False) # False print('-' * 27) # not 逻辑非,真假互换 print(not False) # True print(not True) # False
二、流程控制语句:控制代码执行逻辑
- 三大流程语句:
- 顺序语句:Python中默认代码都是从上到下顺序执行的
- 分支语句:使用
if进行构造,在同一条件下,只有一个分支的代码被执行 - 循环语句:使用
for或while进行构造,在条件满足的情况下,重复执行相同或者相似的代码
1. 顺序语句:默认的执行方式
- **概述:**Python中默认代码都是从上到下顺序执行的。
- 代码示例:
print('hello world') print('hello python') print('I love python') """ 打印结果: hello world hello python I love python 代码永远都是从上到下依次执行的 """
2. 分支语句:根据条件执行不同代码
-
概述:分支语句通过
if系列关键字实现 “条件判断”,根据条件是否成立执行不同代码块。Python 用缩进(建议 4 个空格或 Tab)划分代码块,而非大括号。 -
单条件分支语句
- 格式:
if 判断条件: 条件成立执行的代码块 - 当满足特定条件时执行一段代码,不满足则跳过
- 格式:
-
对立条件分支语句
- 格式:
if 判断条件: 条件成立时执行的代码块 else: 条件不成立时执行的代码块 - 注意:同一条件下,
if控制的代码块和else控制的代码块必有一个被执行,而且只能有一个被执行
- 格式:
-
多条件分支语句
-
格式:
if 条件1: 条件1成立时执行的代码 elif 条件2: 条件2成立时执行的代码 elif 条件3: 条件3成立时执行的代码 .... else: 上述条件均不成立时执行的代码 -
注意:
- 该分支语句有多个
elif,每个elif控制一个要执行的代码块,条件成立时执行该分支控制的代码块 - 条件从上到下依次判断,当一个条件成立后,将不会继续判断后续条件,直接执行分支代码块后结束
- 同一个条件下只有一个分支中的代码会被执行
- 当所有条件均不满足时,执行
else中的代码,else可有可无
技巧:Python 支持连续不等式(如
60 <= score <= 90),等价于score >= 60 and score <= 90,代码更简洁。 - 该分支语句有多个
-
-
分支语句的嵌套:
- 格式:
if 外层条件语句: 外层条件成立时执行的代码块 if 内层条件语句: 内层条件成立时执行的代码块 else: 外层条件不成立时执行的代码块 if 内层条件语句: 内层条件成立时执行的代码块 - 注意:
- 只有判断外层分支语句是否成立后,才能执行代码中的内层分支语句
- 使用场景:只有满足某种条件后才能进行进一步判断时,我们才使用分支语句的嵌套
- 格式:
-
代码示例:
# 单条件分支 # 需求: 判断年龄是否大于等于18岁 age = int(input('请输入您的年龄: ')) # 比如输入:22 if age >= 18: print('已成年,可独立出行') # 条件成立,执行此句 # 对立条件分支 # 需求:判断考试是否通过 score = 55 if score >= 60: print('考试通过') else: print('考试未通过') # 条件不成立,执行此句 # 多条件分支 score = int(input('请输入您的考试成绩: ')) if score > 100 or score < 0: print('数据异常,请重新输入!') elif score >= 90: print('优秀') elif score >= 80: print('良好') elif score >= 60: print('及格') else: print('不及格') # 分支语句嵌套 # 情节描述:上公交车,并且可以有座位坐下 # 要求:输入公交卡当前的余额,只要超过2元,就可以上公交车;如果车上有空座位,就可以坐下。 money = 3 seat = True # 判断公交卡余额是否大于等于2元 if money >= 2: print('赶紧上车吧') # 当上车之后就可以判断是否有座了 if seat: print('赶紧坐下,车要开了') else: print('抓紧扶好,要飙车了') else: print('余额不足,无法上车') -
三目运算符:
- 概述:
- 如果一个数据参与运算就是单目:
not False - 如果两个数据参与运算就是双目:
1 + 2 - 三目运算:三个数据参与运算
- 如果一个数据参与运算就是单目:
- 格式:条件成立时的到的结果
if条件else条件不成立时得到的结果 - 代码示例:
# 需求: 有两个变量 a 和 b 打印a 和 b 中 较大的值 a = 19 b = 26 print(a if a > b else b) # 三目运算符的结果可以复制给变量 res = a if a > b else b print(res)
- 概述:
3. 循环语句:重复执行代码块
- **概述:**循环语句用于重复执行一段代码(循环体),Python 提供
while和for两种循环,适用场景不同。 - while循环语句
- 格式:
while 判断条件: 判断条件成立循环执行的代码1 判断条件成立循环执行的代码2 - 代码示例:
# 打印1-5 i = 1 while i <= 5: print(i) i = i + 1 # 一定要更新循环变量 - 注意:
while循环根据条件是否成立重复执行循环体,适用于 “已知结束条件但不确定循环次数” 的场景while循环可以嵌套使用- 进行循环嵌套时,内外层循环变量名称不能相同
- 若未更新循环变量(如忘记
i += 1),条件可能永远成立,导致 “死循环” while循环一般用于构造有特定结束条件的循环或死循环
- 格式:
- for循环语句
- 概述:
for循环也是循环结构的一种,一般和容器类型搭配使用 - 循环规则:从容器类型中依次获取每一个元素赋值给临时变量,当数据取完则循环终止
- 格式:
for 临时变量 in 容器类型数据: 循环体 for循环优势:- 语法简洁且不容易出错
- 从容器中遍历数据不需要构造数据,直接可以取用
- 注意:
for循环用于遍历容器类型数据(如字符串、列表、范围range等),依次获取元素并执行循环体,适用于 “已知循环次数” 的场景- 循环次数和容器的长度相关
- 临时变量不要在循环体外使用,因为容器长度为
0时,临时变量未定义
- range函数:
range函数就是一个范围函数,内部是根据特定规则生成的整数序列- 格式:range(起始位置, 终止位置, 步长)
- 注意:
range函数的范围是一个左闭右开区间,即包含起始位置,不含终止位置range的步长可以省略,省略后默认步长为1(如range(1, 5)等价于1,2,3,4)range的起始位置可以省略,省略后默认从0开始(如range(5)等价于0,1,2,3,4)range中的参数只能使用整数
- 代码示例:
# 1. range从起始位置到终止位置时一个左闭右开区间 # 创建一个1-9的整数序列 # 注意: range函数的范围是一个左闭右开区间,从(1,9)代表的范围就是从1-8的整数区间,包含1,不包含9 num_ran = range(1, 9, 1) print(num_ran) # range(1, 9, 1) print(list(num_ran)) # [1, 2, 3, 4, 5, 6, 7, 8] print('-'*21) # 2. range的步长可以省略,省略后默认步长为1 num_ran = range(1, 9) print(num_ran) # range(1, 9) print(list(num_ran)) # [1, 2, 3, 4, 5, 6, 7, 8] # 我们使用range只可以创建一定规则的整数序列,所有整数之间步长必须相等,否则无法创建 print('-'*21) # 3. range 函数可以省略起始位置,例如 range(10) 默认从 0开始 num_ran = range(10) print(num_ran) # range(0, 10) print(list(num_ran)) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] print('-'*21) # 4. range中的步长可以是任意整数 num_ran = range(0, 10, 2) print(num_ran) # range(0, 10, 2) print(list(num_ran)) # [0, 2, 4, 6, 8] # TypeError: 'float' object cannot be interpreted as an integer # num_ran = range(0, 10, 2.5) range中的所有参数,只能使用整型数据 print('-'*21) ######################### 配合for循环使用range函数 ############################# # 需求: 打印从1-9的数字 for i in range(1, 10): print(i) # 需求: 打印从1-9的数字累加和 sum1 = 0 for i in range(1, 10): sum1 += i print(f'1-9的累加和是{sum1}') # 需求: 打印从1-9的数字中的偶数累加和 sum1 = 0 for i in range(1, 10): if i % 2 == 0: sum1 += i print(f'1-9的偶数累加和是{sum1}')
- 概述:
- 循环控制语句
- break:用于终止循环,即执行了
break之后跳出循环,直接执行循环后面的代码 - continue:用于结束本次循环中未执行的内容,直接进入下一次循环
- 注意:
- 在
while循环中,如果使用循环变量控制循环的执行,必须在使用continue之前更新循环变量,否则会造成死循环 break和continue只能控制当前所在的循环,如果在内层循环就控制内层循环的结束和跳过,如果在外层就控制外层循环的结束和跳过break和continue只能用在循环体中,否则报错
- 在
- 代码示例:
# 判断一个数是否是质数,当找到一个因子的时候就说明不是质数,退出循环 num = 9527 i = 2 while True: if num % i == 0: print(f'{num}存在因子{i},所以不是质数') break i += 1 # 求 1-100 之间不能被3或7整除的数字之和 sum_num = 0 for i in range(1, 101): if i % 3 == 0 or i % 7 == 0: continue sum_num += i print(sum_num) # 下述代码会造成死循环,因为第一次满足if条件之后,continue结束本次循环,导致i没有被更新,于是会一直满足if条件,一直循环 sum_num, i = 0, 1 while i <= 100: if i % 3 == 0 or i % 7 == 0: continue sum_num += i i += 1 print(sum_num)
- break:用于终止循环,即执行了
- 循环中的else
- 格式:
while 条件: 循环体 else: 代码块 # 当循环条件不满足时,执行else中的代码 for 临时变量 in 容器类型: 循环体 else: 代码块 # 当容器类型中的元素遍历完后执行else中的代码 - 注意:
- 当循环异常终止时,
else中的代码将不会被执行 - 执行
break结束循环,属于循环的异常终止,不会执行else continue不会造成循环异常终止,else中的代码会被执行
- 当循环异常终止时,
- 代码示例:
# 循环中的else num = 19 i = 2 while i < num: if num % i == 0: print(f'{num}存在因子{i},所以不是质数') break i += 1 else: print(f'{num}是素数')
- 格式:
三、总结
本文系统介绍了 Python 中的运算符与流程控制语句,涵盖:
- 算术、赋值、比较、逻辑四类运算符;
- 顺序、分支、循环三种流程结构;
- 分支嵌套、三目运算、循环控制等高级用法。
掌握这些基础内容将为后续函数、面向对象等知识打下坚实基础。建议读者亲自尝试文中的代码示例,加深理解。
1712

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



