Python for-else 循环

Python3 循环语句 Python3 循环语句


在 Python 中,for 循环可以带有一个 else 子句,这是 Python 特有的语法,与大多数其他编程语言不同。

for-else 结构表示:当循环正常完成(即没有被 break 中断)时,执行 else 中的代码。

单词释义else 意为"其他",在这里表示"循环正常结束后的处理"。


基本语法与参数

语法格式

for 变量 in 可迭代对象:
    循环体
else:
    循环正常结束时的处理

执行逻辑

  • 正常完成: 循环遍历完所有元素后,执行 else 子句。
  • 被 break 终止: 如果循环被 break 中断,则不执行 else 子句。
  • 异常终止: 如果循环中发生异常,else 也不执行。

实例

示例 1:基础用法 - 搜索失败时执行

实例

# 查找列表中的偶数,找到则打印,没找到则执行 else
numbers = [1, 3, 5, 7, 9]

for num in numbers:
    if num % 2 == 0:
        print(f"找到偶数: {num}")
        break
else:
    print("未找到偶数")

print("---")

# 列表中有偶数的情况
numbers = [1, 3, 6, 7, 9]
for num in numbers:
    if num % 2 == 0:
        print(f"找到偶数: {num}")
        break
else:
    print("未找到偶数")

运行结果预期:

未找到偶数
---
找到偶数: 6

代码解析:

  1. 第一个例子:遍历完整个列表(没有执行 break),执行 else。
  2. 第二个例子:找到偶数后执行 break,跳过 else。

示例 2:常见应用 - 查找质数

实例

# 判断一个数是否为质数
def is_prime(n):
    if n <= 1:
        return False

    for i in range(2, int(n ** 0.5) + 1):
        if n % i == 0:
            print(f"{n} 不是质数,能被 {i} 整除")
            return False
    else:
        # 循环正常结束,说明没有找到因数
        print(f"{n} 是质数")
        return True

# 测试
is_prime(7)   # 输出: 7 是质数
is_prime(10)  # 输出: 10 不是质数,能被 2 整除

运行结果预期:

7 是质数
10 不是质数,能被 2 整除

这是 for-else 最经典的用法之一:搜索遍历完成后,如果没找到目标执行 else。

示例 3:与 break 对比

实例

# 场景:遍历列表查找特定元素
fruits = ["apple", "banana", "orange", "grape"]

# 使用 for-else
print("=== 使用 for-else ===")
for fruit in fruits:
    if fruit == "orange":
        print(f"找到: {fruit}")
        break
    print(f"检查: {fruit}")
else:
    print("未找到目标")

print("\n=== 不使用 break ===")
# 另一种写法(不使用 else)
found = False
for fruit in fruits:
    if fruit == "orange":
        print(f"找到: {fruit}")
        found = True
        break
    print(f"检查: {fruit}")

if not found:
    print("未找到目标")

运行结果预期:

=== 使用 for-else ===
检查: apple
检查: banana
找到: orange

=== 不使用 else ===
检查: apple
检查: banana
找到: orange

for-else 语法更加简洁,不需要额外的标志变量。

示例 4:处理循环结束

实例

# 场景:验证所有元素是否满足条件
scores = [85, 90, 78, 92, 88]

# 检查是否有不及格的
print("=== 检查是否有不及格 ===")
for score in scores:
    if score < 60:
        print(f"发现不及格: {score}")
        break
    print(f"{score} 分,合格")
else:
    print("所有成绩都及格")

# 另一种场景:完成所有处理后执行清理
print("\n=== 处理完成后清理 ===")
files = ["a.txt", "b.txt", "c.txt"]

for file in files:
    print(f"处理文件: {file}")
else:
    print("所有文件处理完成,执行清理工作")
    print("--- 清理完成 ---")

运行结果预期:

=== 检查是否有不及格 ===
85 分,合格
90 分,合格
78 分,合格
92 分,合格
88 分,合格
所有成绩都及格

=== 处理完成后清理 ===
处理文件: a.txt
处理文件: b.txt
处理文件: c.txt
所有文件处理完成,执行清理工作
--- 清理完成 ---

for-else 还可以用于"完成后执行清理"的场景。

示例 5:实际应用 - 登录验证

实例

# 模拟登录尝试
def try_login(username, password):
    valid_users = {
        "admin": "123456",
        "user": "password",
        "guest": "guest"
    }

    print(f"尝试登录: {username}")

    for user, pwd in valid_users.items():
        if user == username and pwd == password:
            print("登录成功!")
            return True

    else:
        # 遍历完所有用户都没匹配
        print("用户名或密码错误")
        return False

# 测试
try_login("admin", "123456")  # 输出: 登录成功
print("---")
try_login("admin", "wrong")    # 输出: 用户名或密码错误

运行结果预期:

尝试登录: admin
登录成功!
---
尝试登录: admin
用户名或密码错误

for-else 在遍历搜索场景中非常有用,可以清晰表达"没找到"的逻辑。

注意事项

  • else 不是 if 的一部分,而是 for 的一部分。
  • 不要把 elseif 混淆使用。
  • 这种语法是 Python 特有的,其他语言没有。

Python3 循环语句 Python3 循环语句