提问者:小点点

了解If模块


要打印介于1和20之间的素数,我使用了以下代码。 虽然我知道输出是错误的,因为缩进,但我特别想了解这里发生了什么。 能请人帮帮我吗。

    flag = True
    for i in range(2,n):
        if n % i == 0:
            flag = False
            break
        if flag :
            print (n)

输出情况如下:3 5 5 5 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7


共1个答案

匿名用户

if flag:print(n)语句需要位于for i in range(2,n)循环之外,否则它将被打印,直到n%i==0true。 注意,要包含20,您将需要调用range(1,21)(原因如下)。 下面是我的代码:

for n in range(1, 21):
    if n == 1:
        continue # 1 is not prime

    flag = True
    for i in range(2, n):
        if n % i == 0:
            flag = False
            break
    if flag:
        print(n)

虽然上面的代码不是最好的,但这一个更好:

from math import floor

for n in range(1, 21):
    if n < 2:
        continue
    if n==2:
        print(n)
    if not n%2:
        continue
    for d in range(3, floor(n**0.5)+1, 2):
        if not n%d:
            break
    print(n)

相关问题