目标要求:

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. redis单机安装以及简单redis集群搭建

    安装环境: 两台虚拟机都是Centos 7.0 IP分别为:192.168.149.132  192.168.149.133 Redis采用的版本是redis-3.2.4 集群是采用两台虚拟机模拟8个 ...

  2. ios播放音乐

    1.背景音乐播放    循环播放长音乐  支持mp3格式 #import <AVFoundation/AVFoundation.h>: NSString *musicFilePath = ...

  3. NYOJ 71 独木舟上的旅行(贪心)

    独木舟上的旅行 时间限制:3000 ms  |  内存限制:65535 KB 难度:2   描述 进行一次独木舟的旅行活动,独木舟可以在港口租到,并且之间没有区别.一条独木舟最多只能乘坐两个人,且乘客 ...

  4. 从入门到放弃,.net构建博客系统(一):系统构建篇

    demo:http://tonyblogs.top/ Git源码:https://github.com/Halifa/TonyBlogs 项目采用的技术有:asp.net mvc4 + autofac ...

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

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

  6. 等待与希望,.NET Core 的发展壮大

    前几天微软推出了.net core 2.0, 尽管我现在使用的技术栈和微软已经没有一丝瓜葛, 但碰到微软放大招,心里还是瘙痒难当,忍不住偷偷摸摸的体验了一把. 谁叫我是通过微软系技术入的行呢,旧情难忘 ...

  7. 微服务架构下的API网关

    顾名思义,是出现在系统边界上的一个面向API的.串行集中式的强管控服务,这里的边界是企业IT系统的边界,主要起到隔离外部访问与内部系统的作用.在微服务概念的流行之前,API网关的实体就已经诞生了,例如 ...

  8. String与Date(java.util.Date)互转(转)

    http://yunnick.iteye.com/blog/1074495 一.String与Date(java.util.Date)互转 1.1 String -> Date String d ...

  9. OpenCV中phase函数计算方向场

    一.函数原型 ​该函数参数angleInDegrees默认为false,即弧度,当置为true时,则输出为角度. phase函数根据函数来计算角度,计算精度大约为0.3弧度,当x,y相等时,angle ...

  10. emacs命令记录

    C-代表按住Ctrl键 M-代表按住Alt键,也可以用按一下ESC放开代替   最先要记住的 M-x <cmd>      输入指令执行,在输入时用Tab可以自动补全或列出项目 C-g   ...