鱼C论坛

 找回密码
 立即注册
查看: 3129|回复: 9

[已解决]while else 问题

[复制链接]
发表于 2022-10-20 12:17:03 | 显示全部楼层 |阅读模式

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

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

x
a=0
while a<3:
        print(a)
        a+=1
else:
        break

我的问题是 while 的部分会自动循环到结束, 这个时候 else部分再执行的break 是作用与对上一层循环体吗? 为什么
最佳答案
2022-10-20 18:48:26
paulwang 发表于 2022-10-20 18:36
上面的显示好像是缩进错误了应该是下面这个
跳出所有循环,也就是说这里的break 其实是执行的是 直接跳 ...

        没错,break 在内层 while 以外,一旦执行是要跳出外层循环的。如果不在循环以内,执行 break 会出错的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-20 12:33:32 | 显示全部楼层
本帖最后由 jackz007 于 2022-10-20 12:35 编辑
while condition:
......
else:
       每次循环要先判断 condition 的值,当 condition 为 True 时,进入(或继续)循环,否则,进入并执行属于 else 的语句。
       就本例而言,在 a < 3 的时候正常循环,到 a = 3 的时候,进入 else,执行 break
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-20 13:41:15 | 显示全部楼层
jackz007 发表于 2022-10-20 12:33
每次循环要先判断 condition 的值,当 condition 为 True 时,进入(或继续)循环,否则,进入并 ...

这个我是知道的,但是a==3的时候已经跳出循环了, 那么这个时候再执行break的话那就是跳出上一级循环(如果有的话)了吗?
比如说下面这个 按道理break 只跳出一层循环, 但这个我运行起来好像是跳出了最外层的循环
a=0
b=3
while b< 5:
       while a<3:
             print(a)
             a+=1
       else:
              break
       b+=1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-20 13:47:12 | 显示全部楼层
本帖最后由 jackz007 于 2022-10-20 13:50 编辑
paulwang 发表于 2022-10-20 13:41
这个我是知道的,但是a==3的时候已经跳出循环了, 那么这个时候再执行break的话那就是跳出上一级循环(如 ...


       当然,如果这个 while 属于一个循环的内嵌循环的话,break 就是跳出这个外层循环。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-20 17:40:14 | 显示全部楼层
jackz007 发表于 2022-10-20 13:47
当然,如果这个 while 属于一个循环的内嵌循环的话,break 就是跳出这个外层循环。

我也刚觉应该是这样的, 但是我测试了一下
>>> a=0
>>> b=0
>>> while b<10:
        while a<5:
                print(a)
                a+=1
                b+=1
        else:
                break
        print(b)
显示的结果为
0
1
2
3
4
如果break 只跳出前面的循环的话 b的值应 5 应该被一直打印的,但情况是直接跳出外层循环了。
大神你验证下是不是这样所以我才疑惑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-20 18:08:20 | 显示全部楼层
paulwang 发表于 2022-10-20 17:40
我也刚觉应该是这样的, 但是我测试了一下
>>> a=0
>>> b=0

           这个不用验证,就是在 a 和 b 的值为 5 的时候结束所有的循环。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-20 18:36:30 | 显示全部楼层
jackz007 发表于 2022-10-20 18:08
这个不用验证,就是在 a 和 b 的值为 5 的时候结束所有的循环。

上面的显示好像是缩进错误了应该是下面这个
跳出所有循环,也就是说这里的break 其实是执行的是 直接跳出外层循环的并不是对应内层, 对吗?
a=0
b=0
while b<10:
        while a<5:
                print(a)
                a+=1
                b+=1
        else:
                break
        print(b)
显示的结果为
0
1
2
3
4
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-20 18:48:26 | 显示全部楼层    本楼为最佳答案   
paulwang 发表于 2022-10-20 18:36
上面的显示好像是缩进错误了应该是下面这个
跳出所有循环,也就是说这里的break 其实是执行的是 直接跳 ...

        没错,break 在内层 while 以外,一旦执行是要跳出外层循环的。如果不在循环以内,执行 break 会出错的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-10-22 10:12:12 | 显示全部楼层
break 直接就跳出循环了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-23 00:21:20 | 显示全部楼层
没有if 怎么用else啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-25 09:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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