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 使复杂条件更清晰
  • 注意缩进和循环终止条件

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

相关推荐
笨鸟先飞,勤能补拙4 小时前
AI 赋能网络安全:技术全景、成熟度评估与实战案例
人工智能·python·安全·web安全·网络安全·sqlite·github
长和信泰光伏储能5 小时前
京津冀光伏发电:绿色能源的未来之路
python·能源
浦信仿真大讲堂5 小时前
从重复操作到自动化闭环:如何让 CST 与 Python 真正协同起来
python·自动化·cst·仿真软件·达索软件
Gu Gu Study5 小时前
ScoutLoop开放域深度研究引擎(agent的初步设计想法)
人工智能·python
卷无止境6 小时前
写代码这件事,到底该讲究点什么?
后端·python
卷无止境6 小时前
循环复杂度到底在算什么,Python 代码怎么才能写得让人一看就懂
后端·python
lpfasd1236 小时前
MediaCrawler 项目深度分析
chrome·python·chrome devtools
Dxy12393102167 小时前
Python项目打包成EXE完整教程(PyInstaller实战避坑)
开发语言·python
bamb007 小时前
一个项目带你入门AI应用开发01
python
0566468 小时前
Python康复训练——常用标准库
开发语言·python·学习