用来练手的python练习题,原题链接: python练习实例36

题干: 求100之内的素数

求某个范围内的素数,和之前的一个例题其实是一样的

在实现题目要求时,这次用了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)

输出结果如下:

python中for else的用法 python for else语句_算法


if else语句是比较常见的条件语句,但其实for else语句也是非常实用的。下面给出for else语句的基本测试:

第一种情况,在for循环中的条件语句,当条件满足时,break。

for i in range(10):
  if i == 7:
    print("aaa")
    break
else:
  print("okok")

输出结果如下:

python中for else的用法 python for else语句_python_02


我们发现,当循环中出现了满足条件语句的情况,循环break会直接跳出,且不会执行else语句中的命令。

那么如果循环中的所有情况都不满足条件语句,循环break之后会执行else语句中的命令,如下:

for i in range(10):
  if i == 11:
    print("aaa")
    # 其实这里有没有break是一样的,因为这个条件语句总是false,因此循环语句总是能完全遍历。
    break
else:
  print("okok")

在上述代码中我们知道,循环中的所有情况,都不会满足if条件语句的条件,因此循环跳出后会执行else语句中的print指令,输出结果如下:

python中for else的用法 python for else语句_python中for else的用法_03


实际我们发现,当循环中不触发break跳出循环,在循环全部完成后,总会执行else中的命令,如下:

for i in range(10):
  print("haohaohao")
else:
  print("okok")

输出结果如下:

python中for else的用法 python for else语句_跳出循环_04


总结: 当我们使用for else 语句时,如果循环完全遍历,没有通过break跳出,那么在循环结束后,就会执行else语句中的命令。反之,如果在循环的过程中,经由break跳出了循环,那么else语句就不会再执行了。因此for else语句非常适合存在性问题,例如在找素数的过程中,如果这个数存在除了1和它本身的因数,则跳出循环,这个数不是素数。反之如果不存在除了1和它本身的因数,那么就调用else语句,这个数是一个素数。