鱼C论坛

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

[已解决]break的使用

[复制链接]
发表于 2020-6-20 00:29:32 | 显示全部楼层 |阅读模式

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

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

x
在新版视频中P18中,关于break的使用不太明白。其中
day = 1
hour = 1
while day <= 7:
    while hour <= 8:
        print ("fighting")
        hour += 1
        if hour > 1:
            break
    day += 1
这里打印了7次,可以理解为当hour  > 1时,内层循环结束,进入day += 1,然后重新进入第一个循环,再进入第二个循环。但是如果把day += 1缩进到if正下方,是否可以理解为day += 1在内层循环中?但是这样也还是打印了七次。请问是我对循环内的顺序理解有误么?
day = 1
hour = 1
while day <= 7:
    while hour <= 8:
        print ("fighting")
        hour += 1
        if hour > 1:
            break
            day += 1
最佳答案
2020-6-20 03:56:40
第二段代码,无论是:
day = 1
hour = 1
while day <= 7:
    while hour <= 8:
        print ("fighting")
        hour += 1
        if hour > 1:
            break
            day += 1
还是:
day = 1
hour = 1
while day <= 7:
    while hour <= 8:
        print ("fighting")
        hour += 1
        if hour > 1:
            break
        day += 1
最后那句day+=1都不会被执行,因为这句话属于内循环,而hour起始值就加1所以无论如何都大于1,break会被执行因而跳出内循环,换句话来说,内循环实际上每次只会执行一轮就退出了。然后在外循环中再次执行次内循环,因为hour+=1每次执行,所以一直到外循环第8次后hour等于9了不会进入内循环了,此时打印了8次,然后由于day恒等于1,外循环成了死循环,只能ctrl+C才能退出程序了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-20 00:34:41 | 显示全部楼层
本帖最后由 Twilight6 于 2020-6-20 07:22 编辑

这里打印了7次,可以理解为当hour  > 1时,内层循环结束,进入day += 1,然后重新进入第一个循环,再进入第二个循环。

但是如果把day += 1缩进到if正下方,是否可以理解为day += 1在内层循环中?但是这样也还是打印了七次。请问是我对循环内的顺序理解有误么?


你语言叙述是正确的,但是你代码改动之后是错误的哈,if 的正下方,应该是指同一缩进下,可你却把 break 放进了 if 的代码块内 而不是正下方了~

这样才算同一缩进哈:
day = 1
hour = 1
while day <= 7:
    while hour <= 8:
        print ("fighting")
        hour += 1
        if hour > 1:
            break
        day += 1

但是这样的代码会导致你陷入外部的死循环,因为 hour 初始值为 1  而你内部的循环条件 hour > 1 ,而已已进入内部的 while 就 +1,所以内部的 if 条件始终为  hour > 1  没有成功的执行过一次 day += 1

后来都会因为 内部循环的 if 条件成立 提前退出循环导致 day 之后再也无法相加,所以你应该改成这样:
day = 1
hour = 1
while day <= 7:
    while hour <= 8:
        print ("fighting")
        hour += 1
        day += 1
或者这样:
day = 1
hour = 1
while day <= 7:
    while hour <= 8:
        print ("fighting")
        hour += 1
    day += 1

即可满足你的题意
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-20 00:46:35 | 显示全部楼层
Twilight6 发表于 2020-6-20 00:34
你语言叙述是正确的,但是你代码是错误的哈,if 的正下方,应该是指同一缩进下,可你却把 break 放进了 ...

非常感谢你的回复,可是我复制了你的代码运行以后,也还是打印了7次。我还试过把day += 1再缩进一次,也还是7次。不知道为什么,我用的版本时3.8.0,应该跟这个没关系吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-20 00:50:31 | 显示全部楼层
生化楼大爷 发表于 2020-6-20 00:46
非常感谢你的回复,可是我复制了你的代码运行以后,也还是打印了7次。我还试过把day += 1再缩进一次,也 ...


你没说明你的目的呀,你是想打印几次呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-20 00:50:47 | 显示全部楼层
生化楼大爷 发表于 2020-6-20 00:46
非常感谢你的回复,可是我复制了你的代码运行以后,也还是打印了7次。我还试过把day += 1再缩进一次,也 ...

啊,不对,我数错了,按你的代码是打印了8次。我好像明白了,我再想想,多谢哈。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-20 03:56:40 | 显示全部楼层    本楼为最佳答案   
第二段代码,无论是:
day = 1
hour = 1
while day <= 7:
    while hour <= 8:
        print ("fighting")
        hour += 1
        if hour > 1:
            break
            day += 1
还是:
day = 1
hour = 1
while day <= 7:
    while hour <= 8:
        print ("fighting")
        hour += 1
        if hour > 1:
            break
        day += 1
最后那句day+=1都不会被执行,因为这句话属于内循环,而hour起始值就加1所以无论如何都大于1,break会被执行因而跳出内循环,换句话来说,内循环实际上每次只会执行一轮就退出了。然后在外循环中再次执行次内循环,因为hour+=1每次执行,所以一直到外循环第8次后hour等于9了不会进入内循环了,此时打印了8次,然后由于day恒等于1,外循环成了死循环,只能ctrl+C才能退出程序了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-20 07:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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