要求:
- 实现登录,注册功能
- 输入三次错误,锁定用户
- 文本保存用户信息及锁定用户
1 # _author : Ahern Li 2 # @_date : 2017/9/22 3 4 print('---------- Welcome to use bugubugu ----------') 5 times = 3 # 三次登录机会 6 flag = True 7 # 主循环,选择登录,注册,退出 8 while flag: 9 choice = input("Are you want to login or registration(input 'quit' to exit)?\n>>>:") 10 if choice == 'login': # 登录 11 while flag: 12 username = input('Please input your username:') 13 password = input('Please input your password:') 14 # 读模式打开账户信息文本(记录已注册账户信息),文本格式如 Ahern:密码 15 with open('account.txt','r') as account: 16 for info in account: # 循环遍历用户名 17 u_n,p_w = info.split(':') # u_n 为用户名,p_w 为密码 18 if username == u_n.strip(): # 判断用户名是否存在 19 if password == p_w.strip(): # 判断密码是否正确 20 # 读模式打开锁定账户文本(记录已锁定账户),文本格式如 Ahern 21 with open('lock_account.txt','r') as lock_account: 22 # 循环遍历锁定用,判断是否为锁定用户 23 for lock_info in lock_account: 24 if username == lock_info: 25 print('Your account has been locked!') 26 flag = False # 若为锁定账户,flag = False 27 break 28 # 若flag = False ,则为锁定用户,退出,否则打印的登录成功 29 if flag == False: 30 break 31 print('Welcome to login,%s!' % username) 32 flag = False 33 break 34 # 密码错误,打印剩余机会 35 else: 36 times -= 1 37 print('Invalid of username or password,last %d times!' % times) 38 break 39 # 用户名不存在,打印剩余机会 40 else: 41 times -= 1 42 print('Invalid of username or password,last %d times!' % times) 43 # 若机会 times = 0 ,锁定账户文本记录用户信息,锁定账户 44 if times == 0: 45 print('Your chances are up and account is locked!') 46 with open('lock_account.txt','a') as lock_account: 47 lock_account.write(''.join(['\n',username])) 48 flag = False 49 elif choice == 'registration': # 注册 50 while flag: 51 username = input('Please input your username:') 52 # 读写模式打开锁定账户文本,判断用户名是否存在 53 with open('account.txt','r+') as account: 54 # 循环遍历,若用户已存在,打印用户名已被占用,否则账户信息文本记录用户名及密码 55 for info in account: 56 u_n,p_w = info.split(':') 57 if username == u_n.strip(): 58 print('Username has been occupied!') 59 break 60 # 若用户不存在,设置密码,打印注册成功 61 else: 62 password = input('Please input your password:') 63 account.write(''.join(['\n',username,':',password])) 64 print('Successful application!') 65 flag = False 66 elif choice == 'quit': # 退出 67 flag = False 68 else: 69 print('Please input argin!') 70 71 ''' 72 1.该程序设定,不管用户名或是者密码错误,均打印用户名或密码无效 73 2.该程序未判断用户名或密码的格式,可优化(简单) 74 3.该程序不含小退功能,可优化(简单) 75 4.该程序只能手动删除已锁定用户,正常应为数小时候自动解锁,可优化 76 思路:难道使用time模块?未学习,没思路 77 5.该程序最大的问题,当三次机会用完,只锁定最后一次用户信息,可优化 78 思路:将账户信息文本格式改为 Ahern:密码:times ,用 u_n ,p_w ,t 分别接收,当t = 0 锁定该用户 79 6.基本实现,有点乱,有时间再整理吧 80 '''