基本语法
while 条件: # 当条件的结果为 True的时候,会一直运行 下面的执行代码
执行代码
while True:
print("😀")
break 中断循环
break 在while循环中,可以中断整个while循环。
passwd = "8888"
while True:
type_passwd = input("请输入密码:")
# 如果输入的密码正确,停止循环
if type_passwd == passwd:
print("恭喜你🎉 成功破解密码")
# 中断循环
break
else:
print("输入密码错误,请重新输入!")
同样的,break 也可以中断 for循环。下面举例来说明。
- 提示用户输入4位数字密码,
- 使用for循环暴力破解密码,
- 如果密码正确,终止循环。并打印出破解之后的密码。
while True:
passwd1 = input("请设置您的密码(使用4位数字):")
passwd2 = input('请确认密码:')
# 如果第一次输入的密码不等于第二次输入的密码
if passwd1 != passwd2:
print("两次输入密码不一致!请重新开始")
else:
print('设置密码成功! 开始破解密码')
for n in range(10000):
print(f"使用{n}开始破解")
if str(n) == passwd1:
# 如果相等 停止循环
print(f"恭喜🎉,密码破解成功,密码为{n}")
break # break在for循环中,中断for循环
break # 中断while循环
上面的程序还有bug, 如果passwd1 设置的密码为 "0000"
, 而我们for 循环的时候是从数字0开始的,虽然设置将 数字转换为字符串的操作。
但是 "0"
很明显不等于 "0000"
, 所以要对上面的程序进行优化。
- 当n的值为 1 位数字的时候,前面要为n添加 3个 字符串 0
- 当n的值为 2 位数字的时候,前面要为n添加 2个 字符串 0
- 当n的值为 3 位数字的时候,前面要为n添加 1个 字符串 0
while True:
passwd1 = input("请设置您的密码(使用4位数字):")
passwd2 = input('请确认密码:')
# 如果第一次输入的密码不等于第二次输入的密码
if passwd1 != passwd2:
print("两次输入密码不一致!请重新开始")
else:
print('设置密码成功! 开始破解密码')
for n in range(10000):
# 将数字转换为字符串
str_num = str(n)
# 数字字符串的长度小于4,前面都要添加0
# 字符串的长度为1 前面添加三个0
if len(str_num) == 1:
str_num = f"000{str_num}"
# 字符串的长度为2 前面添加2个0
elif len(str_num) == 2:
str_num = f"00{str_num}"
# 字符串的长度为3 前面添加1个0
elif len(str_num) == 3:
str_num = f"0{str_num}"
print(f"使用{str_num}开始破解")
if str_num == passwd1:
# 如果相等 停止循环
print(f"恭喜🎉,密码破解成功,密码为{str_num}")
break # break在for循环中,中断for循环
break # 中断while循环
continue继续循环
与break不同的时,break 中断中的当前所有的循环,而 continue中断的是当次的循环。
下面举例
for n in range(10):
if n==4:
break
print(n)
上面的程序运行结果为
0
1
2
3
当n的值为4的时候,会break 整个for循环就停止了。break后面的语句也不会执行了。
for n in range(10):
if n == 4:
continue # 当n=4的时候会停止当次的循环,继续下一次循环
print(n)
0
1
2
3
5
6
7
8
9
可以看到,当n为4的时候,跳过当次的循环。
break和continue的区别
- break中断的是整个循环,continue中断的是单次循环。
- break和continue都能在for 和while循环中使用。
for… else …
在for循环之后添加else ,如果for循环正常执行中间没有被 break ,那么会执行else中的语句。如果for循环中间在执行的时候被break中断了,那么 else中的代码将不会执行。
for i in range(3):
print(i)
else:
print("成功执行完成for循环")
执行结果
0
1
2
成功执行完成for循环
for循环执行过程中被中断了。
for i in range(3):
print(i)
if i==2:
break
else:
print("这里是永远不会打印出来的。因为上面for循环被break")
因为上面的for循环当 i的值为2的时候被break,所有下面的else语句不会被执行。
上面的代码输出结果
0
1
2
应用场景举例:
设计一段程序,模拟用户ATM机取款输入密码的操作。
- 如果密码输错三次,退卡,并告知明天再来。
- 如果密码在三次之内输入正确,进入系统。
passwd = "888888"
for i in range(3):
# 如果三次都没有输入正确,也就是三次没有被break
passwd_in = input("请输入你的密码")
if passwd_in == passwd:
print("输入成功,进入主页!")
break
#else 对应的是for循环 当for循环执行完没有被中断,才会运行else 中的语句
else:
print("密码输错三次,明天再来!!")
作业:
设计模拟去ATM机进行取款的程序
- 提示用户输入自己的存款总额
- 提示用户输入自己的密码
- 开始模拟登录,最多输入三次密码,如果三次密码都输入错误,退卡并提示用户明天再来。
- 用户输入密码正确提示用户开始选择服务选项
- 服务A - 取款
- 提示用户输入 取款金额
- 如果取款金额大于存款金额,提示非法输入,请重新输入取款金额
- 如果取款金额小于等于存款,打印存款金额,取款金额,以及余额
- 提示用户输入 取款金额
- 服务B - 查询余额
- 打印出余额
- 服务C - 存款
- 输入存款金额,打印出存款金额,自己的总余额
- 服务A - 取款
- 完成以上的任一服务,打印出业务办理完成,欢迎下次再来
# 用户自定义存款总额
total_money = int(input("请输入存款总额"))
passwd = input("设置6位数密码")
for i in range(3):
type_passwd = input("请输入密码")
# 密码输入正确
if passwd==type_passwd:
# 开始办理业务
# ... 开始你们写代码
# 办理完成业务 退出程序
print("业务办理完毕,欢迎下次再来")
break
else:
print("明天再来!!!")
# 用户自定义存款总额
total_money = int(input("请输入存款总额"))
passwd = input("设置6位数密码")
for i in range(3):
type_passwd = input("请输入密码")
# 密码输入正确
if passwd == type_passwd:
# 开始办理业务
# ... 开始你们写代码
print("进入系统,现在开始办理业务。请选择对应的业务类型")
# \n 换行符
print("A-取款业务\nB-查询余额\nC-存款")
# 用户选择
while True:
option = input('请选择: [A/B/C]')
if option=="A":
while True:
money = int(input('进入取款界面,请输入取款金额:'))
if money>total_money:
print(f"余额不足!,请重新")
else:
break
total_money = total_money-money
print(f'成功取款{money},余额为{total_money}')
break # 中断while 循环
elif option == "B":
print(f"您当前的存款为¥{total_money}")
break
elif option == "C":
money = int(input('进入存款界面,请输入存款金额:'))
print(f'成功存入{money},现在余额为{total_money+money}')
break
else:
print("没有此类服务,请重新输入")
# 办理完成业务 退出程序
print("业务办理完毕,欢迎下次再来")
break
else:
print("三次密码输入错误,请明天再来!!!")