python从入门到精通(DAY 3)


Posted in Python onDecember 20, 2015

要求:编写登陆接口

输入用户名密码
认证成功后显示欢迎信息
输错三次后锁定

针对此实例写了有二种类型的脚本,略有不同,具体如下:

帐号文件account.txt内容如下:

sam 123

david 12
kevin 123
lin 12
tailen 123
jack 12

锁文件account_lock.txt默认为空

一、只针对帐号文件里的用户进行判断并锁定,针对用户和密码各有三次错误重试机会。

1、流程图如下:

python从入门到精通(DAY 3)

代码如下:

#!/usr/bin/python27
#_*_ coding:utf-8 _*_

import sys,os,getpass

os.system('clear')
i = 0
while i < 3:                            #只要用户登录异常不超过3次就不断循环
  name = raw_input("请输入用户名:")

  lock_file = open('account_lock.txt','r+')            #当用户输入用户名后,打开LOCK 文件 以检查是否此用户已经LOCK了
  lock_list = lock_file.readlines()

  for lock_line in lock_list:                   #循环LOCK文件 
    lock_line = lock_line.strip('\n')              #去掉换行符
    if name == lock_line:                    #如果LOCK了就直接退出
      sys.exit('用户 %s 已经被锁定,退出' % name) 

  user_file = open('account.txt','r')               #打开帐号文件 
  user_list = user_file.readlines()                
  for user_line in user_list:                   #对帐号文件进行遍历
    (user,password) = user_line.strip('\n').split()       #分别获取帐号和密码信息
    if name == user:                      #如用户名正常匹配
      j = 0
      while j < 3:                      #只要用户密码异常不超过3次就不断循环
        passwd = getpass.getpass('请输入密码:')       #输入隐藏密码
        if passwd == password:               #密码正确,提示欢迎登录
          print('欢迎登录管理平台,用户%s' % name)    
          sys.exit(0)                   #正常退出
        else:
          print('用户 %s 密码错误,请重新输入,还有 %d 次机会' % (name,2 - j))
        j += 1                       #密码输入错误后,循环值增加1
      else:
        lock_file.write(name + '\n')            #密码输入三次错误后,将该用户追加到LOCK文件
        sys.exit('用户 %s 达到最大登录次数,将被锁定并退出' % name)
    else:
      pass                          #当用户没匹配时,跳过并继续循环
  else:
    print('用户 %s 不存在,请重新输入,还有 %d 次机会' % (name,2 - i))
  i += 1                             #当用户输入错误时,循环值增加1
else:
  sys.exit('用户 %s 不存在,退出' % name)              #用户输入三次错误后,异常退出
      
lock_file.close()                          #关闭LOCK文件
user_file.close()                          #关闭帐号文件

二、针对帐号文件里的不存在的用户也可以进行判断并锁定,针对用户和密码共有三次错误重试机会

代码如下:

#_*_ coding:utf-8 _*_

import sys,os,getpass

os.system('clear')

retry_limit = 3
retry_count = 0

account_file = 'account.txt'
lock_file = 'account_lock.txt'

while retry_count < retry_limit:                     #只要重试不超过3次就不断循环
  username = raw_input('\033[31;43mUsername:\033[0m')
  username = username.strip()
  lock_check = open(lock_file)                     #当用户输入用户名后,打开LOCK 文件 以检查是否此用户已经LOCK了

  for line in lock_check.readlines():                 #循环LOCK文件 
    if username == line.strip('\n'):                 #去掉换行符
      sys.exit('\033[35mUser %s is locked!!!\033[0m' % username)  #如果LOCK了就直接退出
  password = raw_input('\033[32;41mPassword:\033[0m')         #输入密码

  f = open(account_file,'r')                      #打开帐号文件 
  match_flag = False                          # 默认为Flase,如果用户match 上了,就设置为 True

  for line in f.readlines():                      
    user,passwd = line.strip('\n').split()              #去掉每行多余的\n并把这一行按空格分成两列,分别赋值为user,passwd两个变量
    if username == user and password == passwd:           #判断用户名和密码是否都相等
      print('hello, %s !!' % username)
      match_flag = True                       #相等就把循环外的match_flag变量改为了True
      break                             #然后就不用继续循环了,直接 跳出,因为已经match上了
  f.close()

  if match_flag == False:                       #如果match_flag还为False,代表上面的循环中跟本就没有match上用户名和密码,所以需要继续循环
    print('sorry,%s is unmatched' % username)
    retry_count += 1                         #计数器加1
  else:
    print('wlecome login my learning system!')
    break                              #用户成功登录,退出脚本

