作业概述:

编写一个登录入口,实现如下功能:

(1)输入用户名和密码

(2)认证成功后显示欢迎信息

(3)输错三次后锁定

流程图:

readme:

1、程序配置文件:    黑名单文件blacklist.txt(可以存在,可以不存在)    白名单文件whitelist.txt存在,内容如下:        zhangsan,1234        wang,1234        ding,1234

2、输入密码的时候不显示

代码:
 #coding=utf-8
 import os
 import getpass

 BlackListFileName = 'E:\\python3.5_study\\s13\\day1\\login\\blacklist.txt'  #存放黑名单
 WhiteListFileName = 'E:\\python3.5_study\\s13\\day1\\login\\whitelist.txt'  #存放白名单
 ErrorNum = 0   #记录错误次数
 BlackFlag = False  #遍历黑名单的标志位
 WhiteFlag = False    #遍历白名单的标志位
 WhiteNameList = []   #存放白名单中所有的用户名字

 print ('''
 *********************
       登录入口
 *********************
 ''')

 #判断黑名单文件是否存在
 FileExistBool = os.path.exists(BlackListFileName)
 if FileExistBool == False:
     BlackF=open(BlackListFileName,'w')  #创建存放黑名单的文件
     BlackF.close()

 UserName = input("请输入用户名:")
 PassWord = getpass.getpass("请输入密码:")

 #判断用户是否在黑名单中
 BlackF=open(BlackListFileName,'r')  #读取方式打开黑名单文件
 BlackNameContent = BlackF.readlines()  #读取黑名单文件中所有内容,放入list中
 for i in range(len(BlackNameContent)):
     BlackName = BlackNameContent[i].strip().split(',')[0]
     if UserName == BlackName:
         print ('%s用户被锁定' %(UserName))
         BlackF.close()
         BlackFlag = True
         break

 if BlackFlag == False:  #BlackFlag==False说明UserName不在黑名单中
     #判断用户名和密码是否正确
     while 1:
         WhiteF=open(WhiteListFileName,'r')  #读取方式打开白名单文件
         WhiteNameContent = WhiteF.readlines()  #读取白名单文件中所有内容,放入list中
         for i in range(len(WhiteNameContent)):
             Name = WhiteNameContent[i].strip().split(',')[0]
             NamePassWord = WhiteNameContent[i].strip().split(',')[1]
             WhiteNameList.append(Name)

             if UserName == Name and PassWord == NamePassWord:
                 print ('恭喜,登录成功')
                 WhiteFlag = True
                 break
                 WhiteF.close()

         if UserName not in WhiteNameList:
             print ('%s用户不存在' %UserName)
             break

         if WhiteFlag == True:  #登录成功,跳出while循环
             break
         else:
             ErrorNum += 1   #用户名和密码错误的话错误次数+1
             print ('用户名或密码输入错误,第%d次' %ErrorNum)
             print ('ErrorNum:',ErrorNum)

             if ErrorNum < 3:
                 UserName = input("请输入用户名:")
                 PassWord = getpass.getpass("请输入密码:")
             else:
                 print ('错误次数过多,用户被锁定')
                 BlackF=open(BlackListFileName,'a+')  #追加写黑名单文件
                 BlackName = UserName+'\n'
                 BlackF.write(BlackName)
                 BlackF.close()
                 break

