作业要求:
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