鱼C论坛

 找回密码
 立即注册
查看: 2135|回复: 16

[已解决]关于for和else

[复制链接]
发表于 2020-4-25 23:05:27 | 显示全部楼层 |阅读模式

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

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

x

for a in range(5,8):
    print(a)
    for i in range(5):
        if i>5:
            print(i)
            break
    else:
        print('欧尼酱')
请问哥哥们为什么上面那段代码可以出来欧尼酱下面的欧尼酱出不来呢???
for a in range(5,8):
    print(a)
    for i in range(5):
        if i<3:
            print(i)
            break
    else:
        print('欧尼酱')


最佳答案
2020-4-25 23:29:21
break破坏的是while和for循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-4-25 23:09:59 | 显示全部楼层
可使那个else和break不是同一层循环吧,为什么else会执行不了呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-25 23:14:10 | 显示全部楼层
支离疏哈哈哈 发表于 2020-4-25 23:09
可使那个else和break不是同一层循环吧,为什么else会执行不了呢

而且break不是只破坏了那层if循环吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-25 23:29:21 | 显示全部楼层    本楼为最佳答案   
break破坏的是while和for循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-4-25 23:36:50 | 显示全部楼层
!!!哥哥们我知道了,我自己想出来了哈哈哈能奖励我棒棒糖吗hhh

1.for循环每次被break后都会从头开始2.若是for内层有条件语句,他会一直循环直到达到条件语句,或者循环到最后一位。3.和for一层的else,只有当for循环到最后一位时才会执行4.循环是从头开始的,线性的,虽然break的只是if层,但是前面的for已经执行过了,所以从头开始
关于第四点还不太确定
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-25 23:37:25 | 显示全部楼层
我棒吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-25 23:38:14 | 显示全部楼层
我想了好久啊。。太笨了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-25 23:41:34 | 显示全部楼层
1241702927 发表于 2020-4-25 23:29
break破坏的是while和for循环

不对哦,如果破坏的是for循环那第一个的话欧尼酱是出不来的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-25 23:43:22 | 显示全部楼层
支离疏哈哈哈 发表于 2020-4-25 23:41
不对哦,如果破坏的是for循环那第一个的话欧尼酱是出不来的

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

使用道具 举报

发表于 2020-4-26 00:24:00 | 显示全部楼层
支离疏哈哈哈 发表于 2020-4-25 23:36
!!!哥哥们我知道了,我自己想出来了哈哈哈能奖励我棒棒糖吗hhh

1.for循环每次被break后都会从头开始2 ...

1.for循环每次被break后都会从头开始
错,break会立刻终止最近的一层for或者while循环,包括or或者while同级的else一样都被抛弃,直接跳到循环结束后的语句,从头开始的是continue。

2.若是for内层有条件语句,他会一直循环直到达到条件语句,或者循环到最后一位。
循环体里有条件语句,会正常执行,只要其中没有被break或continue被执行,循环就会继续,不会受到任何影响,直到循环结束。

3.和for一层的else,只有当for循环到最后一位时才会执行
是的,只要正常运行完循环就会执行else,如果被break中断就没有else什么事了。

4.循环是从头开始的,线性的,虽然break的只是if层,但是前面的for已经执行过了,所以从头开始
见1. break只会对最近一级的for或者while循环有效,放弃未执行的任何循环,直接退出循环体。

代码1,因为i的范围是0-4,所以i>5是False,所以print和break语句没有被执行,正常循环完了,什么没做,最后就打印了'欧尼酱'。
代码2,第1次循环,i为0,i<3是True,打印了个0然后执行break退出循环,else和for i 这是同一级的,属于同一个循环,所以也没有执行。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-4-26 00:40:50 | 显示全部楼层
else 是在循环语句没有break,完整执行完成后,就执行。第一个显然,i 是从0执行到4循环,由于不满足if条件,他是踏踏实实的执行了。
第二个由于i=0,满足if 条件,执行了break,已经跳出循环。就不会执行else。
else是你检查一个循环完成后的标志。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-4-26 00:45:06 | 显示全部楼层
for a in range(5,8):
    print(a)
    for i in range(5):
        if i<=4:
            print(i)
            #break
    else:
        print('欧尼酱')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-26 12:30:11 | 显示全部楼层
txxcat 发表于 2020-4-26 00:24
1.for循环每次被break后都会从头开始
错,break会立刻终止最近的一层for或者while循环,包括or或者whil ...
5
0
6
0
7
0
这是代码2的运行结果。
哥哥除了1和关于代码2的描述,其他都讲的很好。
可能是我表述的有问题。
关于1,我说的从头开始是指,以代码2为例,内层for被break以后,当外层for开始再次循环时,内层for还是从0开始而不会像外层for一样继续循环序列的第二个元素,而是继续打印0,所以会出现506070,要是内层for不重头开始,则会出现506172.
关于代码2没有欧尼酱的原因,我觉得是因为内层for一直被break,迭代卡在了0那里,没办法循环到最后一位才没办法执行else,for 和else 同层,else被执行的唯一条件就是for全部循环完,说是break退出循环导至for无法运行,可是和break最近一层的循环是if循环啊(难道不是吗?),else在if循环外面啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-26 12:36:51 | 显示全部楼层
支离疏哈哈哈 发表于 2020-4-26 12:30
这是代码2的运行结果。
哥哥除了1和关于代码2的描述,其他都讲的很好。
可能是我表述的有问题。

桥都吗dei!!我错了哥哥,所以if不算是循环语句吗??是吗,if 不算循环??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-26 12:49:36 | 显示全部楼层
哦,所有break和continue只能对for和 while起作用是吗,还有别的吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-26 12:50:59 | 显示全部楼层
支离疏哈哈哈 发表于 2020-4-26 12:30
这是代码2的运行结果。
哥哥除了1和关于代码2的描述,其他都讲的很好。
可能是我表述的有问题。

关于1我错了,他不是重头来,而是for循环 被break以后迭代也被break了,所有若是把if换一下,它也可以一直卡在别的数字
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-26 12:51:42 | 显示全部楼层
woai5551981 发表于 2020-4-26 00:40
else 是在循环语句没有break,完整执行完成后,就执行。第一个显然,i 是从0执行到4循环,由于不满足if条件 ...

说的好,else是检查循环完成后的标志,谢谢哥哥
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-11 22:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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