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多线程抓取天涯帖子内容示例
Apr 03 Python
python去除文件中空格、Tab及回车的方法
Apr 12 Python
windows10系统中安装python3.x+scrapy教程
Nov 08 Python
python删除文本中行数标签的方法
May 31 Python
使用python对excle和json互相转换的示例
Oct 23 Python
python如何查看微信消息撤回
Nov 27 Python
python 通过SSHTunnelForwarder隧道连接redis的方法
Feb 19 Python
Python 获取windows桌面路径的5种方法小结
Jul 15 Python
应用OpenCV和Python进行SIFT算法的实现详解
Aug 21 Python
Django Path转换器自定义及正则代码实例
May 29 Python
Python库安装速度过慢解决方案
Jul 14 Python
自己搭建resnet18网络并加载torchvision自带权重的操作
May 13 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
MVC模式的PHP实现
2006/10/09 PHP
在线短消息收发的程序,不用数据库
2006/10/09 PHP
一组PHP可逆加密解密算法实例代码
2014/01/21 PHP
php递归遍历删除文件的方法
2015/04/17 PHP
WIN8.1下搭建PHP5.6环境
2015/04/29 PHP
PHPStrom中实用的功能和快捷键大全
2015/09/23 PHP
laravel 中某一字段自增、自减的例子
2019/10/11 PHP
PHP使用JpGraph绘制折线图操作示例【附源码下载】
2019/10/18 PHP
基于Jquery的回车成tab焦点切换效果代码(Enter To Tab )
2010/11/14 Javascript
JQueryEasyUI datagrid框架的基本使用
2013/04/08 Javascript
JS基于Mootools实现的个性菜单效果代码
2015/10/21 Javascript
jqueryMobile 动态添加元素,展示刷新视图的实现方法
2016/05/28 Javascript
jQuery实现背景滑动菜单
2016/12/02 Javascript
vant时间控件使用方法详解
2020/12/24 Javascript
Python中处理时间的几种方法小结
2015/04/09 Python
Python的Django中django-userena组件的简单使用教程
2015/05/30 Python
Python Paramiko模块的安装与使用详解
2016/11/18 Python
python3实现ftp服务功能(服务端 For Linux)
2017/03/24 Python
python学生管理系统开发
2019/01/30 Python
Python去除字符串前后空格的几种方法
2019/03/04 Python
python取余运算符知识点详解
2019/06/27 Python
在Python中画图(基于Jupyter notebook的魔法函数)
2019/10/28 Python
Python常用数据分析模块原理解析
2020/07/20 Python
CSS3的Border-radius轻松制作圆角
2012/12/24 HTML / CSS
css3中less实现文字长阴影(long shadow)
2020/04/24 HTML / CSS
Turnbull & Asser官网:英国皇室御用的顶级定制衬衫
2019/01/31 全球购物
颇特女士香港官网:NET-A-PORTER香港
2021/03/08 全球购物
2014年公司庆元旦活动方案
2014/03/05 职场文书
法律专业自荐信
2014/06/03 职场文书
初中学习计划书范文
2014/09/15 职场文书
夫妻婚内购房协议书
2014/10/05 职场文书
财产分割协议书范本
2014/11/03 职场文书
2015年安康杯竞赛活动总结
2015/03/26 职场文书
2015年校医个人工作总结
2015/07/24 职场文书
生产设备维护保养制度
2015/08/06 职场文书
解决Jenkins集成SonarQube遇到的报错问题
2021/07/15 Java/Android