# 需求:
# 模拟验证用户输入密码登录。要求有3次机会,如果用户只输错密码,则三次后锁定,下次再登陆则提示账号锁定.
# 如果用户名密码正确,则提示登陆成功.
目前需要完善的地方,特定用户的记数问题,如果输入两次liuxiaomao,再次输入liuxiaolu则会被锁定。
bb30lees-MacBook-Pro:01.basic bb30$ cat user_list.txt
liuxiaolu 123456
liuxiaogou 888888
liuxiaomao 654321
1 #!/usr/bin/env python3
2
3 # -*- coding:uft8 -*-
4 # Author: Lei Lei
5
6 # 需求:
7 # 模拟验证用户输入密码登录。要求有3次机会,如果用户只输错密码,则三次后锁定,下次再登陆则提示账号锁定.
8 # 如果用户名密码正确,则提示登陆成功.
9
10 # 定义变量
11 tries = 0 #尝试次数
12 tries_user = 0 #锁定现有用户的记数
13 account_flag = 0 #锁定标记,1为锁定,0为未锁定
14
15 while tries < 3 and account_flag == 0:
16 user_list = open('/Users/bb30/Documents/IT/pys/01.basic/user_list.txt', 'r', encoding="utf-8")
17 user_lock = open('/Users/bb30/Documents/IT/pys/01.basic/user_lock.txt', 'r+', encoding="utf-8")
18 user_name = input("Please Enter Your Name:")
19 user_pass = input("Please Enter Your Password:")
20 #判断是否被锁定.
21 for _user_lock in user_lock:
22 _user_block = _user_lock.strip()
23 if user_name == _user_block:
24 print("this account has been locked!")
25 account_flag = 1
26 break #只要匹配到锁定账号,就退出判断的循环.
27
28 #如果账号没锁定.
29 if account_flag == 0:
30 for _user_name in user_list:
31 _user = _user_name.strip().split() #把每行变成一个列表
32 #输入用户名和密码相同,显示登陆成功.
33 if user_name == _user[0] and user_pass == _user[1]:
34 print("Welcome to login...,", user_name)
35 account_flag = 1
36 break
37 elif user_name == _user[0] and user_pass != _user[1]:
38 print("wrong username or password!")
39 tries_user = tries_user + 1
40 tries = tries + 1
41 print("u have", 3 - tries, "chances left!\n")
42 if tries_user == 3:
43 user_lock.write("%s\n" %user_name)
44 print("lots of atempts, ur account has been locked.")
45 break
46 else:
47 print("wrong username or password!")
48 tries = tries + 1
49 print("u have", 3 - tries, "chances left!\n")
50
51 user_list.close()
52 user_lock.close()