鱼C论坛

 找回密码
 立即注册
查看: 1523|回复: 4

[已解决]关于循环的一个问题

[复制链接]
发表于 2021-10-29 21:51:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
求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是一个素数,求大佬解答
最佳答案
2021-10-30 09:04:13
本帖最后由 傻眼貓咪 于 2021-10-30 09:07 编辑

少一个 else
  1. i = 2
  2. while i < 10:
  3.     j = 2
  4.     while j < i:
  5.         if i%j:
  6.             j += 1
  7.         else:
  8.             print(f"{i} = {j}*{i//j}")
  9.             i += 1
  10.             break
  11.     else: # 这里加一个 else 就完全没有问题了
  12.         print(i,"是一个素数")
  13.         i += 1
复制代码
  1. 2 是一个素数
  2. 3 是一个素数
  3. 4 = 2*2
  4. 5 是一个素数
  5. 6 = 2*3
  6. 7 是一个素数
  7. 8 = 2*4
  8. 9 = 3*3
复制代码
while else 用法:
当 while 经由 break 语句退出时,则执行 else 语句
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-29 22:45:52 | 显示全部楼层
  1. i = 2
  2. while i < 10:
  3.     j = 2
  4.     while j < i:
  5.         if i % j != 0:
  6.             j += 1
  7.         else:
  8.             print(i, "=", j, "*", i // j)
  9.             # i += 1  i 增长的工作留给最后那句完成,否则就会出现i=8时带入,下语句print就成了9是素数,最后i又加了1,变成了10.
  10.             break
  11.     else:  # else让print和while形成整体:如果被整除,就会被上一句break,就不会打印是素数了。如果最终没有被整除,那么就会走到else,就会打印素数。如果不用else,print就不能和while形成一个整体,就会出现无论什么数字,都会打印是素数。
  12.         print(i, "是一个素数")
  13.     i += 1
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-30 09:04:13 | 显示全部楼层    本楼为最佳答案   
本帖最后由 傻眼貓咪 于 2021-10-30 09:07 编辑

少一个 else
  1. i = 2
  2. while i < 10:
  3.     j = 2
  4.     while j < i:
  5.         if i%j:
  6.             j += 1
  7.         else:
  8.             print(f"{i} = {j}*{i//j}")
  9.             i += 1
  10.             break
  11.     else: # 这里加一个 else 就完全没有问题了
  12.         print(i,"是一个素数")
  13.         i += 1
复制代码
  1. 2 是一个素数
  2. 3 是一个素数
  3. 4 = 2*2
  4. 5 是一个素数
  5. 6 = 2*3
  6. 7 是一个素数
  7. 8 = 2*4
  8. 9 = 3*3
复制代码
while else 用法:
当 while 经由 break 语句退出时,则执行 else 语句
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-30 20:14:09 | 显示全部楼层
本帖最后由 jackz007 于 2021-10-30 20:16 编辑
  1. i = 2
  2. while i < 10:
  3.     j = 2
  4.     while j < i:
  5.         if i % j != 0:
  6.             j += 1
  7.         else:
  8.             print(i,"=",j,"*",i//j)            # 当 i = 8,打印输出 "8 = 2 * 4" 后
  9.             i += 1                             #  i = i + 1 = 9
  10.             break                              # 跳出内层 while 循环
  11.     print(i ,"是一个素数")                      # 跳出内层循环后,会直接来到这里,显示 "9 是一个素数"
  12.     i += 1
复制代码

        应该这样改:
  1. i = 2
  2. while i < 10:
  3.     j , f = 2 , True
  4.     while j < i:
  5.         if i % j == 0:
  6.             print(i , "=" , j , "*" , i // j)
  7.             f = False
  8.             break
  9.         else:
  10.             j += 1
  11.     if f:
  12.         print(i ,"是一个素数")
  13.     i += 1
复制代码

        运行实况:
  1. D:\00.Excise\Python>python x.py
  2. 2 是一个素数
  3. 3 是一个素数
  4. 4 = 2 * 2
  5. 5 是一个素数
  6. 6 = 2 * 3
  7. 7 是一个素数
  8. 8 = 2 * 4
  9. 9 = 3 * 3

  10. D:\00.Excise\Python>
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-31 10:05:02 | 显示全部楼层
  1. i = 2
  2. while i < 10:
  3.     j = 2
  4.     while j < i:
  5.         if i%j:
  6.             j += 1
  7.         else:
  8.             print(f"{i} = {j}*{i//j}")
  9.             i += 1
  10.             break
  11.     else:
  12.         print(i,"是一个素数")
  13.         i += 1
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-11 21:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表