要求:

1、用户在登录之前要判断密码文件是否已经是锁定状态,如果是提示不让登录

2、登录用户密码输入错误3次,就锁定改用户,并更新文件内容

3、登录正确,提示欢迎登录信息

data.txt 文件内容:

root:aaa:0

adm:bbb:1

ops:ccc:3

以冒号分割,用户名:密码:用户对应的状态(3表示改用户被锁定)

 

代码:

 #!/usr/bin/env python3
 # -*- coding: utf-8 -*-

 import os,sys,getpass          # getpass是输入密码的时候不显示输入的内容,和Linux命令终端输入密码时一样
 os.system('cls')

 u = 0
 while u < 3:     # 如果用户3次输入的用户名都是错误就有问题,不然再输入了
     username = input('请输入用户名:')
     user_f = open('data.txt', 'r')      # 以读方式打开
     user_str = user_f.read()      # 读取文件所有内容
     user_f.close()
     user_info = user_str.strip().split('\n')     # 去掉空且以换行符作为分割生产列表  ['root:aaa:3', 'adm:bbb:1', 'ops:ccc:3']
     user_list = []
     for user_line in user_info:
         user_tmp = user_line.split(':')      # 再以冒号分割生成子列表,这种样子格式['root', 'aaa', '3']
         user_list.append(user_tmp)      # 这里的内容就是  [['root', 'aaa', '3'], ['adm', 'bbb', '1'], ['ops', 'ccc', '3']]
     print(user_list)
     for user_one in user_list:
         if username == user_one[0] and int(user_one[-1]) == 3:    # 看输入的用户是不是已经是锁定状态(data.txt文件的第3列如果是3就表示之前连续输错3次)
             print('用户 %s 已经锁定,请联系您的系统管理员!' % username)
             sys.exit(1)
     for user_one in user_list:
         if username == user_one[0]:    # 判断输入的用户名是不是在文件中,条件成立往下执行
             p = 0    # 初始化密码计数器
             while p < 3:
                 passwd = input('请输入密码:')
                 if passwd == user_one[1]:    # 前面用户名已经判断了,这里只需要判断密码是不是正确的就行
                     print('欢迎登陆!')
                     sys.exit(0)
                 else:
                     if p != 2:
                         print('对不起,%s 的密码错误,您还有 %d 次机会!' % (username, 2 - p))
                     p += 1   # 能执行到这一步说明密码输错了,计数器 +1
             else:
                 user_one[2] = 3    # 如果用户连续3次输入错密码就要更新这个用户对应的密码记录,并锁定用户
                 user_f = open('data.txt', 'w')
                 for user_info2 in user_list:
                     user_f.write(user_info2[0] + ':' + user_info2[1] + ':' + str(user_info2[2]) + '\n')   # 把当前的值更新到文件中
                 user_f.close()
                 sys.exit('对不起,%s 用户已被锁定,请联系管理员!' % username)
         else:
             pass
     else:
         if u != 2:
             print('对不起,您输入的用户 %s 不存在,您还有 %d 机会。' % (username, 2-u))
     u += 1
 else:
     sys.exit('用户输入错误3次,程序已退出。')

程序运行效果:

请输入用户名:root
[['root', 'aaa', '2'], ['adm', 'bbb', '1'], ['ops', 'ccc', '3']]   # 从文件读取出来转换成列表形式,这里打印出来是方便实验
请输入密码:11
对不起,root 的密码错误,您还有 2 次机会!
请输入密码:11
对不起,root 的密码错误,您还有 1 次机会!
请输入密码:11
对不起,root 用户已被锁定,请联系管理员!

此时data.txt文件内容的root用户登录次数已更新到 3 ,再次登录 root 提示被锁定

请输入用户名:root
[['root', 'aaa', '3'], ['adm', 'bbb', '1'], ['ops', 'ccc', '3']]
用户 root 已经锁定,请联系您的系统管理员!

正常登录:

请输入用户名:adm
[['root', 'aaa', '3'], ['adm', 'bbb', '1'], ['ops', 'ccc', '3']]
请输入密码:bbb
欢迎登陆!

原文:http://www.cnblogs.com/brianzhu/articles/6282905.html

