编写登陆认证程序

基础需求

让用户输入用户名密码

认证成功后显示欢迎信息

输错三次后退出程序

升级需求

可以支持多个用户登录 (提示,通过列表存多个账户信息)

用户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])