LeonardCohenX 发表于 2021-9-4 21:16:30

这几串代码中break的作用不是很清楚

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就会多出这两个呢????有朋友知道我在说什么吗???

monkey-D 发表于 2021-9-4 21:35:53

有两个for循环,若if条件匹配成功则break出current_user的for循环,除开break的话if条件匹配成功后还会继续往下,没有跳出去,执行到elif条件打印,发现a1和d4都是if条件匹配成功的吗,这俩本该跳出去的但没有

LeonardCohenX 发表于 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的解释,您能再解释一下吗??

小伤口 发表于 2021-9-5 00:36:49

本帖最后由 小伤口 于 2021-9-5 00:38 编辑

两个for循环的执行顺序是
new_users-'a1'---------》current_users=['a1','A2','a3','D4','a5']
new_users-'b2'---------》current_users=['a1','A2','a3','D4','a5']
                                 ........
换句话说就是两个for循环的意义就是让两个列表的每个值都能互相进行一次比对
------------------------------------------------------------------------
if new_user.lower()==current_user.lower():   
含义就是如果两个列表的值有相同的就执行下面的语句
------------------------------------------------------------------------
break
终止最近的循环也就是
for current_user in current_users:   
这层的循环
但是最外面的for循环依旧还会执行
--------------------------------------------------------------------------


LeonardCohenX 发表于 2021-9-5 09:25:27

小伤口 发表于 2021-9-5 00:36
两个for循环的执行顺序是

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


有点懂了,我再研究研究{:10_282:}

洛阳城 发表于 2021-9-5 10:26:12

程序的逻辑是如果对比过程中有重复就会直接提示并跳出循环(已经重复了,后面没必要对比了,也是break的作用),只有一直没重复的才能一直对比到a5(这是已有用户名的最后一个),如果你删除了break,程序对比发现重复的只会提示而不会跳出循环,也会一直对比到a5,所以也会提示没有重复。
如果依旧无法理解建议在if前面打个断点单步执行观察程序执行的过程方面理解~

LeonardCohenX 发表于 2021-9-5 10:55:21

LeonardCohenX 发表于 2021-9-4 21:43
这里运用了两次for循环,应该是如果new_user.lower()与current_user.lower()一一对应相等,就执行if,即 ...

刚懂了

LeonardCohenX 发表于 2021-9-5 10:56:05

这里break的作用是防止重复循环,例如a1在if语句中,此时有break,所以此时即使a1满足下面的elif条件,也不会再在elif模块中打印了

才想明白,感谢{:10_305:}

LeonardCohenX 发表于 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模块中打印了
页: [1]
查看完整版本: 这几串代码中break的作用不是很清楚