python 用户登录的更多相关文章

  1. python用户登录,密码错误3次则锁定

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

  2. 第三篇python用户登录程序实现

    需求: 1.通过注册输入用户名和密码 2.能够验证用户名和密码是否正确 3.限制输入一定错误次数后退出程序 4.利用格式化输出方式输出信息 分析: 使用username=input()和passwor ...

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

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

  4. Python程序练习1-模拟用户登录验证

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

  5. python 全栈开发,Day119(Flask初识,Render Redirect HttpResponse,request,模板语言 Jinja2,用户登录例子,内置Session)

    一.Flask初识 首先,要看你学没学过Django 如果学过Django 的同学,请从头看到尾,如果没有学过Django的同学,并且不想学习Django的同学,轻饶过第一部分 三大主流Web框架对比 ...

  6. Python之简单的用户登录和注册

    # -*- coding: utf-8 -*- # @Time : 2018/7/26 20:16 # @Author : Adam # @File : exam2.py # @Project: ke ...

  7. Python练习-有点儿意思的用户登录

    Alex大神的需求(说实话他需求真特么多,真难满足他): 编写一个用户登陆接口:输入用户名密码,认证成功后显示欢迎信息,输错三次后锁定; # 编辑者:闫龙 #用户登录功能输入3次以上会被锁定:为了方便 ...

  8. python实现用户登录问候

    创建一个至少包含 5个用户名的列表,且其中一个用户名为 'admin' .想象你要编写代码,在每位用户登录网站后都打印一条问候消息.遍历用户名列表,并向每位用户打印一条问候消息.添加一条 if 语句, ...

  9. Python阶段复习 - part 4 - 用户登录程序

    简易版: #!/usr/bin/env python # _*_ coding:UTF-8 _*_ # __auth__:Dahlhin import sys userinfo = r'userinf ...

随机推荐

  1. JavaScript中的设计模式:状态模式

    前几天写了一个贪吃蛇小游戏,正好用到了状态模式. 定义 当一个对象内部状态发生改变时候,会导致其行为的改变,这看起来像是改变了对象. 简单的例子 如果一个函数要更具某一个对象的状态来判断该对象应该执行 ...

  2. 20170722_php_单例模式

    <?php class myClass{ private static $obj = null; private function __construc(){ } public static f ...

  3. Linux 服务器如何配置网站以及绑定域名

    因为域名没有备案,国内地区不能直接域名访问.前段时间在阿里云租购了一台的香港服务器,添加子域名时解析的时发现不能添加直接解析至端口,找了些资料,发现了Nginx绑定域名的方法,在这里做个记录. 1.香 ...

  4. MFS分布式文件系统管理

    MFS官方网站http://www.moosefs.org/reference-guide.html mooseFS(moose驼鹿)是一款网络分布式文件系统,它把数据分散到多台服务器上,但对于用户来 ...

  5. 读书笔记(一)—— 浅析浏览器渲染过程和html中的文件加载

    在构建页面时,我们会在html中载入一个或多个css和js文件.或许大家都已经习惯了"最佳实践"中,css文件应该放在<head>标签中引入,而js文件则是放在< ...

  6. hdu--1548--dfs--蜘蛛牌

    /* Name: hdu--1548--蜘蛛牌 Author: shen_渊 Date: 17/04/17 09:15 Description: dfs,不好想,看两个大神的代码好久http://ww ...

  7. 细说 Java 的深拷贝和浅拷贝

    版权声明: 本账号发布文章均来自公众号,承香墨影(cxmyDev),版权归承香墨影所有. 未经允许,不得转载. 一.前言 任何变成语言中,其实都有浅拷贝和深拷贝的概念,Java 中也不例外.在对一个现 ...

  8. mysql的内连接,外连接(左外连接,右外连接)巩固

    1:mysql的内连接: 内连接(inner join):显示左表以及右表符合连接条件的记录: select a.goods_id,a.goods_name,b.cate_name from tdb_ ...

  9. html2canvas页面截图图片不显示

    前两天在一个群里,有人问使用html2canvas屏幕截图的时候为什么页面的图片不显示只显示了文字,我没有做过屏幕截图的需求,所以不是很清楚,今天稍稍测试了一下. 在github上将html2canv ...

  10. layer弹出层传值到父页面

    目前做的项目中用到layer弹层传值,弹层输入框输入文本,点击确定按钮,父页面的树结构,会自动添加分组. 在此粘贴下代码,以后遇到,方便回忆,如有疑问请留言,或许会为您解答 $(document).r ...