day1作业--登录入口的更多相关文章

  1. day1作业--登录接口

    作业:编写登陆接口 输入用户名密码 认证成功后显示欢迎信息 输错三次后锁定     知识: 1.循环的使用: 2.continue,break在循环中中断的作用: 3.文件的写入,读取: 4.各基础知 ...

  2. Day1作业---登录接口及多级菜单

    #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:Ma Qing data = { "山东" :{ "济南&qu ...

  3. day1作业登录接口总结

    作业一:编写登陆接口 1.输入用户名和密码 2.认证成功后显示欢迎信息 3.输错三次后锁定 上面作业,用了几种思路来解决问题:但是本质上其实都是一样的:核心都是对文件的操作,文件的增删改查:并且这些操 ...

  4. Day1作业要求

    Day1作业 作业需求 博客 模拟登录 三级菜单 博客地址 杨振伟Day1博客地址 模拟登录 1.程序说明 实现功能如下 用户输入密码,密码验证后登录成功 用户登录成功后提示登录信息 用户输入3次错误 ...

  5. 使用session页面控制登录入口及购物车效果的实现

          由于 Session 是以文本文件形式存储在服务器端的,所以不怕客户端修改 Session 内容.实际上在服务器端的 Session 文件,PHP 自动修改 Session 文件的权限,只 ...

  6. 【thinkphp5】安全建议:隐藏后台登录入口地址

    我们都知道后台   www.test.com/admin 是我们最常用的登录入口,方便的同时也留下了隐患,如果你刚好使用了 admin/ 这种账号密码的方式,会导致我们的后台完全暴露在外. 因此我们建 ...

  7. Python3.5 Day1作业:实现用户密码登录,输错三次锁定。

    作业需求: 1.输入用户名密码 2.认证成功后显示欢迎信息 3.输错三次后锁定 实现思路: 1.判断用户是否在黑名单,如果在黑名单提示账号锁定. 2.判断用户是否存在,如果不存在提示账号不存在. 3. ...

  8. day1作业:登录接口

    作业一:编写登陆接口 1.输入用户名和密码 2.认证成功后显示欢迎信息 3.输错三次后锁定 思路: (1)用户输入用户名: (2)去锁定文件中验证用户名是否锁定: (3)去当前用户验证用户是否存在: ...

  9. day1作业:编写登录窗口一个文件实现

    思路: 1.参考模型,这个作业我参考了linux的登录认证流程以及结合网上银行支付宝等锁定规则: 1)认证流程参考的是Linux的登录:当你输入完用户名密码后再验证用户名是否存在用户是否被锁定,然后在 ...

随机推荐

  1. meta头部标签意义作用!

    1.<meta name="viewport" id="viewport" content="width=device-width, initi ...

  2. zenefits oa - random(5) to generate a random(7)

    If given a function that generates a random number from 1 to 5, how do you use this function to gene ...

  3. Android 中onSaveInstanceState和onRestoreInstanceState学习

    1. 基本作用: Activity的 onSaveInstanceState() 和 onRestoreInstanceState()并不是生命周期方法,它们不同于 onCreate().onPaus ...

  4. js高级编程中命名空间的两种用法

    第一种:// 声明一个全局对象Namespace,用来注册命名空间Namespace = new Object();// 全局对象仅仅存在register函数,参数为名称空间全路径,如"Gr ...

  5. web开发实战--图片裁剪和上传

    前言: 最近的开发中, 有一个上传头像的任务. 由于头像本身的特殊性, 其一般流程为选择图片, 编辑裁剪区域, 再继而上传图片操作. 看似简单的东西, 实则是挺麻烦的一件事. 借助这次开发机会, 来具 ...

  6. java hook

    linux下 hook的触发,需要 发送信号为15. 后续补充具体内容.

  7. Swift—下标脚本(Subscripts)

    下标脚本可以定义在类(Class).结构体(Struct).枚举(enumeration)这些目标中,可以认为是访问集合,列表或序列的快捷方式,使用下标脚本的索引设置和获取值,不需要再调用实例的特定的 ...

  8. 类:String,Math,DateTime,Random

    string类: 判断邮箱格式是否正确: 1.有且只能有一个@  2.不能以@开头  3.@之后至少有一个.  4.@和.不能靠在一起  5.不能以.结尾 math 类: math.ceiling() ...

  9. 用php脚本给html中引用的js和css路径打上版本

    比如 <link rel="stylesheet" type="text/css" href="./css/globel.css"&g ...

  10. ubuntu 配置vim(vimrc)

    打开终端:ctrl+alt+t 进入vim文件:cd /etc/vim 打开vimrc文件:sudo gedit vimrc 然后在行末if语句前加上下面的内容,"  这个符号为注释,后面内 ...