pin_drop当前位置:知识文库 ❯ 图文
Python循环else子句 - for-else和while-else使用指南
概述
Python 的 while 和 for 循环都支持 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 执行
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不是"条件不满足时执行",而是"循环正常结束时执行"。
⚠️ 空循环也执行 else:
for 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 块仍然会执行。
本文涉及AI创作
内容由AI创作,请仔细甄别