未跳出 for 循环
出于某种原因,当候选数字达到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
循环,但那样的话你需要手动增加计数器的值。