Python 流程控制语句

Python 流程控制语句

目录

  • [条件语句 if](#条件语句 if "#%E6%9D%A1%E4%BB%B6%E8%AF%AD%E5%8F%A5-if")
  • [循环语句 for](#循环语句 for "#%E5%BE%AA%E7%8E%AF%E8%AF%AD%E5%8F%A5-for")
  • [循环语句 while](#循环语句 while "#%E5%BE%AA%E7%8E%AF%E8%AF%AD%E5%8F%A5-while")
  • 跳转语句
  • [match-case 语句](#match-case 语句 "#match-case-%E8%AF%AD%E5%8F%A5")
  • 综合实战

条件语句 if

基本语法

python 复制代码
if 条件:
    # 条件为 True 时执行的代码
    pass

if-else 结构

python 复制代码
age = 20

if age >= 18:
    print("成年人")
else:
    print("未成年人")

if-elif-else 结构

python 复制代码
score = 85

if score >= 90:
    grade = "优秀"
elif score >= 80:
    grade = "良好"
elif score >= 70:
    grade = "中等"
elif score >= 60:
    grade = "及格"
else:
    grade = "不及格"

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

示例代码

python 复制代码
# 判断正负数
num = int(input("请输入一个整数: "))

if num > 0:
    print(f"{num} 是正数")
elif num < 0:
    print(f"{num} 是负数")
else:
    print("输入的是零")

嵌套 if 语句

python 复制代码
age = 25
has_id = True

if age >= 18:
    if has_id:
        print("可以进入")
    else:
        print("请出示身份证")
else:
    print("未成年人禁止入内")

三元表达式(条件表达式)

python 复制代码
# 传统写法
age = 20
if age >= 18:
    status = "成年"
else:
    status = "未成年"

# 三元表达式(推荐)
status = "成年" if age >= 18 else "未成年"
print(status)

# 更多例子
x = 10
y = 20
max_value = x if x > y else y
print(f"较大值: {max_value}")

# 嵌套三元表达式(不推荐,降低可读性)
score = 85
result = "优秀" if score >= 90 else ("良好" if score >= 80 else "一般")

布尔值的真值测试

python 复制代码
# 以下值被视为 False
print(bool(False))      # False
print(bool(None))       # False
print(bool(0))          # False
print(bool(0.0))        # False
print(bool(""))         # False(空字符串)
print(bool([]))         # False(空列表)
print(bool(()))         # False(空元组)
print(bool({}))         # False(空字典)
print(bool(set()))      # False(空集合)

# 其他值都为 True
print(bool(1))          # True
print(bool("hello"))    # True
print(bool([1, 2]))     # True

实用技巧

python 复制代码
# 检查变量是否有值
name = ""
if name:
    print(f"你好, {name}")
else:
    print("名字不能为空")

# 检查列表是否为空
items = []
if items:
    print(f"列表有 {len(items)} 个元素")
else:
    print("列表为空")

# 简化布尔判断
is_valid = True

# ❌ 不推荐
if is_valid == True:
    pass

# ✅ 推荐
if is_valid:
    pass

# ❌ 不推荐
if is_valid == False:
    pass

# ✅ 推荐
if not is_valid:
    pass

循环语句 for

基本语法

python 复制代码
for 变量 in 可迭代对象:
    # 循环体
    pass

遍历列表

python 复制代码
fruits = ["苹果", "香蕉", "橙子", "葡萄"]

for fruit in fruits:
    print(f"我喜欢吃{fruit}")

# 输出:
# 我喜欢吃苹果
# 我喜欢吃香蕉
# 我喜欢吃橙子
# 我喜欢吃葡萄

遍历字符串

python 复制代码
text = "Python"

for char in text:
    print(char, end=" ")

# 输出: P y t h o n

range() 函数

python 复制代码
# range(stop) - 从 0 到 stop-1
for i in range(5):
    print(i, end=" ")
# 输出: 0 1 2 3 4

# range(start, stop) - 从 start 到 stop-1
for i in range(2, 6):
    print(i, end=" ")
# 输出: 2 3 4 5

# range(start, stop, step) - 指定步长
for i in range(0, 10, 2):
    print(i, end=" ")
# 输出: 0 2 4 6 8

# 倒序遍历
for i in range(5, 0, -1):
    print(i, end=" ")
# 输出: 5 4 3 2 1

遍历字典

python 复制代码
student = {
    "name": "张三",
    "age": 20,
    "major": "计算机科学"
}

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

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

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

enumerate() - 获取索引和值

python 复制代码
fruits = ["苹果", "香蕉", "橙子"]

for index, fruit in enumerate(fruits):
    print(f"第{index + 1}个: {fruit}")

# 输出:
# 第1个: 苹果
# 第2个: 香蕉
# 第3个: 橙子

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

zip() - 并行遍历

python 复制代码
names = ["张三", "李四", "王五"]
ages = [20, 25, 30]
cities = ["北京", "上海", "广州"]

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

# 输出:
# 张三, 20岁, 来自北京
# 李四, 25岁, 来自上海
# 王五, 30岁, 来自广州

列表推导式

python 复制代码
# 传统方式
squares = []
for i in range(1, 6):
    squares.append(i ** 2)
print(squares)  # [1, 4, 9, 16, 25]

# 列表推导式(推荐)
squares = [i ** 2 for i in range(1, 6)]
print(squares)  # [1, 4, 9, 16, 25]

# 带条件的列表推导式
even_squares = [i ** 2 for i in range(1, 11) if i % 2 == 0]
print(even_squares)  # [4, 16, 36, 64, 100]

# 嵌套列表推导式
matrix = [[i * j for j in range(1, 4)] for i in range(1, 4)]
print(matrix)
# [[1, 2, 3], [2, 4, 6], [3, 6, 9]]

其他推导式

python 复制代码
# 集合推导式
squares_set = {x ** 2 for x in range(-5, 6)}
print(squares_set)  # {0, 1, 4, 9, 16, 25}

# 字典推导式
square_dict = {x: x ** 2 for x in range(1, 6)}
print(square_dict)  # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

# 生成器表达式(节省内存)
square_gen = (x ** 2 for x in range(1, 1000000))
print(sum(square_gen))  # 不会创建完整的列表

循环语句 while

基本语法

python 复制代码
while 条件:
    # 循环体
    pass

基本示例

python 复制代码
# 计数循环
count = 1
while count <= 5:
    print(count)
    count += 1

# 输出: 1 2 3 4 5

用户输入验证

python 复制代码
# 持续询问直到输入有效数据
while True:
    age = input("请输入年龄: ")
    if age.isdigit():
        age = int(age)
        if 0 < age < 150:
            break
    print("请输入有效的年龄!")

print(f"您的年龄是: {age}")

累加求和

python 复制代码
# 计算 1 到 100 的和
total = 0
num = 1

while num <= 100:
    total += num
    num += 1

print(f"1 到 100 的和: {total}")  # 5050

猜数字游戏

python 复制代码
import random

secret_number = random.randint(1, 100)
attempts = 0
max_attempts = 7

print("=== 猜数字游戏 ===")
print(f"我想了一个 1-100 之间的数字,你有 {max_attempts} 次机会")

while attempts < max_attempts:
    guess = int(input(f"\n第 {attempts + 1} 次猜测: "))
    attempts += 1

    if guess == secret_number:
        print(f"🎉 恭喜!你在第 {attempts} 次猜对了!")
        break
    elif guess < secret_number:
        print("太小了!")
    else:
        print("太大了!")

    remaining = max_attempts - attempts
    if remaining > 0:
        print(f"还剩 {remaining} 次机会")
else:
    print(f"\n😢 游戏结束!正确答案是: {secret_number}")

while-else 结构

python 复制代码
# while 正常结束时执行 else
count = 1
while count <= 3:
    print(count)
    count += 1
else:
    print("循环正常结束")

# 如果循环被 break 中断,else 不会执行
count = 1
while count <= 5:
    if count == 3:
        break
    print(count)
    count += 1
else:
    print("这行不会打印")

跳转语句

break - 跳出循环

python 复制代码
# 找到第一个偶数就停止
for i in range(1, 11):
    if i % 2 == 0:
        print(f"找到第一个偶数: {i}")
        break

# 输出: 找到第一个偶数: 2

continue - 跳过本次循环

python 复制代码
# 打印 1-10 的奇数
for i in range(1, 11):
    if i % 2 == 0:
        continue  # 跳过偶数
    print(i, end=" ")

# 输出: 1 3 5 7 9

pass - 占位符

python 复制代码
# TODO: 稍后实现
def future_function():
    pass  # 占位,避免语法错误

# 在条件语句中
age = 20
if age >= 18:
    pass  # 暂时不处理
else:
    print("未成年人")

return - 从函数返回

python 复制代码
def find_first_even(numbers):
    """找到列表中的第一个偶数"""
    for num in numbers:
        if num % 2 == 0:
            return num  # 立即返回,结束函数
    return None  # 没有找到

result = find_first_even([1, 3, 5, 8, 9])
print(result)  # 8

对比示例

python 复制代码
# break vs continue vs pass
print("break 示例:")
for i in range(1, 6):
    if i == 3:
        break
    print(i, end=" ")
# 输出: 1 2

print("\n\ncontinue 示例:")
for i in range(1, 6):
    if i == 3:
        continue
    print(i, end=" ")
# 输出: 1 2 4 5

print("\n\npass 示例:")
for i in range(1, 6):
    if i == 3:
        pass  # 什么都不做,继续执行
    print(i, end=" ")
# 输出: 1 2 3 4 5

match-case 语句

Python 3.10+ 新增的结构化模式匹配。

基本语法

python 复制代码
match 值:
    case 模式1:
        # 匹配模式1时执行
        pass
    case 模式2:
        # 匹配模式2时执行
        pass
    case _:
        # 默认情况(类似 default)
        pass

简单匹配

python 复制代码
day = 3

match day:
    case 1:
        print("星期一")
    case 2:
        print("星期二")
    case 3:
        print("星期三")
    case 4:
        print("星期四")
    case 5:
        print("星期五")
    case 6 | 7:  # 多个值
        print("周末")
    case _:
        print("无效的日期")

匹配不同类型

python 复制代码
def describe(value):
    match value:
        case int():
            return f"整数: {value}"
        case float():
            return f"浮点数: {value}"
        case str():
            return f"字符串: '{value}'"
        case list():
            return f"列表,长度: {len(value)}"
        case dict():
            return f"字典,键数: {len(value)}"
        case _:
            return "未知类型"

print(describe(42))           # 整数: 42
print(describe(3.14))         # 浮点数: 3.14
print(describe("hello"))      # 字符串: 'hello'
print(describe([1, 2, 3]))    # 列表,长度: 3

解构匹配

python 复制代码
# 匹配列表
def process_command(command):
    match command:
        case ["quit"]:
            return "退出程序"
        case ["help"]:
            return "显示帮助信息"
        case ["load", filename]:
            return f"加载文件: {filename}"
        case ["save", filename]:
            return f"保存文件: {filename}"
        case ["move", x, y]:
            return f"移动到 ({x}, {y})"
        case _:
            return "未知命令"

print(process_command(["quit"]))              # 退出程序
print(process_command(["load", "data.txt"]))  # 加载文件: data.txt
print(process_command(["move", 10, 20]))      # 移动到 (10, 20)

守卫条件

python 复制代码
def classify_number(num):
    match num:
        case n if n > 0:
            return "正数"
        case n if n < 0:
            return "负数"
        case 0:
            return "零"
        case _:
            return "无效值"

print(classify_number(5))    # 正数
print(classify_number(-3))   # 负数
print(classify_number(0))    # 零

字典匹配

python 复制代码
def process_event(event):
    match event:
        case {"type": "click", "x": x, "y": y}:
            return f"点击事件: ({x}, {y})"
        case {"type": "keypress", "key": key}:
            return f"按键事件: {key}"
        case {"type": "resize", "width": w, "height": h}:
            return f"窗口调整: {w}x{h}"
        case _:
            return "未知事件"

print(process_event({"type": "click", "x": 100, "y": 200}))
# 点击事件: (100, 200)

print(process_event({"type": "keypress", "key": "Enter"}))
# 按键事件: Enter

综合实战

实战1: 九九乘法表

python 复制代码
print("=== 九九乘法表 ===\n")

for i in range(1, 10):
    for j in range(1, i + 1):
        print(f"{j}×{i}={i*j:2d}", end="  ")
    print()  # 换行

# 输出:
# 1×1= 1
# 1×2= 2  2×2= 4
# 1×3= 3  2×3= 6  3×3= 9
# ...

实战2: ATM 模拟系统

python 复制代码
import sys

# 初始账户信息
account = {
    "balance": 10000,
    "password": "123456",
    "transactions": []
}

def show_menu():
    print("\n" + "=" * 40)
    print("       ATM 自动取款机")
    print("=" * 40)
    print("1. 查询余额")
    print("2. 存款")
    print("3. 取款")
    print("4. 转账")
    print("5. 交易记录")
    print("6. 修改密码")
    print("7. 退出")
    print("=" * 40)

def check_balance():
    print(f"\n当前余额: ¥{account['balance']:.2f}")

def deposit():
    while True:
        try:
            amount = float(input("\n请输入存款金额: "))
            if amount <= 0:
                print("金额必须大于0")
                continue
            account["balance"] += amount
            account["transactions"].append(f"存款: +¥{amount:.2f}")
            print(f"存款成功!当前余额: ¥{account['balance']:.2f}")
            break
        except ValueError:
            print("请输入有效的金额")

def withdraw():
    while True:
        try:
            amount = float(input("\n请输入取款金额: "))
            if amount <= 0:
                print("金额必须大于0")
                continue
            if amount > account["balance"]:
                print(f"余额不足!当前余额: ¥{account['balance']:.2f}")
                continue
            account["balance"] -= amount
            account["transactions"].append(f"取款: -¥{amount:.2f}")
            print(f"取款成功!当前余额: ¥{account['balance']:.2f}")
            break
        except ValueError:
            print("请输入有效的金额")

def transfer():
    while True:
        target = input("\n请输入收款人账号: ")
        if not target:
            print("账号不能为空")
            continue
        break

    while True:
        try:
            amount = float(input("请输入转账金额: "))
            if amount <= 0:
                print("金额必须大于0")
                continue
            if amount > account["balance"]:
                print(f"余额不足!当前余额: ¥{account['balance']:.2f}")
                continue
            account["balance"] -= amount
            account["transactions"].append(f"转账给{target}: -¥{amount:.2f}")
            print(f"转账成功!当前余额: ¥{account['balance']:.2f}")
            break
        except ValueError:
            print("请输入有效的金额")

def show_transactions():
    if not account["transactions"]:
        print("\n暂无交易记录")
    else:
        print("\n=== 交易记录 ===")
        for i, trans in enumerate(account["transactions"], 1):
            print(f"{i}. {trans}")

def change_password():
    old_pwd = input("\n请输入原密码: ")
    if old_pwd != account["password"]:
        print("原密码错误")
        return

    while True:
        new_pwd = input("请输入新密码: ")
        if len(new_pwd) < 6:
            print("密码长度至少6位")
            continue
        confirm_pwd = input("请确认新密码: ")
        if new_pwd != confirm_pwd:
            print("两次输入的密码不一致")
            continue
        account["password"] = new_pwd
        print("密码修改成功!")
        break

# 登录
print("欢迎使用 ATM 系统")
max_attempts = 3
attempts = 0

while attempts < max_attempts:
    password = input("请输入密码: ")
    if password == account["password"]:
        print("登录成功!")
        break
    attempts += 1
    remaining = max_attempts - attempts
    if remaining > 0:
        print(f"密码错误!还剩 {remaining} 次机会")
else:
    print("密码错误次数过多,卡片已锁定")
    sys.exit()

# 主循环
while True:
    show_menu()
    choice = input("请选择操作: ")

    match choice:
        case "1":
            check_balance()
        case "2":
            deposit()
        case "3":
            withdraw()
        case "4":
            transfer()
        case "5":
            show_transactions()
        case "6":
            change_password()
        case "7":
            print("\n感谢使用,再见!")
            break
        case _:
            print("无效选择,请重新输入")

实战3: 学生成绩管理系统

python 复制代码
students = []

def add_student():
    """添加学生"""
    print("\n=== 添加学生 ===")
    name = input("姓名: ")

    while True:
        try:
            score = float(input("成绩: "))
            if 0 <= score <= 100:
                break
            print("成绩必须在 0-100 之间")
        except ValueError:
            print("请输入有效的数字")

    student = {"name": name, "score": score}
    students.append(student)
    print(f"学生 {name} 添加成功!")

def show_all_students():
    """显示所有学生"""
    if not students:
        print("\n暂无学生数据")
        return

    print("\n=== 学生列表 ===")
    print(f"{'序号':<6}{'姓名':<10}{'成绩':<10}{'等级':<10}")
    print("-" * 40)

    for i, student in enumerate(students, 1):
        score = student["score"]
        if score >= 90:
            grade = "优秀"
        elif score >= 80:
            grade = "良好"
        elif score >= 70:
            grade = "中等"
        elif score >= 60:
            grade = "及格"
        else:
            grade = "不及格"

        print(f"{i:<6}{student['name']:<10}{score:<10.1f}{grade:<10}")

    # 统计信息
    scores = [s["score"] for s in students]
    avg_score = sum(scores) / len(scores)
    max_score = max(scores)
    min_score = min(scores)

    print("-" * 40)
    print(f"平均分: {avg_score:.1f}")
    print(f"最高分: {max_score:.1f}")
    print(f"最低分: {min_score:.1f}")
    print(f"总人数: {len(students)}")

def search_student():
    """搜索学生"""
    name = input("\n请输入要搜索的姓名: ")
    found = [s for s in students if name in s["name"]]

    if not found:
        print(f"未找到包含 '{name}' 的学生")
    else:
        print(f"\n找到 {len(found)} 个结果:")
        for student in found:
            print(f"  {student['name']}: {student['score']}分")

def delete_student():
    """删除学生"""
    name = input("\n请输入要删除的学生姓名: ")
    original_count = len(students)
    students[:] = [s for s in students if s["name"] != name]

    if len(students) < original_count:
        print(f"已删除学生: {name}")
    else:
        print(f"未找到学生: {name}")

def sort_students():
    """排序学生"""
    print("\n1. 按成绩升序")
    print("2. 按成绩降序")
    print("3. 按姓名排序")

    choice = input("请选择: ")

    match choice:
        case "1":
            students.sort(key=lambda s: s["score"])
            print("已按成绩升序排列")
        case "2":
            students.sort(key=lambda s: s["score"], reverse=True)
            print("已按成绩降序排列")
        case "3":
            students.sort(key=lambda s: s["name"])
            print("已按姓名排序")
        case _:
            print("无效选择")

def main():
    """主函数"""
    while True:
        print("\n" + "=" * 40)
        print("    学生成绩管理系统")
        print("=" * 40)
        print("1. 添加学生")
        print("2. 查看所有学生")
        print("3. 搜索学生")
        print("4. 删除学生")
        print("5. 排序")
        print("6. 退出")
        print("=" * 40)

        choice = input("请选择操作: ")

        match choice:
            case "1":
                add_student()
            case "2":
                show_all_students()
            case "3":
                search_student()
            case "4":
                delete_student()
            case "5":
                sort_students()
            case "6":
                print("\n感谢使用,再见!")
                break
            case _:
                print("无效选择,请重新输入")

if __name__ == "__main__":
    main()

实战4: 文本冒险游戏

python 复制代码
import random

def show_intro():
    """显示游戏介绍"""
    print("\n" + "=" * 50)
    print("       神秘森林探险")
    print("=" * 50)
    print("你迷失在一片神秘的森林中...")
    print("你需要找到出路并收集宝藏!")
    print("=" * 50)

def create_player():
    """创建玩家"""
    player = {
        "health": 100,
        "attack": 10,
        "gold": 0,
        "inventory": [],
        "position": "入口"
    }
    return player

def show_status(player):
    """显示玩家状态"""
    print(f"\n生命值: {player['health']}")
    print(f"攻击力: {player['attack']}")
    print(f"金币: {player['gold']}")
    print(f"位置: {player['position']}")
    if player['inventory']:
        print(f"背包: {', '.join(player['inventory'])}")
    else:
        print("背包: 空")

def encounter_monster(player):
    """遭遇怪物"""
    monsters = [
        {"name": "哥布林", "health": 30, "attack": 5, "gold": 10},
        {"name": "野狼", "health": 40, "attack": 8, "gold": 15},
        {"name": "巨魔", "health": 60, "attack": 12, "gold": 25},
    ]

    monster = random.choice(monsters)
    print(f"\n⚠️  遭遇了 {monster['name']}!")

    while monster["health"] > 0 and player["health"] > 0:
        print(f"\n{monster['name']} 生命值: {monster['health']}")
        print("1. 攻击")
        print("2. 逃跑")

        choice = input("选择行动: ")

        if choice == "1":
            # 玩家攻击
            damage = player["attack"] + random.randint(-2, 2)
            monster["health"] -= damage
            print(f"你对 {monster['name']} 造成了 {damage} 点伤害")

            if monster["health"] <= 0:
                print(f"🎉 你击败了 {monster['name']}!")
                player["gold"] += monster["gold"]
                print(f"获得 {monster['gold']} 金币")

                # 随机掉落物品
                if random.random() < 0.3:
                    items = ["生命药水", "攻击药水", "魔法卷轴"]
                    item = random.choice(items)
                    player["inventory"].append(item)
                    print(f"获得物品: {item}")
                break

            # 怪物反击
            monster_damage = monster["attack"] + random.randint(-1, 1)
            player["health"] -= monster_damage
            print(f"{monster['name']} 对你造成了 {monster_damage} 点伤害")

        elif choice == "2":
            if random.random() < 0.5:
                print("逃跑成功!")
                return
            else:
                print("逃跑失败!")
                monster_damage = monster["attack"]
                player["health"] -= monster_damage
                print(f"{monster['name']} 对你造成了 {monster_damage} 点伤害")
        else:
            print("无效选择")

    if player["health"] <= 0:
        print("\n💀 你被击败了... 游戏结束")
        return False

    return True

def find_treasure(player):
    """发现宝藏"""
    treasures = [
        {"name": "金币袋", "gold": 50},
        {"name": "宝石", "gold": 100},
        {"name": "古老金币", "gold": 200},
    ]

    treasure = random.choice(treasures)
    print(f"\n💎 你发现了 {treasure['name']}!")
    player["gold"] += treasure["gold"]
    print(f"获得 {treasure['gold']} 金币")

def rest(player):
    """休息恢复"""
    heal = random.randint(10, 20)
    player["health"] = min(100, player["health"] + heal)
    print(f"\n你休息了一会儿,恢复了 {heal} 点生命值")
    print(f"当前生命值: {player['health']}")

def explore(player):
    """探索"""
    locations = ["密林深处", "古老遗迹", "神秘洞穴", "清澈溪流", "高山之巅"]
    events = ["monster", "treasure", "nothing", "rest"]

    location = random.choice(locations)
    player["position"] = location
    print(f"\n你来到了: {location}")

    event = random.choice(events)

    match event:
        case "monster":
            return encounter_monster(player)
        case "treasure":
            find_treasure(player)
        case "rest":
            rest(player)
        case _:
            print("这里什么都没有...")

    return True

def main():
    """主游戏循环"""
    show_intro()
    player = create_player()

    while player["health"] > 0:
        show_status(player)

        print("\n=== 行动选择 ===")
        print("1. 探索")
        print("2. 查看状态")
        print("3. 退出游戏")

        choice = input("请选择: ")

        match choice:
            case "1":
                if not explore(player):
                    break
            case "2":
                show_status(player)
            case "3":
                print("\n感谢游玩!")
                break
            case _:
                print("无效选择")

        # 检查胜利条件
        if player["gold"] >= 500:
            print("\n🎊 恭喜!你收集了足够的宝藏,成功逃离森林!")
            print(f"最终得分: {player['gold']} 金币")
            break

    if player["health"] <= 0:
        print("\n游戏结束")
    else:
        print(f"\n最终状态 - 金币: {player['gold']}, 生命值: {player['health']}")

if __name__ == "__main__":
    main()

常见错误与注意事项

1. 缩进错误

python 复制代码
# ❌ 错误:缩进不一致
if True:
print("hello")  # IndentationError

# ✅ 正确:统一使用 4 个空格
if True:
    print("hello")

2. 无限循环

python 复制代码
# ❌ 危险:忘记更新循环变量
# count = 1
# while count <= 5:
#     print(count)
#     # 忘记 count += 1

# ✅ 正确:确保循环会终止
count = 1
while count <= 5:
    print(count)
    count += 1

3. for 循环中修改列表

python 复制代码
# ❌ 危险:遍历时修改列表
numbers = [1, 2, 3, 4, 5]
for num in numbers:
    if num % 2 == 0:
        numbers.remove(num)  # 可能导致跳过元素
print(numbers)  # [1, 3, 5] 或 [1, 3, 4, 5](不确定)

# ✅ 正确:创建新列表
numbers = [1, 2, 3, 4, 5]
numbers = [num for num in numbers if num % 2 != 0]
print(numbers)  # [1, 3, 5]

# ✅ 或者反向遍历
numbers = [1, 2, 3, 4, 5]
for num in reversed(numbers):
    if num % 2 == 0:
        numbers.remove(num)

4. else 子句的理解

python 复制代码
# for/while 的 else 在循环正常结束时执行(未被 break 中断)
for i in range(5):
    if i == 10:
        break
else:
    print("循环正常结束")  # 会打印

# 常用于搜索场景
numbers = [1, 3, 5, 7, 9]
search = 4

for num in numbers:
    if num == search:
        print(f"找到 {search}")
        break
else:
    print(f"{search} 不在列表中")  # 会打印

5. range() 的范围

python 复制代码
# range(5) 生成 0, 1, 2, 3, 4(不包含 5)
for i in range(5):
    print(i, end=" ")
# 输出: 0 1 2 3 4

# 如果要包含 5,使用 range(6)
for i in range(6):
    print(i, end=" ")
# 输出: 0 1 2 3 4 5

小结

语句类型 用途 关键字
条件语句 根据条件执行不同代码 if, elif, else
for 循环 遍历可迭代对象 for, in
while 循环 条件满足时重复执行 while
跳转语句 控制循环流程 break, continue, pass
模式匹配 结构化模式匹配 match, case

核心要点

  • if-elif-else 用于多分支选择
  • for 适合已知次数的循环
  • while 适合未知次数的循环
  • break 跳出循环,continue 跳过本次
  • 列表推导式简洁高效
  • match-case 使复杂条件更清晰
  • 注意缩进和循环终止条件

掌握流程控制是编写复杂程序的基础!

相关推荐
7年前端辞职转AI4 小时前
Python 运算符
python·编程语言
zhangzeyuaaa4 小时前
Python 异常机制深度剖析
开发语言·python
Ulyanov4 小时前
打造现代化雷达电子对抗仿真界面 第一篇:tkinter/ttk 现代化高级技巧与复杂布局系统设计
python·信息可视化·系统仿真·雷达电子对抗
wgzrmlrm745 小时前
SQL实现按用户偏好进行分组汇总_自定义聚合规则
jvm·数据库·python
7年前端辞职转AI5 小时前
Python 变量
python·编程语言
7年前端辞职转AI5 小时前
Python 数据类型
python·编程语言
冰块的旅行5 小时前
python环境导出
python
曲幽5 小时前
我用fastapi-scaff搭了个项目,两天工期缩到两小时,老板以为我开挂了
python·api·fastapi·web·celery·cli·db·alembic·fastapi-scaff
半点闲5 小时前
入门 SQLAlchemy 教程:从 0 到 1 创建数据库
数据库·python·sqlite·sqlalchemy