0

我正在编写代码来生成前 1000 个素数,但我不明白为什么这段代码不会按原样循环。

divisor = 1
guess = 2
count = 0
while count < 1000:
    divisor+=1
    while guess%divisor==0:
        if guess==divisor:
            print(guess)
            guess+=1
            count+=1
            divisor=1
        else:
            guess+=1
            divisor=1

如果我在 if 和 else 定义的末尾添加 break(如下所示),则循环运行良好,如下所示,但我无法理解。

        if guess==divisor:
            print(guess)
            guess+=1
            count+=1
            divisor=1
            break
        else:
            guess+=1
            divisor=1
            break
4

3 回答 3

0

你的循环运行良好,第一次guess==divisor是真的,所以它打印,在第一次进入else块之后

改变:

else:
    guess+=1
    divisor=1

else:
    print("else ",guess)
    guess+=1
    divisor=1

你会看到运行良好

于 2013-10-13T01:01:44.780 回答
0

显然。条件:

guess%divisor==0

永远是真的..因为你做了:

divisor=1

在 if 和 else 语句上

但是“中断”是跳出while循环。所以在第二种情况下,您的代码可以正常工作。

于 2013-10-13T01:09:47.780 回答
0

更正:

divisor = 1
guess = 2
count = 0
while count<1000:
    divisor += 1
    if guess%divisor==0:            #'while' was replaced by 'if'
        if guess==divisor:
            print guess
            guess += 1
            count += 1
        else: guess += 1
        divisor = 1                 #moved here

输出:

2
3
5
7
11
13
17
...
7841
7853
7867
7873
7877
7879
7883
7901
7907
7919
于 2013-10-13T02:48:00.213 回答