1. for循环
# for是有限循环,while是无限循环 # for后面也是可以接else _user = "zgzeng" _psw = "zgz" # 限制登陆3次,如果3次登陆失败了,就会自动退出 for i in range(3): username = input("Your name:") password = input("Your password:") if username == _user and password == _psw: print("welcome to login our system!!!") else: print("Invalid your username or password!!!") # 当登陆3次都失败了,优化给出提示再退出 # 方法1:使用标记 flag = False for i in range(3): username = input("Your name:") password = input("Your password:") if username == _user and password == _psw: print("welcome to login our system!!!") # 当flag =True的时候,会执行后面if的代码 flag = True break else: print("Invalid your username or password!!!") if not flag: print("试了三次!") # 方法2:除了if后面可以接else外,for后面也可以接 for i in range(3): username = input("Your name:") password = input("Your password:") if username == _user and password == _psw: print("welcome to login our system!!!") break else: print("Invalid your username or password!!!") else: print("已经试了三次!") # for循环后面可以接else,但不可以elif # for循环程序执行,当程序正常执行完成,就会执行else,如果不正常执行,就不会执行else,这里3次以内登陆之后,就会break跳出程序,这里就是不正常执行,就不会执行else程序,而3次以内没能登陆成功,就会执行到else程序
方法1和方法2的效果都是一样,但是明显方法2更加简洁
2.while循环
while循环如果不加条件,就是一个死循环
while也是可以接else,与for效果是一样的
counter = 0 while counter > 3: username = input("Your name:") password = input("Your password:") if username == _user and password == _psw: print("welcome to login our system!!!") # 当flag =True的时候,会执行后面if的代码 flag = True break else: print("Invalid your username or password!!!") counter += 1 else: print("已经试了三次!!!")
# 程序优化每试3次,3次失败后,给出选择提示,是否继续尝试登陆 # 思路:每当循环试了3次之后,程序就会给出选择,那么我们就需要每尝试3次之后,就将counter清零 _user2 = "zgzeng" _pwd = "zgzeng" counter = 0 while counter < 3: username = input("请输入用户名:") password = input("请输入密码:") if _user2 == username and password == _pwd: print("欢迎登陆我的程序") break else: print("您的用户名或者密码有误") counter += 1 keep_going_choice = input("输入[y]将继续,其他退出") if keep_going_choice == "y": counter = 0 # 这里的执行效果是每执行1次,程序就会问是否继续,并没有实现我们理想中的效果(3次询问一次)
需要再加一个判断
_user2 = "zgzeng" _pwd = "zgzeng" counter = 0 while counter < 3: username = input("请输入用户名:") password = input("请输入密码:") if _user2 == username and password == _pwd: print("欢迎登陆我的程序") break else: print("您的用户名或者密码有误") counter += 1 if counter == 3: # 加一个判断 keep_going_choice = input("输入[y]将继续,其他退出") if keep_going_choice == "y": counter = 0
将循环和嵌套循环中的两次break进行关联也需要用到标记位
flag = False # 目标:嵌套层循环break,我外层循环因为内层循环跳出也跳出,否则不跳出 # 知识点:标记位 for i in range(10): if i > 5: print(i) for j in range(10): print("第二层:",j) if j == 6: flag = True break if flag == True: # 这就将两个break关联起来了 break