首页 > 解决方案 > For循环获取素数

问题描述

我刚开始接触 Python,所以我的知识还很菜鸟。

无论如何,我在网上找到了这个例子:

for num in range(10,20):     #to iterate between 10 to 20
   for i in range(2,num):    #to iterate on the factors of the number
      if num%i == 0:         #to determine the first factor
         j=num/i             #to calculate the second factor
         print(f"{num} equals {i} * {j}")
         break #to move to the next number, the #first FOR
   else:                  # else part of the loop
       print(f"{num} is a prime number")
       break

这是示例的结果:

10 equals 2 * 5
11 is a prime number
12 equals 2 * 6
13 is a prime number
14 equals 2 * 7
15 equals 3 * 5
16 equals 2 * 8
17 is a prime number
18 equals 2 * 9
19 is a prime number

不幸的是,通过在 Jupyter 上运行该代码,它返回:

10 equals 2 * 5
11 is a prime number
12 equals 2 * 6
13 is a prime number
14 equals 2 * 7
15 is a prime number  ### THIS IS THE ERROR
16 equals 2 * 8
17 is a prime number
18 equals 2 * 9
19 is a prime number

我在这里真的找不到错误,有什么建议吗?

标签: pythonfor-loop

解决方案


我猜你的尝试是

for num in range(10, 20):
    for i in range(2, num):
        if num % i == 0:
            j = num / i
            print(f"{num} equals {i} * {j}")
            break
        else:
            print(f"{num} is a prime number")
            break

而正确的代码必须像

for num in range(10, 20):
    for i in range(2, num):
        if num % i == 0:
            j = num / i
            print(f"{num} equals {i} * {j}")
            break
    else:
        print(f"{num} is a prime number")

注意(i)从句的不同缩进级别else,以及(ii)没有第二个break。您可能需要更加小心 python 中的缩进。

这里,else属于for,不是if(这种区别是通过缩进实现的)。为此,此文档可能会有所帮助。总之,for ... else行为是这样的:一旦for循环结束,elsepart 就会被执行,除非循环被 a 终止break


推荐阅读