pin_drop当前位置:知识文库 ❯ 图文

Python循环else子句 - for-else和while-else使用指南

概述

Python 的 whilefor 循环都支持 else 子句。else 代码块在循环正常结束(条件变为假或遍历完成)时执行,但在 break 终止循环时不执行。这个特性在查找和验证场景中非常实用。


语法

while-else

代码示例

while condition:
    statement(s)
else:
    statement(s)  # 循环正常结束时执行

for-else

代码示例

for variable in iterable:
    statement(s)
else:
    statement(s)  # 循环正常结束时执行

基本用法

for-else 示例

代码示例

nums = [1, 3, 5, 7, 9]
for n in nums:
    if n % 2 == 0:
        print(f"找到偶数: {n}")
        break
else:
    print("列表中没有偶数")

输出:

代码示例

列表中没有偶数

while-else 示例

代码示例

n = 10
while n > 0:
    n -= 1
    if n == 5:
        print(f"在 n=5 时中断")
        break
else:
    print("循环正常结束")

输出:

代码示例

在 n=5 时中断

else 执行条件

情况 else 是否执行
循环条件变为 False
可迭代对象遍历完毕
break 终止循环
continue 跳过迭代 ✅(不影响)

代码示例

# 正常结束 - else 执行
for i in range(3):
    print(i, end=" ")
else:
    print("\n正常结束")

# break 终止 - else 不执行
for i in range(3):
    if i == 1:
        break
    print(i, end=" ")
else:
    print("\n这行不会执行")

常见应用场景

判断素数

代码示例

def is_prime(n):
    if n < 2:
        return False
    for i in range(2, int(n ** 0.5) + 1):
        if n % i == 0:
            return False
    else:
        return True

print(is_prime(17))
print(is_prime(18))

输出:

代码示例

True
False

查找失败提示

代码示例

data = [10, 20, 30, 40]
target = 50
for val in data:
    if val == target:
        print(f"找到: {target}")
        break
else:
    print(f"未找到: {target}")

输出:

代码示例

未找到: 50

注意事项

⚠️ 容易误解else 不是"条件不满足时执行",而是"循环正常结束时执行"。

⚠️ 空循环也执行 elsefor i in range(0) 不会执行循环体,但会执行 else

⚠️ 非 Pythonic 争议for-else 是 Python 特有语法,有人认为可读性不佳,可用标志变量替代。


小结

  • 循环 else 在循环正常结束时执行

  • break 终止循环时不执行 else

  • continue 不影响 else 的执行

  • 常用于查找失败提示和素数判断


练习题

练习1

使用 for-else 编写一个函数 find_in_list(lst, target),在列表中查找目标值,找到返回索引,未找到返回 -1。

练习2

使用 for-else 编写程序,判断一个数是否为完全数(等于其所有真因子之和的数,如 6=1+2+3)。

常见问题

循环的 else 什么时候执行?

else 在循环正常结束时执行,即循环条件变为假或可迭代对象遍历完毕。如果循环被 break 终止,else 不会执行。

continue 会影响 else 的执行吗?

不会。continue 只是跳过当前迭代,循环仍然正常进行,最终结束后 else 仍会执行。

for-else 语法看起来很奇怪,有更好的替代方式吗?

可以使用标志变量替代。例如设置 found = False,找到目标后设为 True,循环结束后判断标志变量的值。这种方式在其他语言中更常见,可读性更好。

空循环会执行 else 吗?

会。例如 for i in range(0) 不会执行循环体,但因为循环"正常结束"了,else 块仍然会执行。

标签: Python 循环else for-else while-else 流程控制 Python基础 素数判断

本文涉及AI创作

内容由AI创作,请仔细甄别

list快速访问

上一篇: Python循环嵌套 - for和while嵌套使用指南 下一篇: Python函数定义与调用 - def关键字入门

poll相关推荐