作业要求:
1. 用户输入帐号密码进行登陆
2. 用户信息保存在文件内
3. 用户密码输入错误三次后锁定用户
4. 已锁定用户下次登陆直接禁止登陆
按老师要求,先画流程图,我用的visio,图形,线性规则也不太懂,请评论区留言指正。

作业重点问题分析:
1.账号密码需要存储在一个文件里,假设这是一个文本文件,假设每一样都存储一组账号和密码,那文件中,账号和密码之间需要有个分割标志,假设账号和密码必须用字母,那么分割标志不能是字母。
2.不同账号可能有相同的密码,不同密码也可能有相同的账号,用户名in文件中,且密码也in文件中,但用户输入的用户名跟密码可能对应的并不正确。为保证从文件读入的账号密码肯定是对应的,最好账号和密码成对读取到变量中,结合python的数据类型,字典符合这个特征。
3.被锁定的用户可以从文件读取到列表中。
下面是代码:
1 # coding=utf-8 #声明字符集
2 import os #需要对文件进行操作,所以要对OS模块进行调用
3 import csv #需要读取csv格式的账号密码文件,所以要对csv模块进行调用
4 AccountPassWord=open('Account_passwd.csv','r') #以只读方式打开存储用户名密码的文件
5 AccountPassWordList={}#建立一个字典变量,用于存储全部的账号密码
6 for item in csv.DictReader(AccountPassWord): #csv.Dictreader方法可以获取字典类型的账号密码
7 AccountPassWordList[item["Account"]]=item["Passwd"] #将csv文件的Account和对应的Passwd字段的数据,形成“用户名”:“密码”的组成形式
8
9 LockedAccount=open('Locked_account.txt','r')
10 LockedAccount_W=open('Locked_account.txt','a')
11 LockedAccountList=[]
12 for item in LockedAccount:#将Locked_accout.txt中每行的用户名用列表的数据类型赋值给LockedAccountList变量
13 LockedAccountList.append(item.replace("\n","")) #通过切片,去掉换行符
14
15 def closef():#定义函数,用于关闭打开的文件
16 AccountPassWord.close()
17 LockedAccount.close()
18 LockedAccount_W.close()
19
20 InputAccout=input("请输入用户名,若退出登陆,请输入quit: ")
21
22 if InputAccout in LockedAccountList: #当输入的账号在已锁定的名单,告知账号已锁定。
23 print('您的账号已锁定,请联系管理员。')
24 closef()
25
26 if (InputAccout not in AccountPassWordList)&(InputAccout != 'quit'):#当输入的账号不存在,且输入的不是quit,显示需注册才可登陆。
27 print('您的账号不存在,请联系管理员注册账号')
28 closef()
29
30 if InputAccout == 'quit':#当输入的为quit时,程序结束,关闭已打开的文件,退出程序。
31 print("已退出")
32 closef()
33 if InputAccout not in LockedAccountList:#当输入的账号不在已锁定的清单里,进入密码是否正确判断。
34 for i in range(4): #循环4次,最大可输入三次密码。
35 if i==3:#当循环第4次时,将用户用户名写入到已锁定用户列表文件中
36 LockedAccount_W.writelines(InputAccout+'\n')
37 print("错误超过3次,账号已锁定,请联系管理员。")
38 closef()
39 break
40 if i<3:
41 InputPasswd = input('请输入密码: ')
42 if InputPasswd != AccountPassWordList[InputAccout]:
43 print('密码不正确,请重新输入!')
44 continue
45 elif InputPasswd==AccountPassWordList[InputAccout]:
46 print('登陆成功!')
47 closef()
48 break
















