作业概述:

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

(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. .net中使用ODP.net访问Oracle数据库(无客户端部署方法)

      ODP.net是Oracle提供的数据库访问类库,其功能和效率上都有所保证,它还有一个非常方便特性:在客户端上,可以不用安装Oracle客户端,直接拷贝即可使用. 以下内容转载自:http://b ...

  2. SQL注入的字符串连接函数

    在select数据时,我们往往需要将数据进行连接后进行回显.很多的时候想将多个数据或者多行数据进行输出的时候,需要使用字符串连接函数.在sqli中,常见的字符串连接函数有concat(),group_ ...

  3. ES5 对数组方法的扩展 以及 正则表达式

    ES5 对数组的扩展 forEach map some every indexOf lastIndexOf forEach 与 map 语法: 数组.forEach(function ( v, i ) ...

  4. Linux 路线 推荐

    1.<Linux程序设计>- 靠它来入门,然后装一个linux体系,练习shell(party)和linuxC,把基础打牢: 2. <深入理解Linux内核>和<Linu ...

  5. test latex1

    equation systems: \begin{equation} 1 + 2 = 3 \ 1 = 3 - 2 \end{equation} align text \begin{align} 1+2 ...

  6. DeepLearning入门笔记(一),准备工作与注意事项

    本文记录了安装theano.keras.tensorflow以及运行tutorial程序时遇到的一些问题,供后人参考. 实验机器:联想笔记本,i7-6700HQ,GTX960M,16G内存,SSD硬盘 ...

  7. HttpContext详解

    HttpContext 类:封装有关个别 HTTP 请求的所有 HTTP 特定的信息. 在处理请求执行链的各个阶段中,会有一个对象在各个对象之间进行传递,也即会保存 请求的上下文信息,这个对象就是Ht ...

  8. JS中直接从java后台获得对象的值(数组的值)

    这里举得例子是:JS直接从后台Contorller中(SpringMVC中的model中)获得数值的值 Contorller 此处将 talentIntegralRecordsDay talentIn ...

  9. ionic 开发APP 安装配置详解以及 cordova 环境配置详细过程

    整个安装过程:     1. jdk 1.7.2   (http://www.oracle.com/technetwork/java/javase/downloads/index.html) 安装好之 ...

  10. html5原生canvas内image旋转

    目前理解下来就是旋转的不是image本身,而是要drawImage的那个canvas的2d context,context本身的绘制就是把图片本来的样子draw出来,至于旋转,透明度之类的效果都是对c ...