用来练手的python练习题,原题链接: python练习实例36
题干: 求100之内的素数
求某个范围内的素数,和之前的一个例题其实是一样的,上次的同类例题链接如下: python练习实例12
在实现题目要求时,这次用了for else语句,发现更加简便,可以省去一部分的条件语句。
源代码如下:
import numpy as np
from math import sqrt
bound = np.arange(2,101,1)
result = np.array([],dtype=int)
for k in bound:
if k > 1:
for i in range(2,int(sqrt(k))+1):
# 如果k存在不是1或k本身的因数i,则k不是素数
if k%i == 0:
break
else:
result = np.append(result, k)
print(result)
输出结果如下:
if else语句是比较常见的条件语句,但其实for else语句也是非常实用的。下面给出for else语句的基本测试:
第一种情况,在for循环中的条件语句,当条件满足时,break。
for i in range(10):
if i == 7:
print("aaa")
break
else:
print("okok")
输出结果如下:
我们发现,当循环中出现了满足条件语句的情况,循环break会直接跳出,且不会执行else语句中的命令。
那么如果循环中的所有情况都不满足条件语句,循环break之后会执行else语句中的命令,如下:
for i in range(10):
if i == 11:
print("aaa")
# 其实这里有没有break是一样的,因为这个条件语句总是false,因此循环语句总是能完全遍历。
break
else:
print("okok")
在上述代码中我们知道,循环中的所有情况,都不会满足if条件语句的条件,因此循环跳出后会执行else语句中的print指令,输出结果如下:
实际我们发现,当循环中不触发break跳出循环,在循环全部完成后,总会执行else中的命令,如下:
for i in range(10):
print("haohaohao")
else:
print("okok")
输出结果如下:
总结: 当我们使用for else 语句时,如果循环完全遍历,没有通过break跳出,那么在循环结束后,就会执行else语句中的命令。反之,如果在循环的过程中,经由break跳出了循环,那么else语句就不会再执行了。因此for else语句非常适合存在性问题,例如在找素数的过程中,如果这个数存在除了1和它本身的因数,则跳出循环,这个数不是素数。反之如果不存在除了1和它本身的因数,那么就调用else语句,这个数是一个素数。