鱼C论坛

 找回密码
 立即注册
查看: 980|回复: 8

[已解决]这几串代码中break的作用不是很清楚

[复制链接]
发表于 2021-9-4 21:16:30 | 显示全部楼层 |阅读模式

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

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

x
current_users=['a1','A2','a3','D4','a5']
new_users=['a1','b2','c3','d4','E5']
for new_user in new_users:
    for current_user in current_users:      
        if new_user.lower()==current_user.lower():   
            print(new_user+" has already been used")
            print("please input new username")
            break                          
        elif current_user=='a5':
            print(new_user+" is not being used")
  这里break的作用不是很清楚,我如果把break删除,就会比break存在的时候多两句打印结果:a1 is not being used  和   d4 is not being used   
但是a1和d4 这两个应该在if中打印。为什么少了break就会多出这两个呢????有朋友知道我在说什么吗???

最佳答案
2021-9-5 10:26:12
程序的逻辑是如果对比过程中有重复就会直接提示并跳出循环(已经重复了,后面没必要对比了,也是break的作用),只有一直没重复的才能一直对比到a5(这是已有用户名的最后一个),如果你删除了break,程序对比发现重复的只会提示而不会跳出循环,也会一直对比到a5,所以也会提示没有重复。
如果依旧无法理解建议在if前面打个断点单步执行观察程序执行的过程方面理解~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-9-4 21:35:53 | 显示全部楼层
有两个for循环,若if条件匹配成功则break出current_user的for循环,除开break的话if条件匹配成功后还会继续往下,没有跳出去,执行到elif条件打印,发现a1和d4都是if条件匹配成功的吗,这俩本该跳出去的但没有
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-4 21:43:32 | 显示全部楼层
monkey-D 发表于 2021-9-4 21:35
有两个for循环,若if条件匹配成功则break出current_user的for循环,除开break的话if条件匹配成功后还会继续 ...

这里运用了两次for循环,应该是如果new_user.lower()与current_user.lower()一一对应相等,就执行if,即打印第一个print中的new_user,如果不对应相等,例如A2不等于b2,就执行elif,即b2 is not being used。
不过我还是没听懂您说的关于break的解释,您能再解释一下吗??
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-5 00:36:49 | 显示全部楼层
本帖最后由 小伤口 于 2021-9-5 00:38 编辑

两个for循环的执行顺序是
  1. new_users-'a1'---------》current_users=['a1','A2','a3','D4','a5']
  2. new_users-'b2'---------》current_users=['a1','A2','a3','D4','a5']
  3.                                  ........
复制代码

换句话说就是两个for循环的意义就是让两个列表的每个值都能互相进行一次比对
------------------------------------------------------------------------
  1. if new_user.lower()==current_user.lower():   
复制代码

含义就是如果两个列表的值有相同的就执行下面的语句
------------------------------------------------------------------------
break

终止最近的循环也就是
  1. for current_user in current_users:   
复制代码

这层的循环
但是最外面的for循环依旧还会执行
--------------------------------------------------------------------------


小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-5 09:25:27 | 显示全部楼层
小伤口 发表于 2021-9-5 00:36
两个for循环的执行顺序是

换句话说就是两个for循环的意义就是让两个列表的每个值都能互相进行一次比对

有点懂了,我再研究研究
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-5 10:26:12 | 显示全部楼层    本楼为最佳答案   
程序的逻辑是如果对比过程中有重复就会直接提示并跳出循环(已经重复了,后面没必要对比了,也是break的作用),只有一直没重复的才能一直对比到a5(这是已有用户名的最后一个),如果你删除了break,程序对比发现重复的只会提示而不会跳出循环,也会一直对比到a5,所以也会提示没有重复。
如果依旧无法理解建议在if前面打个断点单步执行观察程序执行的过程方面理解~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-5 10:55:21 | 显示全部楼层
LeonardCohenX 发表于 2021-9-4 21:43
这里运用了两次for循环,应该是如果new_user.lower()与current_user.lower()一一对应相等,就执行if,即 ...

刚懂了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-5 10:56:05 | 显示全部楼层
这里break的作用是防止重复循环,例如a1在if语句中,此时有break,所以此时即使a1满足下面的elif条件,也不会再在elif模块中打印了

才想明白,感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-5 10:57:34 | 显示全部楼层
LeonardCohenX 发表于 2021-9-5 10:56
这里break的作用是防止重复循环,例如a1在if语句中,此时有break,所以此时即使a1满足下面的elif条件,也不 ...

这里break的作用是防止重复循环,例如a1在if语句中,已经满足if模块,所以会在if模块中打印,此时有break,所以此时即使a1满足下面的elif条件,也不会再在elif模块中打印了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-19 03:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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