qyc4295 发表于 2021-10-29 21:51:53

关于循环的一个问题

求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是一个素数,求大佬解答

suchocolate 发表于 2021-10-29 22:45:52

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:04:13

本帖最后由 傻眼貓咪 于 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:14:09

本帖最后由 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>

叼辣条闯世界 发表于 2021-10-31 10:05:02

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]
查看完整版本: 关于循环的一个问题