一、for
循环中使用else
Python提供了一种很多编程语言都不支持的功能,那就是可以在循环内部的语句块后面直接编写else
块
Case1:正常的for
循环
for i in range(3):
print("Loop %d" % i)
else:
print("Else Block!")
# 输出
Loop 0
Loop 1
Loop 2
Else Block!
else
块会在整个循环执行完之后立刻运行。
Case2: 含break
的for
循环
for i in range(3):
print("Loop %d" % i)
if i == 1:
break
else:
print("Else Block!")
# 输出
Loop 0
Loop 1
在循环里用
break
语句提前跳出,会导致程序不执行else
块。
Case3: 空列表的for
循环
for x in []:
print("Never runs")
else:
print("For Else block!")
# 输出
For Else block!
如果
for
循环要遍历的序列是空的,那么会立刻执行else
块
二、while
循环中使用else
Case1:初始循环条件为while
循环
while False:
print("Never runs")
else:
print("While Else block")
# 输出
While Else block
初始循环为
false
的while
循环,如果后面跟着else
块,那么也会立即执行else
语块
Case2: 含break
的while
循环
与for
循环一致
三、举例:判断两个数是否互质
1. 伪代码如下
要判断两个数是否互质(也就是判断两者除了1之外,是否没有其他的公约数):
- 把所有可能的公约数的每个值都遍历一轮,逐个判断两数是否能以该值为公约数。
- 尝试完每一种可能的值之后,循环就结束了
- 如果两个数确实互质,那么在执行循环过程中,程序就不会因break语句跳出
2. 代码
a = 4
b = 9
for i in range(2, min(a, b) + 1):
print("Testing", i)
if a % i == 0 and b % i == 0:
print("Not coprime")
break
else:
print("Coprime")
# 输出
Testing 2
Testing 3
Testing 4
Coprime
四、使用场景
实际工作中,完全不推荐这样的写法,因为这样的代码相当费解,而是会用辅助函数来完成计算。
这样的辅助函数,有两种常见的写法:
- 第一种:只要发现受测参数符合自己想要搜寻的条件,就尽早返回
如果整个循环都完整地执行了一遍,那就说明受测参数不符合条件,于是返回默认值。
def coprime(a, b):
for i in range(2, min(a, b)):
if a % i == 0 and b % i == 0:
return False
return True
- 第二种:用变量来记录受测参数是否符合自己想要的搜寻条件
一旦符合,就用break跳出循环。
def coprime2(a, b):
is_coprime = True
for i in range(2, min(a, b)):
if a % i == 0 and b % i == 0:
is_coprime = False
return is_coprime
五、总结
- Python有种特殊语法,可在
for
及while
循环的内部语句块之后紧跟一个else
块 - 只有当整个循环主体都没遇到
break
语句时,循环后面的else
块才会执行 - 不要在循环后面使用
else
块,因为这种写法既不直观,又容易引人误解
网友评论