基本语法

  1. while 条件: # 当条件的结果为 True的时候,会一直运行 下面的执行代码
  2. 执行代码
  1. while True:
  2. print("😀")

break 中断循环

break 在while循环中,可以中断整个while循环。

  1. passwd = "8888"
  2. while True:
  3. type_passwd = input("请输入密码:")
  4. # 如果输入的密码正确,停止循环
  5. if type_passwd == passwd:
  6. print("恭喜你🎉 成功破解密码")
  7. # 中断循环
  8. break
  9. else:
  10. print("输入密码错误,请重新输入!")

同样的,break 也可以中断 for循环。下面举例来说明。

  1. 提示用户输入4位数字密码,
  2. 使用for循环暴力破解密码,
  3. 如果密码正确,终止循环。并打印出破解之后的密码。
  1. while True:
  2. passwd1 = input("请设置您的密码(使用4位数字):")
  3. passwd2 = input('请确认密码:')
  4. # 如果第一次输入的密码不等于第二次输入的密码
  5. if passwd1 != passwd2:
  6. print("两次输入密码不一致!请重新开始")
  7. else:
  8. print('设置密码成功! 开始破解密码')
  9. for n in range(10000):
  10. print(f"使用{n}开始破解")
  11. if str(n) == passwd1:
  12. # 如果相等 停止循环
  13. print(f"恭喜🎉,密码破解成功,密码为{n}")
  14. break # break在for循环中,中断for循环
  15. break # 中断while循环

上面的程序还有bug, 如果passwd1 设置的密码为 "0000", 而我们for 循环的时候是从数字0开始的,虽然设置将 数字转换为字符串的操作。
但是 "0" 很明显不等于 "0000", 所以要对上面的程序进行优化。

  1. 当n的值为 1 位数字的时候,前面要为n添加 3个 字符串 0
  2. 当n的值为 2 位数字的时候,前面要为n添加 2个 字符串 0
  3. 当n的值为 3 位数字的时候,前面要为n添加 1个 字符串 0
  1. while True:
  2. passwd1 = input("请设置您的密码(使用4位数字):")
  3. passwd2 = input('请确认密码:')
  4. # 如果第一次输入的密码不等于第二次输入的密码
  5. if passwd1 != passwd2:
  6. print("两次输入密码不一致!请重新开始")
  7. else:
  8. print('设置密码成功! 开始破解密码')
  9. for n in range(10000):
  10. # 将数字转换为字符串
  11. str_num = str(n)
  12. # 数字字符串的长度小于4,前面都要添加0
  13. # 字符串的长度为1 前面添加三个0
  14. if len(str_num) == 1:
  15. str_num = f"000{str_num}"
  16. # 字符串的长度为2 前面添加2个0
  17. elif len(str_num) == 2:
  18. str_num = f"00{str_num}"
  19. # 字符串的长度为3 前面添加1个0
  20. elif len(str_num) == 3:
  21. str_num = f"0{str_num}"
  22. print(f"使用{str_num}开始破解")
  23. if str_num == passwd1:
  24. # 如果相等 停止循环
  25. print(f"恭喜🎉,密码破解成功,密码为{str_num}")
  26. break # break在for循环中,中断for循环
  27. break # 中断while循环

continue继续循环

与break不同的时,break 中断中的当前所有的循环,而 continue中断的是当次的循环。
下面举例

  1. for n in range(10):
  2. if n==4:
  3. break
  4. print(n)

上面的程序运行结果为

  1. 0
  2. 1
  3. 2
  4. 3

当n的值为4的时候,会break 整个for循环就停止了。break后面的语句也不会执行了。

  1. for n in range(10):
  2. if n == 4:
  3. continue # 当n=4的时候会停止当次的循环,继续下一次循环
  4. print(n)
  1. 0
  2. 1
  3. 2
  4. 3
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9

可以看到,当n为4的时候,跳过当次的循环。


break和continue的区别

  1. break中断的是整个循环,continue中断的是单次循环。
  2. break和continue都能在for 和while循环中使用。

for… else …

