目标要求:

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次输错后,只能锁定最后一次输入的用户名,而该用户名可能只被尝试输错了一次。

 import getpass
import os
print("***此程序用于验证用户登录。***")
print("***用户最多可输入3次用户名和密码。***")
print("***输入正确,有提示,不用输满3次,同一个用户名输入错误3次,会被锁***\n\n") def checklock(name,lockfile):
fd=open(lockfile,'r',encoding="utf-8")
lockusername = fd.readlines()
maxidx = len(lockusername) - 1
i = 0
while i <= maxidx:
if name == lockusername[i].strip("\n"):
print("用户被锁,请联系管理员")
fd.close()
return True
i+=1
fd.close()
return False def checkmatch(name,password,userfile):
fd=open(userfile,'r',encoding="utf-8")
line=fd.readline()
while line:
linedate = line.strip("\n").split(" ")
line=fd.readline()
if name == linedate[0] and password == linedate[1]:
print("用户名密码正确,登陆成功。")
fd.close()
return True
print("用户名密码不正确。")
fd.close()
return False def addlockuser(name,userfile,userlockfile):
fd1=open(userfile,"r",encoding="utf-8")
fd2=open(userlockfile, "a", encoding="utf-8")
line=fd1.readline()
while line:
linedate=line.split(" ")
line=fd1.readline()
if name==linedate[0]:
fd2.write(name+"\n")
print(name+"被加入被锁用户列表")
return
fd1.close()
fd2.close() trynum=1
while trynum<=3:
#获得用户输入的用户名和密码
print("第"+str(trynum)+"次输入。\n")
trynum +=1
name=input("Username: ")
password=input("Password: ")
#password=getpass.getpass("Password: ") #需要在cmd的python解释器下运行,pycharm不能模拟 #判断输入的用户名是否在被锁用户列表中
if checklock(name,"lockuser.txt"):
exit()
#判断是否和存储的用户名密码匹配
elif checkmatch(name,password,"user.txt"):
exit()
elif trynum==4:
#3次输入不对,加入被锁用户文件
addlockuser(name,"user.txt","lockuser.txt")
exit()

python--用户登录验证的更多相关文章

  1. Python程序练习1-模拟用户登录验证

    1.功能简介 此程序模拟用户登录验证的过程,实现用户名输入.黑名单检测.用户有效性判别.密码输入及验证等.用户在3次以内输入正确密码登陆成功,连续输错3次密码登陆失败,且该用户名被记录在黑名单,黑名单 ...

  2. 如何使用Django实现用户登录验证

    最初开始搞用户登录验证的时候感觉没什么难的,不就是增删改查中的查询数据库么,但是还是遇到许多小问题,而且感觉在查询数据库的时候,要把前端的数据一条一条的进行比对,会导致我的代码很丑,而且方式很不智,所 ...

  3. android loginDemo +WebService用户登录验证

        android loginDemo +WebService用户登录验证 本文是基于android4.0下的loginActivity Demo和android下的Webservice实现的.l ...

  4. djangorestframework-jwt自带的认证视图进行用户登录验证源代码学习

    Django REST framework JWT djangorestframework-jwt自带的认证视图进行用户登录验证源代码学习 SECRET_KEY = '1)q(f8jrz^edwtr2 ...

  5. cookie实现用户登录验证

    cookie实现用户登录验证 1, INSTALLED_APPS中注册app03 2,在主程序中新建映射关系到app3的url中 from django.conf.urls import url,in ...

  6. python3 用户登录验证的小功能

    用户登录验证,记录一下,还需要修改黑名单不合理 #!/usr/bin/env python3 ''' 需求:编写登录接口 1.输入用户名和密码 2.验证用户密码成功后输出欢迎消息 3.3次没有验证通过 ...

  7. 用javascript实现简单的用户登录验证

    用javascript实现简单的用户登录验证 <!DOCTYPE html> <html lang="en"> <head> <meta ...

  8. django 从零开始 8 用户登录验证 待测

    看文档 djang 自带一个用户登录验证的方法,不过有些看着懵逼,去网上找了一圈,发现很多都是照抄文档说明的,几乎没说啥原理 特别是 from django.contrib.auth import a ...

  9. Java初学者作业——编写Java程序,实现用户登录验证。

    返回本章节 返回作业目录 需求说明: 编写Java程序,实现用户登录验证. 若用户名与密码输入正确,则提示"登录成功,欢迎回来!",若用户名与密码不匹配,则提示"用户名和 ...

  10. python实现登录验证系统(搭建MVC框架)

    小型登录注册验证系统 关注公众号"轻松学编程"了解更多. 一.概述 ​ 使用Redis+MySQL数据库实现一个小型的登录注册验证系统.在这个系统中初步了解认识MVC框架. ​ 具 ...

随机推荐

  1. mybatis 详解(七)------一对一、一对多、多对多

    前面几篇博客我们用mybatis能对单表进行增删改查操作了,也能用动态SQL书写比较复杂的sql语句.但是在实际开发中,我们做项目不可能只是单表操作,往往会涉及到多张表之间的关联操作.那么我们如何用 ...

  2. Java中parse()和valueOf(),toString()的区别

    1.parse()是SimpleDateFomat里面的方法,你说的应该是parseInt()或parsefloat()这种方法吧, 顾名思义 比如说parseInt()就是把String类型转化为i ...

  3. 最短路和次短路问题,dijkstra算法

    /*  *题目大意:  *在一个有向图中,求从s到t两个点之间的最短路和比最短路长1的次短路的条数之和;  *  *算法思想:  *用A*求第K短路,目测会超时,直接在dijkstra算法上求次短路; ...

  4. 细说 Java 的深拷贝和浅拷贝

    版权声明: 本账号发布文章均来自公众号,承香墨影(cxmyDev),版权归承香墨影所有. 未经允许,不得转载. 一.前言 任何变成语言中,其实都有浅拷贝和深拷贝的概念,Java 中也不例外.在对一个现 ...

  5. Hotkeys.js 2.0.2 发布,捕获键盘输入和输入的组合键快捷键,它没有依赖

    这是一个强健的 Javascript 库用于捕获键盘输入和输入的组合键,它没有依赖,压缩只有只有(~3kb),gzip:1.9k. 更新内容: 添加测试用例: 添加更多特殊键支持: 修复bug. __ ...

  6. python基础===zip在python3中的用法

    name=["ad","kein","tom"] age=[23,45,22] tel=['157','139','167'] print( ...

  7. java 将一个ip地址分割成一个数组

    这个问题以前真还没注意,好像记得分割过规律的字符串,但是不是像IP这样是以"."为分割规律字符,而是的. 今天用到又用到个,代码写好了也没测试,直接上传服务器,但是就是会报错,之后 ...

  8. Maven干货

    好处: 1. 依赖管理:对jar包统一管理 2. 项目构建: 项目编码完成后,对项目进行编译.测试.打包.部署.之前项目构建通过eclipse工具实现.今天学习新的工具也可以实现这些过程.比如:通过m ...

  9. .NET Core 2.0 是您的最好选择吗?

    本月14日,微软发布.NET Core 2.0 正式版,它的发布意味着.NET Core平台更加成熟,也预示其更美好的未来.本文将分析.NET Core 的特性以及未来发展方向,为开发人员选择在何种平 ...

  10. python——模块和包 需要注意的地方

    一 模块 1.import import module: 将执行文件(module)的目录路径插入到sys.path的第一个位置 执行时: 1.创建新的名称空间 2.执行被调用的模块 第二次调用,不会 ...