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实现各种排序算法的代码示例总结
Dec 11 Python
python目录与文件名操作例子
Aug 28 Python
python使用tomorrow实现多线程的例子
Jul 20 Python
用python拟合等角螺线的实现示例
Dec 27 Python
python之MSE、MAE、RMSE的使用
Feb 24 Python
Django用数据库表反向生成models类知识点详解
Mar 25 Python
Python tornado上传文件的功能
Mar 26 Python
利用python绘制数据曲线图的实现
Apr 09 Python
python中round函数如何使用
Jun 19 Python
python实现高效的遗传算法
Apr 07 Python
Pytorch 实现变量类型转换
May 17 Python
pytorch 带batch的tensor类型图像显示操作
May 20 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/10/09 PHP
php函数array_merge用法一例(合并同类数组)
2013/02/03 PHP
2个自定义的PHP in_array 函数,解决大量数据判断in_array的效率问题
2014/04/08 PHP
php获取微信共享收货地址的方法
2017/12/21 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
jQuery 遍历json数组的实现代码
2020/09/22 Javascript
Javascript 面向对象 继承
2010/05/13 Javascript
解析jquery中的ajax缓存问题
2013/12/19 Javascript
jquery中change()用法实例分析
2015/02/06 Javascript
javascript常用正则表达式汇总
2015/07/31 Javascript
javascript滚轮控制模拟滚动条
2016/10/19 Javascript
使用Ajax生成的Excel文件并下载的实例
2016/11/21 Javascript
实例讲解JavaScript截取字符串
2018/11/30 Javascript
Vue程序化的事件监听器(实例方案详解)
2020/01/07 Javascript
vuex分模块后,实现获取state的值
2020/07/26 Javascript
JavaScript代码实现微博批量取消关注功能
2021/02/05 Javascript
下载给定网页上图片的方法
2014/02/18 Python
Python求两个list的差集、交集与并集的方法
2014/11/01 Python
Python中join和split用法实例
2015/04/14 Python
Python设计模式编程中解释器模式的简单程序示例分享
2016/03/02 Python
python中requests使用代理proxies方法介绍
2017/10/25 Python
初探TensorFLow从文件读取图片的四种方式
2018/02/06 Python
Python绘制的二项分布概率图示例
2018/08/22 Python
Python+OpenCV+图片旋转并用原底色填充新四角的例子
2019/12/12 Python
Python+opencv+pyaudio实现带声音屏幕录制
2019/12/23 Python
浅谈tensorflow中Dataset图片的批量读取及维度的操作详解
2020/01/20 Python
python归并排序算法过程实例讲解
2020/11/04 Python
新东方旗下远程教育网站:新东方在线
2020/03/19 全球购物
英国领先的男装设计师服装独立零售商:Repertoire Fashion
2020/10/19 全球购物
化学学院毕业生自荐信范文
2013/12/17 职场文书
小学学习雷锋活动总结
2014/07/03 职场文书
党员查摆四风问题思想汇报
2014/10/25 职场文书
婚礼女方父母答谢词
2015/01/04 职场文书
2015年万圣节活动总结
2015/03/24 职场文书
2015年采购工作总结
2015/04/10 职场文书
详解Vue router路由
2021/11/20 Vue.js