鱼C论坛

 找回密码
 立即注册
查看: 2159|回复: 2

[已解决]while -else 问题

[复制链接]
发表于 2023-3-14 15:46:25 | 显示全部楼层 |阅读模式

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

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

x
n = 2
while n < 10:
    x = 2
    while x < n:
        if n % x == 0:
            print(n, "=", x, "*", n // x)
            break
        x += 1
    else:
        print(n, "是一个素数")
    n += 1

打印10以内的素数。
当初始n=2,x=2时,while x<n不成立,不执行循环体内容,执行else语句,打印"2是一个素数"。然后n=n+1,n变为3,x还是2。
下一个循环n=3时,x=2,不满足n%x ==0,不执行print(n, "=", x, "*", n // x)和break,执行x=x+1。不是讲:while-else时,如果循环的条件不再为真是,执行else语句,但这个时候循环的条件为while x<n(while 2<3),为真,为什么会接着执行else下面的打印内容呢?还是说:只要else前面的内容执行不下去的时候就执行else语句呢?
小白一枚,请大神给予指导,谢谢!
最佳答案
2023-3-14 17:17:20
在x=x+1后,x=3。3 < 3为假,不继续循环,执行else里的语句。
你忽略了x=x+1后,x=3,而n也是3,你自己说一下3 < 3对不对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-3-14 17:17:20 | 显示全部楼层    本楼为最佳答案   
在x=x+1后,x=3。3 < 3为假,不继续循环,执行else里的语句。
你忽略了x=x+1后,x=3,而n也是3,你自己说一下3 < 3对不对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-14 20:57:20 | 显示全部楼层
你的理解是正确的。在这个嵌套的 while 循环中,else 语句与外层的 while 语句配对,而不是与内层的 while 语句配对。

当内层的 while 循环正常结束时(即条件不再为真),else 语句就会被执行。如果内层的 while 循环是由于遇到了 break 语句而被提前终止的,则不会执行 else 语句。

在第二次循环中,x=2,2<3为真,因此 while 循环继续执行。但是,当 x=3 时,条件 x<n 不再为真,因此 while 循环正常结束,else 语句被执行,打印出了 "3是一个素数"。


有用请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-24 07:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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