1.功能简介

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

 

2.实现方法

本程序采用python语言编写,将各项任务进行分解并用定义对应的函数来处理,从而使程序结构清晰,易于维护。主要编写了四个函数:

 
  1. login() #登陆函数,为主函数,完成用户名检测和密码验证
  2. inquire_blacklist(name) #查询用户名是否在黑名单中
  3. inquire_userlist(name) #查询用户名是否在用户名单中,并返回密码或None
  4. add_blacklist(name) #添加用户名到黑名单文件

函数调用框架:运行login()-->输入用户名-->调用inquire_blacklist(name)进行黑名单检测-->调用inquire_userlist(name)进行用户名有效性判别,有效则返回用户密码,再与输入密码对比验证-->连续输错3次密码则调用add_blacklist(name)添加用户到黑名单。

 

3.流程图

4.代码

 # Author:Byron Li

 import os
BASE_DIR = os.path.dirname(__file__) #获取文件目录路径
userlist='userlist.txt' #存取已注册用户名单文件,包括用户名和密码
blacklist='blacklist.txt' #存取锁定用户的黑名单文件
userlist_path = os.path.join(BASE_DIR,userlist) #注册用户名单文件路径
blacklist_path = os.path.join(BASE_DIR,blacklist) #黑名单文件路径 #----------------------------------------------登陆函数(主函数)-------------------------------------------------------
def login(): #登陆函数
username = input("请输入用户名:")
while(True):
if inquire_blacklist(username): #查询输入用户名是否在黑名单中
print("不好意思,此用户名\"%s\"已被锁定,禁止登陆!"%username)
return False
else:
user_password = inquire_userlist(username) #查询输入用户名是否存在注册用户名单中,若存在则返回该用户密码
if user_password:
for i in range(3):
password = input("请输入密码:") if i==0 else input("密码输入错误,请重新输入密码:")
if password==user_password:
print('欢迎%s登陆!'%username)
return True
else:
print("您已经连续输错密码3次,用户名将被锁定,禁止再登陆!")
add_blacklist(username) #添加用户名到黑名单文件
return False
else:
username = input('无效的用户名,请重新输入:')
# ---------------------------------------------------------------------------------------------------------------------- #----------------------------------------------查询黑名单函数-----------------------------------------------------------
def inquire_blacklist(name): #查询用户名是否在黑名单中
with open(blacklist_path, 'r') as f:
for line in f:
if name==line.strip():
return True
return False
# ---------------------------------------------------------------------------------------------------------------------- #----------------------------------------------查询用户名函数-----------------------------------------------------------
def inquire_userlist(name): #查询用户名是否在注册用户名单中
with open(userlist_path, 'r') as f:
for line in f:
[username,password] = line.split()
if name==username:
return password
return None
# ---------------------------------------------------------------------------------------------------------------------- #----------------------------------------------添加黑名单函数-----------------------------------------------------------
def add_blacklist(name): #添加用户名到黑名单文件
with open(blacklist_path, 'a') as f:
f.write(str(name)+'\n')
return True
# ---------------------------------------------------------------------------------------------------------------------- if login(): #执行登陆函数
print('登陆成功!'.center(47,'*'))
else:
print('登陆失败!'.center(47,'*'))

Python程序练习1-模拟用户登录验证的更多相关文章

  1. jdbc封装模拟用户登录

    dao层 接口 package com.qu.dao; public interface ILoginDAO { /** * 模拟用户登录 * 验证用户名 密码是否正确 * select * from ...

  2. 运用String类实现一个模拟用户登录程序

    package Test; import java.util.Scanner; // 模拟用户登录程序 // 思路: // 1.用两个String类分别接收用户名和密码 // 2.判断输入的用户名和密 ...

  3. python 初学习 模拟用户登录

    #!/usr/bin/env python#coding:utf-8''' 2017年8月19日 模拟用户登录,userfile 文件保存字典 用户名,和密码 sorryname 文件保存字典 登录过 ...

  4. 模拟用户登录,内含验证码验证和request等操作

    模拟用户登录,内含验证码验证和jsp等操作 1.案例需求: 1. 访问带有验证码的登录页面login.jsp 2. 用户输入用户名,密码以及验证码. * 如果用户名和密码输入有误,跳转登录页面,提示: ...

  5. python小练习--模拟用户登录,(3次重试机会,登录成功展示登录账号密码)

    知识点使用:1.格式化输出的两种方法---% .formate 2.while循环的使用,及跳出循环的两种方法---break(跳出循环体).continue(结束本次循环,继续下次循环) 3.if条 ...

  6. 模拟用户登录含注册——python第8天

    print('欢迎登录尚雅梦想python学习系统'.center(30)) print('******' * 8) flag = True while flag: order = input(''' ...

  7. python用scrapy模拟用户登录

    scrapy模拟登录 关注公众号"轻松学编程"了解更多. 注意:模拟登陆时,必须保证settings.py里的COOKIES_ENABLED(Cookies中间件) 处于开启状态 ...

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

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

  9. 用python连接数据库模拟用户登录

    使用pycharm下载pymysql库,在终端输入命令: pip install mysql 使用pycharm写登入操作前需要在数据库内添加一些数据,比如用户名和密码 create database ...

随机推荐

  1. docker~docker-machine的介绍

    回到目录 国外的hub.ducker.com速度确实有些慢,还好,有咱们的阿里云,今天和大家聊聊通过添加docker-machine来改变docker的hub服务器,最终来加速咱们下载镜像的速度! 工 ...

  2. jenkins2 -pipeline 常用groovy脚本

    jenkins2的核心是pipeline,pipeline的核心是groovy. 那有一些基础的groovy是必须经常使用的,如变量赋值,变量引用,打印变量,输出字符,任务调用,循环判断等. Groo ...

  3. spring加载异常

    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' ...

  4. GetConsoleTitle 函数--获取控制台窗口标题

    GetConsoleTitle函数 来源:https://msdn.microsoft.com/en-us/library/windows/desktop/ms683174(v=vs.85).aspx ...

  5. (转)java反射机制及简单工厂模式

    第一步,定义一个接口类 package factory.face; /** * 接口,为了保证返回的对象可以统一用 Product接受 * @author Administrator */ publi ...

  6. 2.关于Apache Spark

    关于Apache Spark 1 Why Apache Spark 2 关于Apache Spark 3 如何安装Apache Spark 4 Apache Spark的工作原理 5 spark弹性分 ...

  7. OpenFlow协议1.0及1.3版本分析

    OpenFlow是SDN控制器和交换之间交流的协议,在SDN领域有着十分重要的地位. OpenFlow协议发展到现在已经经过了1.0.1.3.1.4等版本.其中1.0和1.3版本使用的是最为广泛的. ...

  8. 香港服务器PING知识知多少?

    香港服务器PING命令简介: PING命令是用来检查要到达的目标IP地址并记录结果,显示目标是否响应以及接收答复所需的时间.如果在传递到目标过程中有错误,ping 命令将显示错误消息. 我们在HOST ...

  9. python常用模块(2)

    之前学了两个常用的模块collections和re模块今天我们接着学习其他几个常用模块.都是比较常用的之前的学习或多或少也有所接触比如说时间模块等. 预习: 写一个验证码 首先 要有数字 其次 要有字 ...

  10. React Native 系列(二) -- React入门知识

    前言 本系列是基于React Native版本号0.44.3写的,最初学习React Native的时候,完全没有接触过React和JS,本文的目的是为了给那些JS和React小白提供一个快速入门,让 ...