未跳出 for 循环

0 投票
4 回答
1380 浏览
提问于 2025-04-17 08:57

出于某种原因,当候选数字达到21时,它发现21可以被3整除,但却没有跳出循环。相比之下,比如25,它发现25可以被5整除,然后就跳出了。

看起来特别是当div等于3时,它没有跳出循环。这是为什么呢?

for cand in range (3,100):
    if cand%2 != 0:
        if ((cand ==3) or (cand ==5) or (cand ==7) or (cand ==11) or (cand == 13)):
            print str(cand) + ' is prime.'
        else:
            x = sqrt(cand)
            y= int (x)
            for div in range(3, (y+2)):
                if (cand%div == 0):
                    print div
                    print str(cand) + ' is divisible by' + str(div)
                    div = 10*y
                elif (div == y):
                    print str(cand) + ' is prime.'

这是代码的输出结果:

3 is prime.
5 is prime.
7 is prime.
3
9 is divisible by3
11 is prime.
13 is prime.
3
15 is divisible by3
17 is prime.
19 is prime.
3
21 is divisible by3
21 is prime.
23 is prime.
5
25 is divisible by5
3
27 is divisible by3
27 is prime.
29 is prime.
31 is prime.
3
33 is divisible by3
33 is prime.
5
35 is divisible by5
37 is prime.
3
39 is divisible by3
39 is prime.
41 is prime.
43 is prime.
3
45 is divisible by3
5
45 is divisible by5
45 is prime.
47 is prime.
7
49 is divisible by7
3
51 is divisible by3
51 is prime.
53 is prime.
5
55 is divisible by5
55 is prime.
3
57 is divisible by3
57 is prime.
59 is prime.
61 is prime.
3
63 is divisible by3
7
63 is divisible by7
5
65 is divisible by5
65 is prime.
67 is prime.
3
69 is divisible by3
69 is prime.
71 is prime.
73 is prime.
3
75 is divisible by3
5
75 is divisible by5
75 is prime.
7
77 is divisible by7
77 is prime.
79 is prime.
3
81 is divisible by3
9
81 is divisible by9
83 is prime.
5
85 is divisible by5
85 is prime.
3
87 is divisible by3
87 is prime.
89 is prime.
7
91 is divisible by7
91 is prime.
3
93 is divisible by3
93 is prime.
5
95 is divisible by5
95 is prime.
97 is prime.
3
99 is divisible by3
9
99 is divisible by9

4 个回答

1

相比之下,比如说25,说明25能被5整除,所以就跳出了循环。

其实不是这样的。它在div等于6的时候也会继续执行循环,但什么都不会打印出来,因为没有任何一个if条件成立。你的for循环在每次开始时都会重新设置索引,所以你的div=10*y这一行完全没有意义。

1

你的代码里没有任何break语句。

4

for循环和while循环是两种不同的循环方式。

在Python中,for循环的唯一类型就是其他语言中的“foreach”循环——它是用来遍历一系列元素的。在你的例子中,你是在遍历一个范围,也就是从3到y+2的一系列整数。循环停止的时机是由列表中的元素数量决定的,而不是由某个具体的值决定的。当你在循环的某一次迭代中改变了div的值,这对后面的元素没有影响。

如果满足某个条件,你可以使用break来退出循环。或者如果你想保持你的逻辑,可以尝试使用while循环,但那样的话你需要手动增加计数器的值。

撰写回答