博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python--用户登录验证
阅读量:5031 次
发布时间:2019-06-12

本文共 2683 字,大约阅读时间需要 8 分钟。

目标要求:

1、最多输入3次用户名密码,

2、如果是被锁用户,则一次即退出程序,

3、如果输入正确的用户名密码,则提示登陆成功,程序结束,

4、3次输入不对,会将用户写入被锁用户列表,当然,该用户名需要是在注册用户列表中的。

实现用到的知识:

1、函数定义,将验证用户是否是被锁用户、用户名密码是否匹配、以及将用户加入被锁列表定义为3个独立函数

2、文件打开读写,以读r、追加a方式打开,然后用readline和readlines两种方式读取,并对取出的字符串进行strip和split处理,再比对,用write写入,最后记得close

碰到的问题:

1、中文文件读取乱码的问题   

  首先建立的utf-8编码的txt文件,输入了中文内容,采用的python3,一开始使用open(文件名,"r")来打开文件读取,出现乱码问题。按理说python3默认unicode,txt文件也是utf-8保存的,用的pycharm编辑工具进行了utf-8 coding的设置,各处都是一致的,没道理读出来是乱码。后来在pycharm工具中打开了txt文件,却发现该文件是ascii码,于是另存为。。。考虑到txt文件可能不会特别注意到coding方式,所以在open中显式指定encoding,问题解决。

2、该程序没能解决一种登陆情况

  程序原本的要求,用户输入3次,错误的话,就锁用户。一般情况,大家只知道自己的用户名,只会对自己的一个用户名进行登陆操作,那么输错3次,该用户名被锁,ok,正常。另一种情况,3次输入的是不同的用户名(可能用户没记住注册的是哪个名字),那么3次输错后,只能锁定最后一次输入的用户名,而该用户名可能只被尝试输错了一次。

1 import getpass 2 import os 3 print("***此程序用于验证用户登录。***") 4 print("***用户最多可输入3次用户名和密码。***") 5 print("***输入正确,有提示,不用输满3次,同一个用户名输入错误3次,会被锁***\n\n") 6  7 def checklock(name,lockfile): 8     fd=open(lockfile,'r',encoding="utf-8") 9     lockusername = fd.readlines()10     maxidx = len(lockusername) - 111     i = 012     while i <= maxidx:13         if name == lockusername[i].strip("\n"):14             print("用户被锁,请联系管理员")15             fd.close()16             return True17         i+=118     fd.close()19     return False20 21 def checkmatch(name,password,userfile):22     fd=open(userfile,'r',encoding="utf-8")23     line=fd.readline()24     while line:25         linedate = line.strip("\n").split(" ")26         line=fd.readline()27         if name == linedate[0] and password == linedate[1]:28             print("用户名密码正确,登陆成功。")29             fd.close()30             return True31     print("用户名密码不正确。")32     fd.close()33     return False34 35 def addlockuser(name,userfile,userlockfile):36     fd1=open(userfile,"r",encoding="utf-8")37     fd2=open(userlockfile, "a", encoding="utf-8")38     line=fd1.readline()39     while line:40         linedate=line.split(" ")41         line=fd1.readline()42         if name==linedate[0]:43             fd2.write(name+"\n")44             print(name+"被加入被锁用户列表")45             return46     fd1.close()47     fd2.close()48 49 trynum=150 while trynum<=3:51     #获得用户输入的用户名和密码52     print("第"+str(trynum)+"次输入。\n")53     trynum +=154     name=input("Username: ")55     password=input("Password: ")56     #password=getpass.getpass("Password: ") #需要在cmd的python解释器下运行,pycharm不能模拟57 58     #判断输入的用户名是否在被锁用户列表中59     if checklock(name,"lockuser.txt"):60         exit()61     #判断是否和存储的用户名密码匹配62     elif checkmatch(name,password,"user.txt"):63         exit()64     elif trynum==4:65     #3次输入不对,加入被锁用户文件66         addlockuser(name,"user.txt","lockuser.txt")67         exit()

 

转载于:https://www.cnblogs.com/susenyan/p/7159130.html

你可能感兴趣的文章
IOS 开发调用打电话,发短信
查看>>
CI 框架中的日志处理 以及 404异常处理
查看>>
keepalived介绍
查看>>
css3 标签 background-size
查看>>
python itertools
查看>>
Linux内核调试技术——jprobe使用与实现
查看>>
ubuntu设计文件权限
查看>>
关于DataSet事务处理以及SqlDataAdapter四种用法
查看>>
http://lorempixel.com/ 可以快速产生假图
查看>>
工程经验总结之吹水"管理大境界"
查看>>
20189210 移动开发平台第六周作业
查看>>
java之hibernate之基于外键的双向一对一关联映射
查看>>
rxjs一句话描述一个操作符(1)
查看>>
第一次独立上手多线程高并发的项目的心路历程
查看>>
ServiceStack 介绍
查看>>
Centos7下载和安装教程
查看>>
无谓的通宵加班之后的思索
查看>>
S1的小成果:MyKTV系统
查看>>
从setting文件导包
查看>>
编写一个函数isMerge,判断一个字符串str是否可以由其他两个字符串part1和part2“组合”而成...
查看>>