7、控制流

书诚小驿2025/03/08Python知识库Python

一、条件语句

1、if-elif-else 语句

# 1. 基本用法
age = 20

if age < 18:
    print("未成年")
elif age >= 18 and age < 60:
    print("成年人")  # 输出: 成年人
else:
    print("老年人")

# 2. 条件表达式
score = 85
result = "优秀" if score >= 80 else "一般"
print(result)  # 输出: 优秀

# 3. 多个条件的简写
day = "Monday"
if day in ["Saturday", "Sunday"]:
    print("周末")
else:
    print("工作日")  # 输出: 工作日

二、循环语句

1、for 循环

# 1. 基本用法
for i in range(3):
    print(i, end=' ')  # 输出: 0 1 2

# 2. 遍历列表
fruits = ['apple', 'banana', 'orange']
for fruit in fruits:
    print(fruit, end=' ')  # 输出: apple banana orange

# 3. enumerate 获取索引和值
for index, fruit in enumerate(fruits):
    print(f"{index}: {fruit}")  # 输出: 0: apple\n1: banana\n2: orange

# 4. 字典遍历
user = {'name': 'Python', 'age': 30}
for key, value in user.items():
    print(f"{key}: {value}")  # 输出: name: Python\nage: 30

2、while 循环

# 1. 基本用法
count = 0
while count < 3:
    print(count, end=' ')  # 输出: 0 1 2
    count += 1

# 2. break 语句
num = 0
while True:
    if num >= 3:
        break
    print(num, end=' ')  # 输出: 0 1 2
    num += 1

# 3. continue 语句
for i in range(5):
    if i % 2 == 0:
        continue
    print(i, end=' ')  # 输出: 1 3

三、控制流的高级用法

1、列表推导式

# 1. 基本列表推导式
numbers = [x**2 for x in range(5)]
print(numbers)  # 输出: [0, 1, 4, 9, 16]

# 2. 带条件的列表推导式
even_squares = [x**2 for x in range(5) if x % 2 == 0]
print(even_squares)  # 输出: [0, 4, 16]

# 3. 嵌套循环的列表推导式
matrix = [(i, j) for i in range(2) for j in range(2)]
print(matrix)  # 输出: [(0, 0), (0, 1), (1, 0), (1, 1)]

2、生成器表达式

# 1. 生成器表达式
squares_gen = (x**2 for x in range(5))
for square in squares_gen:
    print(square, end=' ')  # 输出: 0 1 4 9 16

# 2. 生成器函数
def fibonacci(n):
    a, b = 0, 1
    for _ in range(n):
        yield a
        a, b = b, a + b

for num in fibonacci(5):
    print(num, end=' ')  # 输出: 0 1 1 2 3

四、实用技巧

1、循环中的else语句

# 1. for-else
def find_number(numbers, target):
    for num in numbers:
        if num == target:
            print(f"找到{target}")
            break
    else:  # 当循环正常结束时执行
        print(f"未找到{target}")

find_number([1, 2, 3], 4)  # 输出: 未找到4

# 2. while-else
count = 0
while count < 3:
    print(count, end=' ')
    count += 1
else:  # 当while条件为False时执行
    print("循环结束")
# 输出: 0 1 2 循环结束

2、嵌套循环的控制

# 1. 使用标志变量
def find_target(matrix, target):
    found = False
    for i in range(len(matrix)):
        for j in range(len(matrix[0])):
            if matrix[i][j] == target:
                found = True
                break
        if found:
            break
    return found

# 2. 使用函数返回
def find_position(matrix, target):
    for i in range(len(matrix)):
        for j in range(len(matrix[0])):
            if matrix[i][j] == target:
                return (i, j)
    return None

matrix = [[1, 2], [3, 4]]
print(find_position(matrix, 3))  # 输出: (1, 0)

3、条件表达式的链式比较

# 1. 链式比较
age = 25
if 18 <= age <= 60:
    print("工作年龄")  # 输出: 工作年龄

# 2. 多个条件的简洁写法
def check_status(status):
    return status in ['active', 'pending', 'suspended']

print(check_status('active'))  # 输出: True

4、控制流关键字

# 1. pass - 空语句,什么也不做
def empty_function():
    pass  # 函数体为空时使用

class EmptyClass:
    pass  # 类体为空时使用

# 2. continue - 跳过当前循环的剩余语句,直接进入下一次循环
for i in range(5):
    if i == 2:
        continue  # 跳过 i = 2 的情况
    print(i, end=' ')  # 输出: 0 1 3 4

# 3. break - 立即结束循环
for i in range(5):
    if i == 3:
        break  # 当 i = 3 时结束循环
    print(i, end=' ')  # 输出: 0 1 2

# 4. 嵌套循环中的使用
# continue
for i in range(3):
    for j in range(3):
        if i == j:
            continue  # 跳过 i = j 的情况
        print(f"({i},{j})", end=' ')  # 输出: (0,1) (0,2) (1,0) (1,2) (2,0) (2,1)

print('\n---')

# break
for i in range(3):
    for j in range(3):
        if i + j >= 3:
            break  # 内层循环结束,外层继续
        print(f"({i},{j})", end=' ')  # 输出: (0,0) (0,1) (0,2) (1,0) (1,1) (2,0)

# 5. 常见应用场景

# pass: 作为占位符
def process_data(data):
    if isinstance(data, str):
        # 字符串处理逻辑待实现
        pass
    elif isinstance(data, list):
        # 列表处理逻辑待实现
        pass

# continue: 过滤数据
def process_numbers(numbers):
    for num in numbers:
        if num < 0:
            continue  # 跳过负数
        print(num, end=' ')

process_numbers([-1, 0, 2, -3, 4])  # 输出: 0 2 4

# break: 查找元素
def find_first_even(numbers):
    for num in numbers:
        if num % 2 == 0:
            print(f"找到第一个偶数: {num}")
            break

find_first_even([1, 3, 4, 6, 8])  # 输出: 找到第一个偶数: 4