Skip to content

控制流:让条件与重复对应真实规则 ​

核心概念 ​

程序需要根据条件做出决策,或重复执行操作。Python 提供:

  • 条件分支:if、elif、else
  • 循环:while(条件循环)、for(遍历序列)
  • 控制语句:break(跳出循环)、continue(跳过当前迭代)、pass(占位符)

所有控制结构都依赖缩进定义代码块。

if 语句:条件分支 ​

基本形式:

python
age = 18
if age >= 18:
    print("成年人")
    print("可以投票")
print("这行总是执行")

输出:

text
成年人
可以投票
这行总是执行

关键点:

  • if 后的表达式求值为布尔值(真值测试)
  • 冒号 : 标记代码块开始
  • 缩进的语句属于 if 块
  • 回到原缩进层级,if 块结束

if-else:二选一 ​

python
x = 10
if x % 2 == 0:
    print("偶数")
else:
    print("奇数")

if-elif-else:多分支 ​

python
score = 85

if score >= 90:
    grade = "A"
elif score >= 80:
    grade = "B"
elif score >= 70:
    grade = "C"
elif score >= 60:
    grade = "D"
else:
    grade = "F"

print(f"成绩: {grade}")

输出:

text
成绩: B

elif 是 "else if" 的缩写。Python 从上到下检查条件,第一个为真的分支执行后,跳过其余分支。

嵌套 if ​

python
x = 15
if x > 0:
    print("正数")
    if x % 2 == 0:
        print("  且是偶数")
    else:
        print("  且是奇数")
else:
    print("非正数")

while 循环:条件重复 ​

只要条件为真,就重复执行代码块:

python
count = 0
while count < 5:
    print(f"count = {count}")
    count += 1
print("循环结束")

输出:

text
count = 0
count = 1
count = 2
count = 3
count = 4
循环结束

注意:count += 1 是 count = count + 1 的简写。

无限循环与 break ​

python
while True:
    response = input("输入 'quit' 退出: ")
    if response == 'quit':
        break
    print(f"你输入了: {response}")
print("已退出")

break 立即跳出最内层循环。没有 break,while True 会永远运行。

for 循环:遍历序列 ​

for 循环逐个取出序列中的元素:

python
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
    print(fruit)

输出:

text
apple
banana
cherry

range():生成数字序列 ​

range(start, stop, step) 生成整数序列(不包括 stop):

python
for i in range(5):
    print(i, end=" ")
# 输出: 0 1 2 3 4

range(5) 等价于 range(0, 5, 1)。

指定起点和步长:

python
for i in range(2, 10, 2):
    print(i, end=" ")
# 输出: 2 4 6 8

倒序:

python
for i in range(10, 0, -1):
    print(i, end=" ")
# 输出: 10 9 8 7 6 5 4 3 2 1

遍历索引与值 ​

使用 enumerate() 同时获取索引和值:

python
colors = ["red", "green", "blue"]
for index, color in enumerate(colors):
    print(f"{index}: {color}")

输出:

text
0: red
1: green
2: blue

break 和 continue ​

break:提前退出循环 ​

python
for n in range(2, 10):
    for x in range(2, n):
        if n % x == 0:
            print(f"{n} = {x} * {n//x}")
            break
    else:
        print(f"{n} 是质数")

输出:

text
2 是质数
3 是质数
4 = 2 * 2
5 是质数
6 = 2 * 3
7 是质数
8 = 2 * 4
9 = 3 * 3

continue:跳过当前迭代 ​

python
for num in range(10):
    if num % 2 == 0:
        continue  # 跳过偶数
    print(num, end=" ")
# 输出: 1 3 5 7 9

continue 跳到循环开头,开始下一次迭代。

else 子句:循环正常结束时执行 ​

for 和 while 可以有 else 子句,在循环正常结束(未被 break 中断)时执行:

python
for n in range(2, 5):
    if n == 10:
        break
else:
    print("循环未被 break 中断")
# 输出: 循环未被 break 中断

对比:

python
for n in range(2, 15):
    if n == 10:
        break
else:
    print("这行不会执行")
# 无输出(循环被 break 中断)

实用场景:搜索元素

python
target = 7
numbers = [1, 3, 5, 7, 9]

for num in numbers:
    if num == target:
        print(f"找到 {target}")
        break
else:
    print(f"{target} 不在列表中")
# 输出: 找到 7

pass:空操作占位符 ​

pass 什么都不做,用于语法需要语句但逻辑上无需操作的地方:

python
def not_implemented_yet():
    pass  # TODO: 稍后实现

for x in range(10):
    if x % 2 == 0:
        pass  # 偶数暂不处理
    else:
        print(x)

pass 也可用于空类或空条件分支。

比较链:Pythonic 风格 ​

Python 允许链式比较:

python
x = 5
if 0 < x < 10:
    print("x 在 0 到 10 之间")

等价于:

python
if 0 < x and x < 10:
    print("x 在 0 到 10 之间")

链式比较更简洁、可读性更强。

真值测试回顾 ​

条件表达式会转换为布尔值。假值(False)包括:

  • False、None
  • 数字零:0、0.0、0j
  • 空序列/集合:''、[]、{}、()、set()

其他值为真:

python
if []:
    print("不会执行")

if [1, 2, 3]:
    print("非空列表为真")
# 输出: 非空列表为真

练习 ​

  1. FizzBuzz:经典编程题。打印 1 到 100 的数字,但:

    • 3 的倍数打印 "Fizz"
    • 5 的倍数打印 "Buzz"
    • 既是 3 又是 5 的倍数打印 "FizzBuzz"
    python
    for i in range(1, 101):
        # 你的代码
  2. 质数判断:编写函数判断一个数是否为质数:

    python
    def is_prime(n):
        if n < 2:
            return False
        # 你的代码
    
    print(is_prime(17))  # True
    print(is_prime(18))  # False
  3. 求和到阈值:累加 1, 2, 3, ... 直到总和超过 100,打印最后加入的数和总和。

  4. 嵌套循环:用嵌套 for 打印乘法表(1x1 到 9x9):

    text
    1x1=1  1x2=2  1x3=3  ...
    2x1=2  2x2=4  2x3=6  ...
    ...
  5. else 子句:在列表 [2, 4, 6, 8, 10] 中搜索奇数,如果没找到打印 "所有数都是偶数"。

完成练习后,打开本章答案页核对。

下一步 ​

掌握了基本控制流,下一节深入运算符:布尔逻辑、短路求值、比较运算符的细节。

回到第一章概览 · 返回Python 学习路线

用心记录每一步成长