spflmm 发表于 2023-3-14 15:46:25

while -else 问题

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语句呢?
小白一枚,请大神给予指导,谢谢!

KeyError 发表于 2023-3-14 17:17:20

在x=x+1后,x=3。3 < 3为假,不继续循环,执行else里的语句。
你忽略了x=x+1后,x=3,而n也是3,你自己说一下3 < 3对不对

wanglyndon 发表于 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是一个素数"。

有用请设置最佳答案
页: [1]
查看完整版本: while -else 问题