Skip to content

流程控制

流程控制语句用于控制程序的执行顺序。Python 提供了条件语句和循环语句来控制程序流程。

条件语句

if 语句

python
# 基本 if 语句
age = 18

if age >= 18:
    print("已成年")

# if-else 语句
score = 55

if score >= 60:
    print("及格")
else:
    print("不及格")

# if-elif-else 语句
grade = 85

if grade >= 90:
    print("优秀")
elif grade >= 80:
    print("良好")
elif grade >= 60:
    print("及格")
else:
    print("不及格")

# 嵌套 if 语句
age = 25
has_license = True

if age >= 18:
    if has_license:
        print("可以驾驶")
    else:
        print("需要考取驾照")
else:
    print("年龄不够")

条件表达式

python
# 三元运算符
age = 20
status = "成年" if age >= 18 else "未成年"
print(status)

# 嵌套条件表达式
score = 75
grade = "优秀" if score >= 90 else ("良好" if score >= 80 else "及格")
print(grade)

# 实际应用
x = 10
result = x if x > 0 else -x  # 绝对值
print(f"绝对值:{result}")

多条件判断

python
# 使用 and 连接多个条件
age = 25
has_id = True

if age >= 18 and has_id:
    print("允许进入")

# 使用 or 连接多个条件
role = "admin"

if role == "admin" or role == "superuser":
    print("有管理员权限")

# 使用 not
is_banned = False

if not is_banned:
    print("用户正常")

# 使用 in 检查多个值
day = "周六"

if day in ["周六", "周日"]:
    print("周末")
else:
    print("工作日")

循环语句

while 循环

python
# 基本 while 循环
count = 1
while count <= 5:
    print(f"计数:{count}")
    count += 1

# 计算 1 到 100 的和
total = 0
num = 1
while num <= 100:
    total += num
    num += 1
print(f"1到100的和:{total}")  # 5050

# while-else 结构
n = 10
while n > 0:
    print(n)
    n -= 1
else:
    print("倒计时结束")

# 无限循环(需要 break 退出)
# while True:
#     response = input("输入 quit 退出:")
#     if response == "quit":
#         break

for 循环

python
# 遍历列表
fruits = ["苹果", "香蕉", "橙子"]
for fruit in fruits:
    print(fruit)

# 遍历字符串
for char in "Python":
    print(char)

# 使用 range() 函数
# range(stop):0 到 stop-1
for i in range(5):
    print(i)  # 0, 1, 2, 3, 4

# range(start, stop):start 到 stop-1
for i in range(2, 6):
    print(i)  # 2, 3, 4, 5

# range(start, stop, step):指定步长
for i in range(0, 10, 2):
    print(i)  # 0, 2, 4, 6, 8

# 倒序
for i in range(5, 0, -1):
    print(i)  # 5, 4, 3, 2, 1

# 遍历字典
person = {"name": "张三", "age": 25, "city": "北京"}

# 遍历键
for key in person:
    print(key)

# 遍历值
for value in person.values():
    print(value)

# 遍历键值对
for key, value in person.items():
    print(f"{key}: {value}")

# for-else 结构
for i in range(5):
    print(i)
else:
    print("循环正常结束")

enumerate() 和 zip()

python
# enumerate():获取索引和值
fruits = ["苹果", "香蕉", "橙子"]
for index, fruit in enumerate(fruits):
    print(f"{index}: {fruit}")

# 指定起始索引
for index, fruit in enumerate(fruits, start=1):
    print(f"{index}: {fruit}")

# zip():并行遍历多个序列
names = ["张三", "李四", "王五"]
ages = [25, 30, 28]
cities = ["北京", "上海", "广州"]

for name, age, city in zip(names, ages, cities):
    print(f"{name}, {age}岁, 来自{city}")

# 创建字典
person_dict = dict(zip(names, ages))
print(person_dict)

# 长度不一致时以最短的为准
a = [1, 2, 3, 4, 5]
b = ['a', 'b', 'c']
for x, y in zip(a, b):
    print(x, y)  # 只输出 3 组

循环控制

break 语句

python
# break:跳出整个循环
for i in range(10):
    if i == 5:
        break
    print(i)  # 0, 1, 2, 3, 4

# 查找元素
numbers = [1, 3, 5, 7, 9, 2, 4]
target = 7
index = -1

for i, num in enumerate(numbers):
    if num == target:
        index = i
        break

print(f"找到 {target} 在索引 {index}")

# 嵌套循环中的 break
for i in range(3):
    for j in range(3):
        if i == 1 and j == 1:
            break  # 只跳出内层循环
        print(f"({i}, {j})")

# else 不会执行(因为 break 了)
for i in range(5):
    if i == 3:
        break
else:
    print("循环正常结束")  # 不会执行

continue 语句

python
# continue:跳过本次循环,继续下一次
for i in range(10):
    if i % 2 == 0:
        continue  # 跳过偶数
    print(i)  # 1, 3, 5, 7, 9

# 过滤特定值
numbers = [1, -2, 3, -4, 5, -6]
positive = []

for num in numbers:
    if num < 0:
        continue
    positive.append(num)

print(positive)  # [1, 3, 5]

