当我用Python,打出了以下代码:
# 打印1~100以内的所有质数
for i in range(2,100):
for j in range(2,i):
if i % j == 0:
break
else:
print(i,end=' ')
学过C语言的同学都知道,else必须搭配if语句使用,并且得在同一作用域内
但是当我运行这段代码时,结果却完全正确
![](https://img-blog.csdnimg.cn/img_convert/e6e8311749fa4c14ab7abbf1cdecaee5.png)
于是我猜想难道if和else不用对齐吗?
答案显然是不可能的。
带着疑惑找老师,
![](https://img-blog.csdnimg.cn/img_convert/9f7566d3367c4dbcb9fb4d668bb7bd31.png)
原来for循环中也存在else语句
当我们知道这点后重新回到代码,理解代码是怎么样运行的
# 打印1~100以内的所有质数
for i in range(2,100):
for j in range(2,i):
if i % j == 0:
break
else:
print(i,end=' ')
从运行结果我们可以知道,只有质数正常打印出来了
说明else语句执行了
其他数字没有正常打印出来说明触发了break
所以break语句执行后,后面的else语句就不会执行
特别的:
for i in range(2,2):
print(i)
else:
print("err")
运行结果是:
![](https://img-blog.csdnimg.cn/img_convert/55a0dff6cbaa4bc78758e4fbf2c90baf.png)
当range后面的范围为两个相同的数时,我们知道取左不取右
所以i时取不到2的
直接执行后面的else语句
这也就是为什么上面代码中质数2为什么能输出的原因