作业:编写登陆接口
- 输入用户名密码
- 认证成功后显示欢迎信息
- 输错三次后锁定
帐号文件account.txt内容如下:
sam 123
david 12
kevin 123
lin 12
tailen 123
jack 12
锁文件account_lock.txt默认为空
1、流程图如下:
二、针对帐号文件里的不存在的用户也可以进行判断并锁定,针对用户和密码共有三次错误重试机会
1 #_*_ coding:utf-8 _*_ 2 3 import sys,os,getpass 4 5 os.system(‘clear‘) 6 7 retry_limit = 3 8 retry_count = 0 9 10 account_file = ‘account.txt‘ 11 lock_file = ‘account_lock.txt‘ 12 13 while retry_count < retry_limit: #只要重试不超过3次就不断循环 14 username = raw_input(‘\033[31;43mUsername:\033[0m‘) 15 username = username.strip() 16 lock_check = open(lock_file) #当用户输入用户名后,打开LOCK 文件 以检查是否此用户已经LOCK了 17 18 for line in lock_check.readlines(): #循环LOCK文件 19 if username == line.strip(‘\n‘): #去掉换行符 20 sys.exit(‘\033[35mUser %s is locked!!!\033[0m‘ % username) #如果LOCK了就直接退出 21 password = raw_input(‘\033[32;41mPassword:\033[0m‘) #输入密码 22 23 f = open(account_file,‘r‘) #打开帐号文件 24 match_flag = False # 默认为Flase,如果用户match 上了,就设置为 True 25 26 for line in f.readlines(): 27 user,passwd = line.strip(‘\n‘).split() #去掉每行多余的\n并把这一行按空格分成两列,分别赋值为user,passwd两个变量 28 if username == user and password == passwd: #判断用户名和密码是否都相等 29 print(‘hello, %s !!‘ % username) 30 match_flag = True #相等就把循环外的match_flag变量改为了True 31 break #然后就不用继续循环了,直接 跳出,因为已经match上了 32 f.close() 33 34 if match_flag == False: #如果match_flag还为False,代表上面的循环中跟本就没有match上用户名和密码,所以需要继续循环 35 print(‘sorry,%s is unmatched‘ % username) 36 retry_count += 1 #计数器加1 37 else: 38 print(‘wlecome login my learning system!‘) 39 break #用户成功登录,退出脚本 40 41 else: 42 print("you account %s is locked!!!" % username) 43 g = open(lock_file,‘a‘) 44 g.write(username) #被锁用户追加到用户锁文件 45 g.write(‘\n‘) 46 g.close()