编写登陆认证程序
基础需求:
让用户输入用户名密码
认证成功后显示欢迎信息
输错三次后退出程序
升级需求:
可以支持多个用户登录 (提示,通过列表存多个账户信息)
用户3次认证失败后,退出程序,再次启动程序尝试登录时,还是锁定状态(提示:需把用户锁定的状态存到文件里)
思路:
1、基本需求通过一个while循环就可以解决,每次输入错误count+1,count<3就结束。
2、升级需求,若去掉“再次启动程序尝试登录时,还是锁定状态”的话,可以通过列表嵌套列表来实现,支持多个用户登录。
3、支持多用户且有账户锁定状态,可以将账户信息和锁定状态存入文件中,登陆验证时再把文件读出来进行对比,若锁定则无法登陆,若账户未锁定且密码正确就登陆成功。
4、文件名称可以以账户名称来命名,文件存储格式可以如下
['wllen', '123456', 1] # 第一个值为用户名,第二个值为用户密码,第三个值为账户锁定状态,暂定1可以登陆,0为锁定
代码如下:
1 #!/usr/bin/env python
2 # -*- coding=utf-8 -*-
3 """
4 @author:Wllen
5 @file:account.py
6 @time:2018/5/29 11:45
7 """
8 import os
9 count = 0
10 user_input = [] # 用来存储每次输入的用户名,为后面判断三次输入同一个用户名锁定用户做准备
11 while count < 3: # 密码错误时循环三次
12 username = input('请输入您的用户名:').strip()
13 userpasswd = input('请输入您的密码:').strip()
14 account_file = "db/%s" % username
15 if os.path.isfile(account_file): # 导入系统模块,判断输入username名称的文件是否存在
16 f = open(account_file,'r', encoding='utf-8')
17 account = eval(f.read()) # 文件存储的就是列表格式,读取的时候时字符串,需要转换成原来的格式
18 f.close()
19 if account[2] == 1: # 判断用户是否是锁定状态,0为锁定
20 if username == account[0] and userpasswd == account[1]:
21 print("欢迎%s来到Python的世界!"% username)
22 break
23 else:
24 count += 1
25 user_input.append(username)
26 print("您的账号或密码错误,请重新输入!剩余次数%s" % (3 - count))
27 else:
28 print('用户名%s已被锁定,请联系管理员处理!'% username)
29 else:
30 print("没有此用户,联系管理员创建!")
31
32 if user_input[0] == user_input[1] and user_input[1] == user_input[2]:
33 account[2] = 0
34 with open("db/%s"% user_input[0], 'w', encoding='utf-8') as f:
35 f.write(str(account))
36 print('用户%s已经被锁定!'% user_input[0])