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连接MySQL、MongoDB、Redis、memcache等数据库的方法
Nov 15 Python
理解python多线程(python多线程简明教程)
Jun 09 Python
Python实现将数据框数据写入mongodb及mysql数据库的方法
Apr 02 Python
Python面向对象之类和对象实例详解
Dec 10 Python
PyQt5基本控件使用详解:单选按钮、复选框、下拉框
Aug 05 Python
使用Windows批处理和WMI设置Python的环境变量方法
Aug 14 Python
python中count函数简单的实例讲解
Feb 06 Python
python上传时包含boundary时的解决方法
Apr 08 Python
Python网页解析器使用实例详解
May 30 Python
Java爬虫技术框架之Heritrix框架详解
Jul 22 Python
python操作ini类型配置文件的实例教程
Oct 30 Python
python实现文件分片上传的接口自动化
Nov 19 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
php中看实例学正则表达式
2006/12/25 PHP
php实现的Captcha验证码类实例
2014/09/22 PHP
PHP中的Streams详细介绍
2014/11/12 PHP
PHP中通过fopen()函数访问远程文件示例
2014/11/18 PHP
PHP GD库生成图像的几个函数总结
2014/11/19 PHP
php发送邮件的问题详解
2015/06/22 PHP
php快速排序原理与实现方法分析
2016/05/26 PHP
php unlink()函数使用教程
2018/07/12 PHP
详解PHP神奇又有用的Trait
2019/03/25 PHP
HTML TO JavaScript 转换
2006/06/26 Javascript
javascript 获取表单file全路径
2009/12/31 Javascript
jQuery学习笔记 操作jQuery对象 CSS处理
2012/09/19 Javascript
javascript scrollTop正解使用方法
2013/11/14 Javascript
JavaScript模块随意拖动示例代码
2014/05/27 Javascript
js实现数字递增特效【仿支付宝我的财富】
2017/05/05 Javascript
在vue-cli项目中使用bootstrap的方法示例
2018/04/21 Javascript
JS/jQuery实现获取时间的方法及常用类完整示例
2019/03/07 jQuery
Python编程使用tkinter模块实现计算器软件完整代码示例
2017/11/29 Python
Python中单、双下划线的区别总结
2017/12/01 Python
Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】
2019/03/30 Python
Django如何实现上传图片功能
2019/08/16 Python
Python2比较当前图片跟图库哪个图片相似的方法示例
2019/09/28 Python
Python 窗体(tkinter)下拉列表框(Combobox)实例
2020/03/04 Python
python代码实现图书管理系统
2020/11/30 Python
常用的四种CSS透明属性介绍
2014/04/12 HTML / CSS
详解HTML5布局和HTML5标签
2020/10/26 HTML / CSS
大学生求职简历的自我评价
2013/10/14 职场文书
酒店前厅员工辞职信
2014/01/08 职场文书
企业宗旨标语
2014/06/10 职场文书
夫妻分居协议书范本
2014/11/28 职场文书
2014年学校后勤工作总结
2014/12/06 职场文书
升职自荐信范文
2015/03/27 职场文书
免职通知
2015/04/23 职场文书
妇联2016年六一国际儿童节活动总结
2016/04/06 职场文书
选对餐饮营销策略,营业额才会上涨
2019/08/27 职场文书
nginx中封禁ip和允许内网ip访问的实现示例
2022/03/17 Servers