在 Python 编程的世界里,控制语句就如同交通信号灯,指挥着程序的执行流程。它们赋予了程序决策的能力,让代码不再是简单的线性执行,而是能够根据不同条件做出不同反应,或是重复执行特定的代码块。对于零基础的编程学习者来说,掌握控制语句是踏入编程殿堂的关键一步,它能让你编写的程序更加智能、灵活,满足多样化的需求。接下来,让我们一同深入探索 Python 控制语句的奥秘。
1. 条件控制语句
一、基础 if
语句
语法:
if condition:
# 条件为 True 时执行的代码块
statement(s)
示例:
age = 18
if age >= 18: # 条件表达式返回布尔值
print("已成年") # 缩进的代码块(通常为4个空格)
注意事项:
- 冒号
:
不可省略:Python 使用冒号标记代码块的开始。 - 严格缩进:同一代码块内的语句必须保持相同缩进(通常为 4 个空格)。
- 条件表达式:可以是比较运算(如
> 5
)、逻辑运算(如x > 0 and y < 10
)或布尔值(如True
)。
二、双分支 if-else
结构
语法:
if condition:
# 条件为 True 时执行
statement1
else:
# 条件为 False 时执行
statement2
示例:
score = 75
if score >= 60:
print("及格")
else:
print("不及格")
注意事项:
else
后不跟条件:else
代表所有不满足if
条件的情况。- 代码块互斥执行:
if
和else
的代码块只会执行其中一个。
三、多分支 if-elif-else
结构
语法:
if condition1:
statement1
elif condition2: # 可多个 elif
statement2
else: # 可选
statement3
实例:
level = 3
if level == 1:
print("初级")
elif level == 2:
print("中级")
elif level == 3:
print("高级")
else:
print("未知等级")
注意事项:
- 执行顺序:按
if
→elif
→else
的顺序依次判断,一旦某个条件为True
,后续分支将被跳过。 else
可选:若所有条件都不需要默认处理,可省略else
。- 避免条件重叠:确保各条件互斥(例如使用范围判断时,区间不重叠)。
四、嵌套条件语句
示例:
x = 10
if x >= 0:
if x == 0: # 内层 if
print("零")
else:
print("正数")
else:
print("负数")
注意事项:
- 缩进层级:内层条件语句需在所属外层代码块的基础上进一步缩进。
- 逻辑清晰性:嵌套层级不宜过深,建议不超过 3 层,否则可用
and
/or
合并条件或重构代码。
五、常见注意事项汇总
-
条件表达式的隐式布尔转换:
- 非布尔值会自动转换为布尔类型(例如
0
、None
、空列表[]
等为False
,其他值为True
)。
name = "" if not name: # 空字符串视为 False print("姓名不能为空")
- 非布尔值会自动转换为布尔类型(例如
-
逻辑运算符优先级:
- 优先级顺序:
not
>and
>or
,建议用括号明确分组。
# 正确写法:避免歧义 if (age >= 18) and (country == "China"): pass
- 优先级顺序:
-
空代码块的占位符:
- 若条件成立时无需执行任何操作,可用
pass
语句占位。
if x > 0: pass # 占位,之后补充代码
- 若条件成立时无需执行任何操作,可用
-
单行条件表达式(三元运算符):
- 适用于简单赋值场景,避免复杂逻辑。
result = "及格" if score >= 60 else "不及格"
2. 循环控制语句
一、for
循环
语法:
for 变量 in 可迭代对象:
# 循环体
示例:
# 遍历列表
for fruit in ["apple", "banana"]:
print(fruit)
# 使用 range()
for i in range(3): # 输出 0,1,2
print(i)
注意事项:
- 循环变量在循环结束后仍存在。
- 避免在遍历过程中修改列表(改用副本)。
二、while
循环
语法:
while 条件:
# 循环体
示例:
count = 0
while count < 3:
print(count)
count += 1
注意事项:
- 必须确保循环条件能变为
False
,否则导致无限循环。 - 循环变量需在
while
前初始化。
三、循环的 else
子句
作用:循环正常结束后执行(未被 break
终止)。
示例:
# for 循环的 else
for i in range(3):
print(i)
else:
print("循环结束") # 会执行
# while 循环的 else
count = 0
while count < 3:
print(count)
count += 1
else:
print("循环结束") # 会执行
四、嵌套循环
示例:打印矩形
for i in range(3): # 行数
for j in range(5): # 列数
print("*", end=" ")
print() # 换行
五、常见陷阱
-
无限循环:
# 错误:缺少循环变量更新 while True: print("Hello") # 无限打印
-
遍历并修改列表:
# 错误:结果可能不符合预期 numbers = [1, 2, 3] for num in numbers: numbers.remove(num) # 结果:[2] # 正确:使用副本 for num in numbers.copy(): numbers.remove(num) # 结果:[]
3. 流程跳转语句
一、break
语句
作用:立即终止当前所在的循环(for
或 while
),跳出循环体。
示例:
for i in range(5):
if i == 3:
break # 当 i=3 时终止循环
print(i) # 输出:0, 1, 2
注意事项:
- 只影响最内层的循环。
- 循环的
else
子句不会执行(如果有)。
二、continue
语句
作用:跳过当前循环的剩余代码,直接进入下一次循环迭代。
示例:
for i in range(5):
if i % 2 == 0:
continue # 当 i 为偶数时跳过后续代码
print(i) # 输出:1, 3
注意事项:
- 同样只影响最内层的循环。
- 循环变量会正常更新(如
for
中的迭代变量、while
中的计数器)。
三、pass
语句
作用:空语句,用作占位符,不执行任何操作。
示例:
def func():
pass # 占位,后续补充函数体
if x > 0:
pass # 占位,暂不执行任何操作
注意事项:
- 用于语法上需要语句,但逻辑上无需执行任何代码的场景。
4. 特殊控制结构
一、with
语句
作用:自动管理资源(如文件、网络连接等)的分配与释放,确保资源在使用后被正确清理。
语法:
with 表达式 [as 变量]:
# 代码块
示例:文件操作
with open('example.txt', 'r') as f:
content = f.read()
# 文件在 with 块结束后自动关闭
二、生成器(yield
关键字)
作用:延迟生成数据,节省内存,适用于处理大量数据或无限序列。
示例:生成斐波那契数列
def fibonacci():
a, b = 0, 1
while True:
yield a # 返回当前值并暂停
a, b = b, a + b
# 使用生成器
gen = fibonacci()
for i in range(5):
print(i) # 输出:0, 1, 1, 2, 3
特点:
- 使用
yield
代替return
,函数变为生成器。
三、异常处理(try-except-else-finally
)
作用:捕获和处理运行时错误,增强程序健壮性。
语法:
try:
# 可能出错的代码
except 异常类型1 [as e]:
# 处理异常1
except 异常类型2:
# 处理异常2
else:
# 若无异常执行
finally:
# 无论是否有异常都执行
示例:
try:
result = 10 / 0 # 触发 ZeroDivisionError
except ZeroDivisionError:
print("除数不能为零")
else:
print(f"结果:{result}")
finally:
print("执行完毕")
注意事项:
finally
块常用于释放资源(如关闭文件、数据库连接)。- 可自定义异常类,通过
raise
主动抛出异常。
四、断言(assert
语句)
作用:在开发和调试阶段检查条件是否为真,若为假则触发 AssertionError
。
语法:
assert 条件 [, 错误信息]
示例:
def divide(a, b):
assert b != 0, "除数不能为零"
return a / b
divide(10, 0) # 触发 AssertionError: 除数不能为零