鱼C论坛

 找回密码
 立即注册
查看: 2050|回复: 5

[已解决]python中关于for循环的理解

[复制链接]
发表于 2020-7-17 15:58:13 | 显示全部楼层 |阅读模式

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

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

x
能明白while循环中else的作用,但不是很清楚for循环中的else。
想请教下,for循环中的else在什么情况下才会执行,什么时候又不会被执行。就拿这个素数的代码,来举例。这里的else的执行条件是什么。
for a in range(2,11):
    for b in range(2,a):
        if a%b==0 :
            print(a,'=',b,'*',a//b)
            break  
    else:
        print(a,"是一个素数")

本人是萌新,各位希望各位大佬能解释的通俗易懂一些,太专业的术语可能看不明白
最佳答案
2020-7-17 16:01:30
本帖最后由 sunrise085 于 2020-7-17 16:06 编辑

for…else…中的else是当for循环正常执行完的时候执行的,若for循环遇到break跳出循环,则不执行else

例如你的这个找素数的程序
当a=5的时候,内层循环,for b in range(2,a),b取值为2,3,4,分别进行if判断,都不会进入if语句块,即不会执行到break,for循环正常执行完,然后才会去执行else语句块的print(a,"是一个素数") ,进行输出;
当a=6的时候,内层循环,for b in range(2,a),b取值为2,3,4,5,分别进行if判断,当b取值为2的时候,进入了if语句块,遇到了break,跳出了for循环,这时则会不会执行else语句块。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-17 16:01:30 | 显示全部楼层    本楼为最佳答案   
本帖最后由 sunrise085 于 2020-7-17 16:06 编辑

for…else…中的else是当for循环正常执行完的时候执行的,若for循环遇到break跳出循环,则不执行else

例如你的这个找素数的程序
当a=5的时候,内层循环,for b in range(2,a),b取值为2,3,4,分别进行if判断,都不会进入if语句块,即不会执行到break,for循环正常执行完,然后才会去执行else语句块的print(a,"是一个素数") ,进行输出;
当a=6的时候,内层循环,for b in range(2,a),b取值为2,3,4,5,分别进行if判断,当b取值为2的时候,进入了if语句块,遇到了break,跳出了for循环,这时则会不会执行else语句块。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-17 16:02:27 | 显示全部楼层

for 循环配合的 else ,是只有当 for 循环全部正常迭代执行完才会执行 else 的代码

而 for 循环中若遇到 break ,就算中途终止循环,也就算我们说的不正常循环退出循环~

for a in range(2,11):
    for b in range(2,a):
        if a%b==0 :
            print(a,'=',b,'*',a//b)
            break       #  在这里 for 循环过程中只要不遇到 break ,for 循环结束时候就会执行 else
    else:
        print(a,"是一个素数")


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

使用道具 举报

 楼主| 发表于 2020-7-17 16:10:56 | 显示全部楼层
sunrise085 发表于 2020-7-17 16:01
for…else…中的else是当for循环正常执行完的时候执行的,若for循环遇到break跳出循环,则不执行else

例 ...

就是说和while一样,只有循环自己本身遇到不满足循环的条件,才会执行下面对应的else。而不是说加了break跳出循环,就会执行else后面的语句,对么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-17 16:37:30 | 显示全部楼层
Congratulate 发表于 2020-7-17 16:10
就是说和while一样,只有循环自己本身遇到不满足循环的条件,才会执行下面对应的else。而不是说加了break ...

对的。两种循环都是正常迭代完毕,才能执行else;非正常中止(遇到break)则不会执行else
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-17 16:57:12 | 显示全部楼层
      循环就好比人的一生,正常老死的属于喜事,就会执行 else,如果是夭折的就不会执行,for 和 while 都一样。就楼主所举的实例而言,else 属于内层循环,当内层循环结束(b == a)时,就会执行 else 语句块的语句。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-11 11:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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