在for循环之后添加else ,如果for循环正常执行中间没有被 break ,那么会执行else中的语句。如果for循环中间在执行的时候被break中断了,那么 else中的代码将不会执行。

  1. for i in range(3):
  2. print(i)
  3. else:
  4. print("成功执行完成for循环")

执行结果

  1. 0
  2. 1
  3. 2
  4. 成功执行完成for循环

for循环执行过程中被中断了。

  1. for i in range(3):
  2. print(i)
  3. if i==2:
  4. break
  5. else:
  6. print("这里是永远不会打印出来的。因为上面for循环被break")

因为上面的for循环当 i的值为2的时候被break,所有下面的else语句不会被执行。
上面的代码输出结果

  1. 0
  2. 1
  3. 2

应用场景举例:
设计一段程序,模拟用户ATM机取款输入密码的操作。

  1. 如果密码输错三次,退卡,并告知明天再来。
  2. 如果密码在三次之内输入正确,进入系统。
  1. passwd = "888888"
  2. for i in range(3):
  3. # 如果三次都没有输入正确,也就是三次没有被break
  4. passwd_in = input("请输入你的密码")
  5. if passwd_in == passwd:
  6. print("输入成功,进入主页!")
  7. break
  8. #else 对应的是for循环 当for循环执行完没有被中断,才会运行else 中的语句
  9. else:
  10. print("密码输错三次,明天再来!!")

作业:

设计模拟去ATM机进行取款的程序

  1. 提示用户输入自己的存款总额
  2. 提示用户输入自己的密码
  3. 开始模拟登录,最多输入三次密码,如果三次密码都输入错误,退卡并提示用户明天再来。
  4. 用户输入密码正确提示用户开始选择服务选项
    1. 服务A - 取款
      1. 提示用户输入 取款金额
        1. 如果取款金额大于存款金额,提示非法输入,请重新输入取款金额
        2. 如果取款金额小于等于存款,打印存款金额,取款金额,以及余额
    2. 服务B - 查询余额
      1. 打印出余额
    3. 服务C - 存款
      1. 输入存款金额,打印出存款金额,自己的总余额
  5. 完成以上的任一服务,打印出业务办理完成,欢迎下次再来

  1. # 用户自定义存款总额
  2. total_money = int(input("请输入存款总额"))
  3. passwd = input("设置6位数密码")
  4. for i in range(3):
  5. type_passwd = input("请输入密码")
  6. # 密码输入正确
  7. if passwd==type_passwd:
  8. # 开始办理业务
  9. # ... 开始你们写代码
  10. # 办理完成业务 退出程序
  11. print("业务办理完毕,欢迎下次再来")
  12. break
  13. else:
  14. print("明天再来!!!")

  1. # 用户自定义存款总额
  2. total_money = int(input("请输入存款总额"))
  3. passwd = input("设置6位数密码")
  4. for i in range(3):
  5. type_passwd = input("请输入密码")
  6. # 密码输入正确
  7. if passwd == type_passwd:
  8. # 开始办理业务
  9. # ... 开始你们写代码
  10. print("进入系统,现在开始办理业务。请选择对应的业务类型")
  11. # \n 换行符
  12. print("A-取款业务\nB-查询余额\nC-存款")
  13. # 用户选择
  14. while True:
  15. option = input('请选择: [A/B/C]')
  16. if option=="A":
  17. while True:
  18. money = int(input('进入取款界面,请输入取款金额:'))
  19. if money>total_money:
  20. print(f"余额不足!,请重新")
  21. else:
  22. break
  23. total_money = total_money-money
  24. print(f'成功取款{money},余额为{total_money}')
  25. break # 中断while 循环
  26. elif option == "B":
  27. print(f"您当前的存款为¥{total_money}")
  28. break
  29. elif option == "C":
  30. money = int(input('进入存款界面,请输入存款金额:'))
  31. print(f'成功存入{money},现在余额为{total_money+money}')
  32. break
  33. else:
  34. print("没有此类服务,请重新输入")
  35. # 办理完成业务 退出程序
  36. print("业务办理完毕,欢迎下次再来")
  37. break
  38. else:
  39. print("三次密码输入错误,请明天再来!!!")