python登陆认证作业实现

作业题目: 编写登陆认证程序

作业需求:

基础需求:
让用户输入用户名密码
认证成功后显示欢迎信息
输错三次后退出程序

升级需求:
可以支持多个用户登录 (提示,通过列表存多个账户信息)
用户3次认证失败后,退出程序,再次启动程序尝试登录时,还是锁定状态(提示:需把用户锁定的状态存到文件里)

需求分析:

1、账号锁定状态保存,需要使用文件操作。
2、功能实现分解:
    > 验证用户输入名是否存在
    > 用户存在且未锁定,则开始验证密码
    > 3次登录机会内,密码匹配正确则登录成功
    > 登录次数超限则禁用改账户,并保存账号状态

功能实现:

  一、新建文件  userList  用来保存用户表,格式如下:

  采用python内置数据类型 列表 的格式进行保存,单个用户信息为  字典 格式,通过文件读取出字符串,使用  eval() 方法转换为 列表 ,方便代码操作。

 1 [
 2     {
 3         'username': 'user1',
 4         'password': 'password1',
 5         'status': 0
 6     },
 7     {
 8         'username': 'user2',
 9         'password': 'password2',
10         'status': 0
11     },
12     {
13         'username': 'user3',
14         'password': 'password3',
15         'status': 1
16     }
17 ]

  二、新建文件 code.py ,编写初始化代码

 1 #初始化一个全局变量为空列表,用以保存用户列表数据
 2 userList = []
 3 
 4 #定义初始化方法,从文件中获取用户列表数据
 5 def init() :
 6     global userList
 7     f = open("userList", "r")
 8     userList_str = f.read()
 9     f.close()
10     userList = eval(userList_str)
11 
12 #调用初始化方法
13 init()

  三、登录方法

 1 '''
 2 验证用户名是否存在
 3 存在则返回用户在用户列表中的索引值
 4 不存在则返回-1,表示不存在
 5 单独封装,方便调用
 6 '''
 7 def getUserInfo(username) :
 8     for index, item in enumerate(userList):
 9         if item['username'] == username :
10             return index
11     else :
12         return -1
13 
14 '''
15 登录方法
16 循环调用input()方法
17 根据用户输入匹配用户名
18 匹配成功则跳出循环,开始校验密码
19 '''
20 def login() :
21     global userList
22     while True:
23         username = input('请输入用户名:')
24         uid = getUserInfo(username)
25         if uid >= 0 :
26             #用户status=0时为正常,status=1时为禁用
27             if userList[uid]['status'] == 0 :
28                 checkPassword(uid)
29                 break
30             else:
31                 print('该账号已被禁用,请重新输入!')
32         else:
33             print('用户不存在,请重新输入!')   

  四、密码校验

 1 def checkPassword(uid) :
 2     global userList
 3     count = 1
 4     while count < 4:
 5         password = input('请输入密码:')
 6         if userList[uid]['password'] == password:
 7             print('你好,%s ,登陆成功'%(userList[uid]['username']))
 8             break
 9         else:
10             count = count + 1
11             if count == 4 :
12                 editUser(uid, 'status', 1)#设置当前尝试登陆账号的status值为1(禁用)
13                 print('密码不正确,超出登陆次数限制,该账号被禁用!')
14             else :
15                 print('密码不正确,请重新重输入,还有 %d 次输入机会!' %(4-count))

  五、修改用户信息

1 #修改用户列表数据
2 def editUser( uid, key, val ):
3     global userList
4     userList[uid][key]=val
5     f = open("userList", "w")
6     f.write(str(userList))
7     f.close()

至此任务完成,完整代码如下:

 1 #初始化一个全局变量为空列表,用以保存用户列表数据
 2 userList = []
 3 
 4 #定义初始化方法,从文件中获取用户列表数据
 5 def init() :
 6     global userList
 7     f = open("userList", "r")
 8     userList_str = f.read()
 9     f.close()
10     userList = eval(userList_str)
11 
12 #修改用户列表数据
13 def editUser( uid, key, val ):
14     global userList
15     userList[uid][key]=val
16     f = open("userList", "w")
17     f.write(str(userList))
18     f.close()
19 
20 #验证用户名是否存在,存在则返回用户信息
21 def getUserInfo(username) :
22     for index, item in enumerate(userList):
23         if item['username'] == username :
24             return index
25     else :
26         return -1
27 
28 def login() :
29     global userList
30     while True:
31         username = input('请输入用户名:')
32         uid = getUserInfo(username)
33         if uid >= 0 :
34             if userList[uid]['status'] == 0 :#用户status=0时为正常,status=1时为禁用
35                 checkPassword(uid)
36                 break
37             else:
38                 print('该账号已被禁用,请重新输入!')
39         else:
40             print('用户不存在,请重新输入!')
41 
42 def checkPassword(uid) :
43     global userList
44     count = 1
45     while count < 4:
46         password = input('请输入密码:')
47         if userList[uid]['password'] == password:
48             print('你好,%s ,登陆成功'%(userList[uid]['username']))
49             break
50         else:
51             count = count + 1
52             if count == 4 :
53                 editUser(uid, 'status', 1)#设置当前尝试登陆账号的status值为1(禁用)
54                 print('密码不正确,超出登陆次数限制,该账号被禁用!')
55             else :
56                 print('密码不正确,请重新重输入,还有 %d 次输入机会!' %(4-count))
57 
58 #调用初始化方法
59 init()
60 #开始登陆
61 login()
View Code

功能实现使用到的知识点:

1、文件读写操作

2、python函数创建、传参、返回值

3、变量作用域

4、 enumerate()  函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标

5、while循环、终止循环

6、数据类型:字符串、列表、整型、字典

7、执行字符串表达式: eval() 

8、其它数据类型转为字符串: str() 

posted @ 2018-04-11 17:01  灰色影子  阅读(266)  评论(0编辑  收藏  举报