鱼C论坛

 找回密码
 立即注册
查看: 1824|回复: 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
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 += 1
2 是一个素数
3 是一个素数
4 = 2*2
5 是一个素数
6 = 2*3
7 是一个素数
8 = 2*4
9 = 3*3
while else 用法:
当 while 经由 break 语句退出时,则执行 else 语句
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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 += 1  i 增长的工作留给最后那句完成,否则就会出现i=8时带入,下语句print就成了9是素数,最后i又加了1,变成了10.
            break
    else:  # else让print和while形成整体:如果被整除,就会被上一句break,就不会打印是素数了。如果最终没有被整除,那么就会走到else,就会打印素数。如果不用else,print就不能和while形成一个整体,就会出现无论什么数字,都会打印是素数。
        print(i, "是一个素数")
    i += 1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 += 1
2 是一个素数
3 是一个素数
4 = 2*2
5 是一个素数
6 = 2*3
7 是一个素数
8 = 2*4
9 = 3*3
while else 用法:
当 while 经由 break 语句退出时,则执行 else 语句
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 21:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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