|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
小甲鱼老师在了不起的分支和循环(IV)课后测试题有以下一个答案:
>>> 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
我尝试整理了一下,不知道理解的对不对,我理解的运行逻辑如下:
1.当n = 2 第一次循环:
(1)外层循环while n < 10 条件满足,开始循环.
(2)x取值2
(3)内层循环while x < n不满足, 执行else语句内容,即打印”2是一个素数”
(4)n += 1后n的值变为3
2.当 n = 3 第二次循环:
(1)外层循环while n < 10 条件满足,开始循环.
(2) x取值2
(3)内层循环while x < n条件满足,开始循环
(4) if判断语句n % x == 0不满足,if判断语句里面的print语句不会被执行,break语句也不会被触发
(5)x += 1后x的值变为3 (注:这里我不确定对不对)
(6)这里我不明白为何会执行else语句内容,即打印’’3是一个素数’’.因为要执行else语句的内容,对应的上面内层while x < n循环语句需不满足,即为假,但此时内层循环while x < n条件是满足的啊(x为2,n为3),else语句理应不会被执行才对.
(7)n += 1后n的值变为4
3.当 n = 4 第三次循环:
(1)外层循环while n < 10 条件满足,开始循环.
(2) x取值2
(3)内层循环while x < n条件满足,开始循环
(4) if判断语句n % x == 0满足,执行if判断语句里面的print语句,即打印”4=2*2”,然后执行break语句,跳出内层循环语句
(5) 因为内层函数while x < n执行结果为真,故不会执行else语句内容
(6) n += 1后n的值变为5
这是我对该嵌套函数前三次循环的理解,麻烦各位大侠帮我指点一下我的困惑(标红处),还有我的整体理解逻辑对不对,谢谢啦!
本帖最后由 jackz007 于 2024-11-16 18:48 编辑
看来你是对 while ... else 的执行逻辑有疑问,属于 else 的语句只有在 while 的入口条件为 False 的时候才会被执行,在这一点上,只要把 while、for 替换成 if ,逻辑上就对了。 while x < n :
if n % x == 0:
......
break
else:
print(n, "是一个素数")
在循环的入口有一个条件: 如果这个条件为True,就会循环,如果为假,就会执行属于 else 的语句,并结束循环。
例如:x = 2,n = 2 :
循环入口条件 2 < 2 不成立,无法进入循环,直接执行 else 的语句,打印 2 是素数
例如:x = 2 ,n = 3:
循环入口条件 2 < 3 条件成立,进入循环,由于 3 无法被 2 整除,x = x + 1,这时,循环入口条件 3 < 3 不再成立,于是,执行 else 的语句,打印 3 是素数
例如:x = 2 ,n = 4:
循环入口条件 2 < 4 条件成立,进入循环,由于 4 可以被 2 整除,会执行 print 语句,即打印 ”4=2*2”,然后执行 break 语句,结束内层循环,由于内层循环在没有轮到入口条件判断的情况下就结束了,所以,和 else 语句彻底无缘。
所以,就本例而言,判断是否素数的依据,是 内层循环是否被 break 语句打断,如果始终未被打断,那 n 便是一个素数,否则就不是。
|
|