关于循环的一个问题
求10以内的素数,这串代码为什么认为9是素数呢?i = 2
while i < 10:
j = 2
while j < i:
if i % j != 0:
j += 1
else:
print(i,"=",j,"*",i//j)
i += 1
break
print(i,"是一个素数")
i += 1
运行之后的结果是
2 是一个素数
3 是一个素数
4 = 2 * 2
5 是一个素数
6 = 2 * 3
7 是一个素数
8 = 2 * 4
9 是一个素数
i=9的时候,j=2,j<i,9%2!=0,然后j=3,继续3<9,然后9%3=0,应该打印9=3*3,然后i=10后跳出所有循环,不知道为什么会出现9是一个素数,求大佬解答 i = 2
while i < 10:
j = 2
while j < i:
if i % j != 0:
j += 1
else:
print(i, "=", j, "*", i // j)
# i += 1i 增长的工作留给最后那句完成,否则就会出现i=8时带入,下语句print就成了9是素数,最后i又加了1,变成了10.
break
else:# else让print和while形成整体:如果被整除,就会被上一句break,就不会打印是素数了。如果最终没有被整除,那么就会走到else,就会打印素数。如果不用else,print就不能和while形成一个整体,就会出现无论什么数字,都会打印是素数。
print(i, "是一个素数")
i += 1 本帖最后由 傻眼貓咪 于 2021-10-30 09:07 编辑
少一个 else
i = 2
while i < 10:
j = 2
while j < i:
if i%j:
j += 1
else:
print(f"{i} = {j}*{i//j}")
i += 1
break
else: # 这里加一个 else 就完全没有问题了
print(i,"是一个素数")
i += 12 是一个素数
3 是一个素数
4 = 2*2
5 是一个素数
6 = 2*3
7 是一个素数
8 = 2*4
9 = 3*3while else 用法:
当 while 经由 break 语句退出时,则执行 else 语句 本帖最后由 jackz007 于 2021-10-30 20:16 编辑
i = 2
while i < 10:
j = 2
while j < i:
if i % j != 0:
j += 1
else:
print(i,"=",j,"*",i//j) # 当 i = 8,打印输出 "8 = 2 * 4" 后
i += 1 #i = i + 1 = 9
break # 跳出内层 while 循环
print(i ,"是一个素数") # 跳出内层循环后,会直接来到这里,显示 "9 是一个素数"
i += 1
应该这样改:
i = 2
while i < 10:
j , f = 2 , True
while j < i:
if i % j == 0:
print(i , "=" , j , "*" , i // j)
f = False
break
else:
j += 1
if f:
print(i ,"是一个素数")
i += 1
运行实况:
D:\00.Excise\Python>python x.py
2 是一个素数
3 是一个素数
4 = 2 * 2
5 是一个素数
6 = 2 * 3
7 是一个素数
8 = 2 * 4
9 = 3 * 3
D:\00.Excise\Python>
i = 2
while i < 10:
j = 2
while j < i:
if i%j:
j += 1
else:
print(f"{i} = {j}*{i//j}")
i += 1
break
else:
print(i,"是一个素数")
i += 1
页:
[1]