循环中的else
一、引入
看如下代码,想一想:怎样实现“密码不正的相应提示”
i = 3 while i > 0: password = input("请输入密码:(还剩%d次机会)" % i) if password == "123456": print("密码输入正确") break i -= 1
想要实现在“密码不正确”时提示相应的信息,普通的做法是
login_flag = False # 定义一个变量,用来存储是否登录成功,True表示成功 False表示不成功 i = 3 while i > 0: password = input("请输入密码:(还剩%d次机会)" % i) if password == "123456": login_flag = True # 如果登录成功,那么这里就改为True break i -= 1 # 当上述的while循环结束后,判断login_flag的值,来输出对应的信息 if login_flag == True: # 简单的写法是if login_flag: print("密码输入正确") else: print("密码输入不正确,今日3次机会已用完,请明天再试...")
上述的代码整体逻辑是:
- 循环中获取密码判断是否正确,通过一个变量来标记正确与否
- 当循环结束后,在单独判断标记,然后输出对应的信息
问题:有么有简单的方式呢?
答:else
二、while...else...
1. 格式
while 条件: # 条件满足时执行的代码... else: # 如果上述的while循环没有调用break,就执行的代码...
说明:
- 只要while循环体中没有执行break,那么当while循环体中所有的代码执行完后,else中的代码也会执行
- 如果while循环中有break那么表示整个while介绍,else中的代码也不会被执行
2. 示例
有break时
i = 1 while i <= 3: print("哈哈,我是超神,double kill......") if i == 1: print("调用了break") break i += 1 else: print("我是else中的代码")
运行结果
哈哈,我是超神,double kill...... 调用了break
没有break时
i = 1 while i <= 3: print("哈哈,我是超神,double kill......") i += 1 else: print("我是else中的代码")
运行结果
哈哈,我是超神,double kill...... 哈哈,我是超神,double kill...... 哈哈,我是超神,double kill...... 我是else中的代码
3. 案例
i = 3 while i > 0: password = input("请输入密码:(还剩%d次机会)" % i) if password == "123456": print("密码输入正确") break i -= 1 else: print("密码输入3次全部错误,请明日再试")
三、for...else...
1. 格式
for 变量 in 可迭代对对象: # 正常执行的代码 else: # for未使用break时执行的代码
2. 示例
未使用break
for i in range(5): print("i=%d" % i) else: print("我是else中的代码...")
运行结果:
i=0 i=1 i=2 i=3 i=4 我是else中的代码....
使用break
for i in range(5): print("i=%d" % i) if i == 1: print("我是break哦...") break else: print("我是else中的代码...")
运行结果:
i=0 i=1 我是break哦..
.
3. 案例
for i in range(3, 0, -1): password = input("请输入密码:(还剩%d次机会)" % i) if password == "123456": print("密码输入正确") break else: print("密码输入3次全部错误,请明日再试")
四、验证continue
我们知道continue
的作用是结束本次循环,那么既然break
在for...else...
和while...else...
中都起作用,那么continue呢?
接下来我们就验证一下
验证1
i = 0 while i < 3: i += 1 print("来了老弟...") continue print("一起学Python啊,别忘了来 codetutor.top网站哈") else: print("我是else中的代码...")
运行结果
来了老弟... 来了老弟... 来了老弟... 我是else中的代码...
验证2
for i in range(3): print("来了老弟...") continue print("一起学Python啊,别忘了来 codetutor.top网站哈") else: print("我是else中的代码...")
运行结果
来了老弟... 来了老弟... 来了老弟... 我是else中的代码...
结论:
- 在
while...else...
与for...else...
中,break
会让else
中的代码不执行,而continue
没有这个功能