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. Domains域

    一个域是一个criteria(度量标准)列表,每个criterion(标准尺度)是一个三元列表或者元组:field_name,operator,value. field_name(str) 当前模型的 ...

  2. CSS外边距合并问题

    今天无意中碰到了外边距合并的问题,于是便研究了一下.这里做个笔记. 所谓外边距合并,指的是当两个垂直外边距相遇时,它们将形成一个外边距.合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者. ...

  3. Reverse Integer - 反转一个int,溢出时返回0

    Reverse Integer Reverse digits of an integer. Example1: x = 123, return 321Example2: x = -123, retur ...

  4. Java 9 揭秘(16. 虚拟机栈遍历)

    Tips 做一个终身学习的人. 在本章中,主要介绍以下内容: 什么是虚拟机栈(JVM Stack)和栈帧(Stack Frame) 如何在JDK 9之前遍历一个线程的栈 在JDK 9中如何使用Stac ...

  5. Hibernate--inverse属性与cascade属性

    转载:http://www.cnblogs.com/otomedaybreak/archive/2012/01/17/2324772.html Hibernate 集合映射中,经常会使用到" ...

  6. HDU1036 Average is not Fast Enough!

    Problem Description A relay is a race for two or more teams of runners. Each member of a team runs o ...

  7. ES2017中的修饰器Decorator

    前面的话 修饰器(Decorator)是一个函数,用来修改类的行为.本文将详细介绍ES2017中的修饰器Decorator 概述 ES2017 引入了这项功能,目前 Babel 转码器已经支持Deco ...

  8. Qt之对话框消失动画

    一.效果展示 最近做了一个提示框消失的功能,觉着挺有意思,以前一直以为Qt子窗口不能做淡出效果,其实Qt的淡出功能已经帮我们封装好了,我们仅仅只需要几行代码就可以做出酷炫的窗口关闭效果,写此篇文章的时 ...

  9. Linux(9)后台运行python程序并输出到日志文件

    后台运行python程序并标准输出到文件 现在有test.py程序要后台部署, 里面有输出内容 使用命令: nohup python -u test.py > test.log 2>&am ...

  10. C#和NewSQL更配 —— CockroachDB入门(可能是C#下的全网首发)

    阅读目录 CockroachDB是什么 环境部署 实战 性能测试 结语 一.CockroachDB是什么 CockroachDB(https://www.cockroachlabs.com)是Goog ...