# continue 在 while 中
count = 0
while count < 5:
    count += 1
    if count == 3:
        continue
    print(count)  # 1, 2, 4, 5

pass 语句

python
# pass:占位语句,什么都不做

# 空的 if 语句
if True:
    pass  # TODO: 稍后实现

# 空的函数
def my_function():
    pass  # TODO: 稍后实现

# 空的类
class MyClass:
    pass

# 空的循环
for i in range(10):
    pass  # 什么都不做

列表推导式

基本语法

python
# 基本形式:[表达式 for 变量 in 可迭代对象]
numbers = [1, 2, 3, 4, 5]
squares = [x ** 2 for x in numbers]
print(squares)  # [1, 4, 9, 16, 25]

# 带条件:[表达式 for 变量 in 可迭代对象 if 条件]
evens = [x for x in range(10) if x % 2 == 0]
print(evens)  # [0, 2, 4, 6, 8]

# 带条件表达式
result = ["偶数" if x % 2 == 0 else "奇数" for x in range(5)]
print(result)  # ['偶数', '奇数', '偶数', '奇数', '偶数']

嵌套循环

python
# 嵌套 for 循环
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened = [num for row in matrix for num in row]
print(flattened)  # [1, 2, 3, 4, 5, 6, 7, 8, 9]

# 等价于:
flattened = []
for row in matrix:
    for num in row:
        flattened.append(num)

# 生成坐标对
coords = [(x, y) for x in range(3) for y in range(3)]
print(coords)

# 带条件的嵌套循环
pairs = [(x, y) for x in range(3) for y in range(3) if x != y]
print(pairs)

字典和集合推导式

python
# 字典推导式
words = ["apple", "banana", "cherry"]
word_length = {word: len(word) for word in words}
print(word_length)  # {'apple': 5, 'banana': 6, 'cherry': 6}

# 交换键值
original = {"a": 1, "b": 2, "c": 3}
swapped = {v: k for k, v in original.items()}
print(swapped)  # {1: 'a', 2: 'b', 3: 'c'}

# 集合推导式
numbers = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
unique = {x for x in numbers}
print(unique)  # {1, 2, 3, 4}

# 带条件的集合推导式
evens = {x for x in range(10) if x % 2 == 0}
print(evens)  # {0, 2, 4, 6, 8}

生成器表达式

python
# 生成器表达式:使用圆括号
numbers = (x ** 2 for x in range(10))
print(numbers)  # <generator object>

# 生成器是惰性求值的
for num in numbers:
    print(num, end=" ")  # 0 1 4 9 16 25 36 49 64 81

# 使用 sum() 等函数
total = sum(x for x in range(100))
print(f"\n1到99的和:{total}")

# 内存效率对比
import sys

# 列表推导式:立即生成所有元素
list_comp = [x for x in range(10000)]
print(f"列表占用内存:{sys.getsizeof(list_comp)} 字节")

# 生成器表达式:惰性生成
gen_exp = (x for x in range(10000))
print(f"生成器占用内存:{sys.getsizeof(gen_exp)} 字节")

实际应用示例

打印图形

python
# 打印矩形
print("矩形:")
for i in range(4):
    for j in range(6):
        print("*", end=" ")
    print()

# 打印直角三角形
print("\n直角三角形:")
for i in range(1, 6):
    for j in range(i):
        print("*", end=" ")
    print()

# 打印等腰三角形
print("\n等腰三角形:")
n = 5
for i in range(1, n + 1):
    # 打印空格
    for j in range(n - i):
        print(" ", end=" ")
    # 打印星号
    for k in range(2 * i - 1):
        print("*", end=" ")
    print()

# 打印九九乘法表
print("\n九九乘法表:")
for i in range(1, 10):
    for j in range(1, i + 1):
        print(f"{j}×{i}={i*j}", end="\t")
    print()

查找和排序

python
# 线性查找
def linear_search(arr, target):
    for i, item in enumerate(arr):
        if item == target:
            return i
    return -1

numbers = [64, 34, 25, 12, 22, 11, 90]
print(f"查找 22 的索引:{linear_search(numbers, 22)}")

# 冒泡排序
def bubble_sort(arr):
    arr = arr.copy()  # 不修改原数组
    n = len(arr)
    for i in range(n - 1):
        for j in range(n - 1 - i):
            if arr[j] > arr[j + 1]:
                arr[j], arr[j + 1] = arr[j + 1], arr[j]
    return arr

print(f"排序后:{bubble_sort(numbers)}")

# 找出列表中的最大值和最小值
def find_max_min(arr):
    if not arr:
        return None, None
    
    max_val = min_val = arr[0]
    for num in arr[1:]:
        if num > max_val:
            max_val = num
        if num < min_val:
            min_val = num
    return max_val, min_val

maximum, minimum = find_max_min(numbers)
print(f"最大值:{maximum},最小值:{minimum}")

小结

本章我们学习了:

  • 条件语句:if、if-else、if-elif-else
  • 循环语句:while、for、range()
  • 循环控制:break、continue、pass
  • 推导式:列表推导式、字典推导式、集合推导式、生成器表达式
  • 辅助函数:enumerate()、zip()

下一章,我们将学习 函数,了解 Python 函数的定义和使用。