基本语法
while 条件: # 当条件的结果为 True的时候,会一直运行 下面的执行代码执行代码
while True:print("😀")
break 中断循环
break 在while循环中,可以中断整个while循环。
passwd = "8888"while True:type_passwd = input("请输入密码:")# 如果输入的密码正确,停止循环if type_passwd == passwd:print("恭喜你🎉 成功破解密码")# 中断循环breakelse: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 前面添加三个0if len(str_num) == 1:str_num = f"000{str_num}"# 字符串的长度为2 前面添加2个0elif len(str_num) == 2:str_num = f"00{str_num}"# 字符串的长度为3 前面添加1个0elif 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:breakprint(n)
上面的程序运行结果为
0123
当n的值为4的时候,会break 整个for循环就停止了。break后面的语句也不会执行了。
for n in range(10):if n == 4:continue # 当n=4的时候会停止当次的循环,继续下一次循环print(n)
012356789
可以看到,当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循环")
执行结果
012成功执行完成for循环
for循环执行过程中被中断了。
for i in range(3):print(i)if i==2:breakelse:print("这里是永远不会打印出来的。因为上面for循环被break")
因为上面的for循环当 i的值为2的时候被break,所有下面的else语句不会被执行。
上面的代码输出结果
012
应用场景举例:
设计一段程序,模拟用户ATM机取款输入密码的操作。
- 如果密码输错三次,退卡,并告知明天再来。
- 如果密码在三次之内输入正确,进入系统。
passwd = "888888"for i in range(3):# 如果三次都没有输入正确,也就是三次没有被breakpasswd_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("业务办理完毕,欢迎下次再来")breakelse: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:breaktotal_money = total_money-moneyprint(f'成功取款{money},余额为{total_money}')break # 中断while 循环elif option == "B":print(f"您当前的存款为¥{total_money}")breakelif option == "C":money = int(input('进入存款界面,请输入存款金额:'))print(f'成功存入{money},现在余额为{total_money+money}')breakelse:print("没有此类服务,请重新输入")# 办理完成业务 退出程序print("业务办理完毕,欢迎下次再来")breakelse:print("三次密码输入错误,请明天再来!!!")