else:
  print("you account %s is locked!!!" % username)
  g = open(lock_file,'a')
  g.write(username)                          #被锁用户追加到用户锁文件
  g.write('\n')  
  g.close()
Python 相关文章推荐
python发送邮件的实例代码(支持html、图片、附件)
Mar 04 Python
Cpy和Python的效率对比
Mar 20 Python
Python 爬虫爬取指定博客的所有文章
Feb 17 Python
浅析Python中的getattr(),setattr(),delattr(),hasattr()
Jun 14 Python
解决Python requests 报错方法集锦
Mar 19 Python
Python实现删除时保留特定文件夹和文件的示例
Apr 27 Python
python中的变量如何开辟内存
Jun 26 Python
基于python3 pyQt5 QtDesignner实现窗口化猜数字游戏功能
Jul 15 Python
django中media媒体路径设置的步骤
Nov 15 Python
神经网络训练采用gpu设置的方式
Mar 03 Python
python中Matplotlib绘制直线的实例代码
Jul 04 Python
pytorch中的torch.nn.Conv2d()函数图文详解
Feb 28 Python
python从入门到精通(DAY 2)
Dec 20 #Python
利用python代码写的12306订票代码
Dec 20 #Python
python从入门到精通(DAY 1)
Dec 20 #Python
在DigitalOcean的服务器上部署flaskblog应用
Dec 19 #Python
用ReactJS和Python的Flask框架编写留言板的代码示例
Dec 19 #Python
使用Python编写简单的端口扫描器的实例分享
Dec 18 #Python
十个Python程序员易犯的错误
Dec 15 #Python
You might like
神族 PROTOSS 概述
2020/03/14 星际争霸
用PHP实现WEB动态网页静态
2006/10/09 PHP
自动生成文章摘要的代码[PHP 版本]
2007/03/20 PHP
按上下级层次关系输出内容的PHP代码
2010/07/17 PHP
php登录超时检测功能实例详解
2017/03/21 PHP
详谈symfony window下的安装 安装时候出现的问题以及解决方法
2017/09/28 PHP
arguments对象
2006/11/20 Javascript
一个原生的用户等级的进度条
2010/07/03 Javascript
JavaScript 计算图片加载数量的代码
2011/01/01 Javascript
js动态添加onload、onresize、onscroll事件(另类方法)
2012/12/26 Javascript
jquery插件开发注意事项小结
2013/06/04 Javascript
使用微信小程序开发前端【快速入门】
2016/12/05 Javascript
jquery ajaxfileupload异步上传插件使用详解
2017/02/08 Javascript
Bootstrap标签页(Tab)插件使用方法
2017/03/21 Javascript
BootStrap中jQuery插件Carousel实现轮播广告效果
2017/03/27 jQuery
Node.js搭建小程序后台服务
2018/01/03 Javascript
理解 JavaScript EventEmitter
2018/03/29 Javascript
NodeJs之word文件生成与解析的实现代码
2019/04/01 NodeJs
js实现类选择器和name属性选择器的示例步骤
2021/02/07 Javascript
Python获取网页上图片下载地址的方法
2015/03/11 Python
Python3读取zip文件信息的方法
2015/05/22 Python
利用python模拟sql语句对员工表格进行增删改查
2017/07/05 Python
Python3实现的字典、列表和json对象互转功能示例
2018/05/22 Python
Python实现爬虫爬取NBA数据功能示例
2018/05/28 Python
python爬虫 基于requests模块发起ajax的get请求实现解析
2019/08/20 Python
使用python-opencv读取视频,计算视频总帧数及FPS的实现
2019/12/10 Python
Python编程快速上手——选择性拷贝操作案例分析
2020/02/28 Python
Python requests模块cookie实例解析
2020/04/14 Python
美国孕妇装购物网站:Motherhood Maternity
2019/09/22 全球购物
Wiggle新西兰:自行车、跑步、游泳
2020/05/06 全球购物
2014大四本科生自我鉴定总结
2014/10/04 职场文书
仓管员岗位职责
2015/02/03 职场文书
教师文明餐桌光盘行动倡议书
2015/04/28 职场文书
因公司原因离职的辞职信范文
2015/05/12 职场文书
详解如何修改nginx的默认端口
2021/03/31 Servers
用JS创建一个录屏功能
2021/11/11 Javascript