人人都会AI编程

7.5 流程控制:if 分支、for/while 循环、break/continue/else

更新时间:2026-07-12

流程控制是程序的骨架——它决定了代码什么条件下执行、重复多少次、何时提前跳出。Python 在这方面的设计依然贯彻“简洁明了”的风格,关键词少、结构干净。


if 分支:条件判断

基本语法

if 条件1:
    代码块1
elif 条件2:
    代码块2
else:
    代码块3
  • elif 可以有多个,也可以没有;else 可选。
  • 条件可以是任何能转成布尔值的表达式:比较运算、逻辑组合、成员判断等。

实用要点

  • 不要写无意义的 == Trueif x == True: 不如直接写 if x:,除非确实需要严格区分 True1
  • 利用 innot inif name in ['admin', 'root']: 比多个 or 拼接更清晰。
  • 简洁的条件嵌套:可以用 and / or 连接,但注意括号保证优先级和可读性。

真实示例

score = 85
if score >= 90:
    grade = 'A'
elif score >= 80:
    grade = 'B'
elif score >= 70:
    grade = 'C'
else:
    grade = 'D'

for 循环:遍历可迭代对象

基本语法

for 变量 in 可迭代对象:
    代码块
  • 最常见的可迭代对象:字符串、列表、元组、字典、集合、range() 生成的序列、文件对象等。
  • 不需要手动维护索引,直接拿到元素。

常见场景与写法

  • 迭代列表for item in items:
  • 需要索引时用 enumeratefor idx, item in enumerate(items):
  • 同时迭代多个序列用 zipfor a, b in zip(list_a, list_b):
  • 遍历字典for key, value in d.items():
  • 遍历整数范围for i in range(10): 生成 0~9。

注意:不要在遍历一个列表的过程中直接增删其元素,这会导致跳过元素或下标越界。安全的做法是遍历副本(for item in list[:]:),或者用列表推导式生成新的列表。


while 循环:条件重复

基本语法

while 条件:
    代码块
  • 每次循环前检查条件是否为 True,是则执行,否则退出。
  • 常用于不确定执行次数、由某个状态驱动的场景。

实用要点

  • 避免死循环:务必在循环体内有改变条件的语句,或明确使用 break 跳出。
  • 计数器迭代不如 for i in range 安全,while 更适合“等待某条件成立”的循环(如监听、轮询)。

真实示例

# 读取用户输入直到输入 "quit"
command = ""
while command != "quit":
    command = input("Enter command: ")

breakcontinue:循环控制

  • break:立即终止包含它的最内层循环,程序继续执行循环后面的语句。
  • continue:跳过当前循环剩余代码,直接开始下一次迭代。

典型用法

# break:找到目标就停止查找
for num in [3, 7, 2, 9, 5]:
    if num == 2:
        print("找到了")
        break
else:
    print("未找到")   # 与 for/else 搭配使用

# continue:跳过偶数,只处理奇数
for num in range(10):
    if num % 2 == 0:
        continue
    print(num)

注意breakcontinue 只作用于当前层循环,嵌套循环中想跳出外层需要额外的标志变量或函数封装。


循环的 else 子句:不常知但实用

Python 的 forwhile 循环可以带一个 else 块。它的执行规则是:当循环正常结束(没有被 break 打断)时,执行 else

为什么这么设计
常用于“查找-未找到”的模式,避免了通过额外标志变量判断循环是否提前结束。

示例:检查列表中是否有偶数

numbers = [1, 3, 5, 7]
for n in numbers:
    if n % 2 == 0:
        print("存在偶数")
        break
else:
    print("列表中没有偶数")
  • 如果循环被 break 打断,else 不会执行;如果每次迭代都没遇到偶数而正常结束(或空序列),则触发 else
  • while 循环同理。

最佳实践:只有在这种“搜索/验证”场景才使用循环 else,滥用会让代码阅读者感到困惑。


这些控制结构构成了日常编码的绝大部分逻辑。掌握它们之后,就可以轻松实现数据筛选、循环处理、交互式脚本等常见任务。