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之数据序列化(json、pickle、shelve)
Mar 30 Python
Python数据可视化正态分布简单分析及实现代码
Dec 04 Python
Python简单实现网页内容抓取功能示例
Jun 07 Python
python实现微信每日一句自动发送给喜欢的人
Apr 29 Python
ZABBIX3.2使用python脚本实现监控报表的方法
Jul 02 Python
Python如何使用k-means方法将列表中相似的句子归类
Aug 08 Python
django框架ModelForm组件用法详解
Dec 11 Python
pytorch:torch.mm()和torch.matmul()的使用
Dec 27 Python
python画图常规设置方式
Mar 05 Python
Python操作MySQL数据库的示例代码
Jul 13 Python
python编写实现抽奖器
Sep 10 Python
python tkinter实现下载进度条及抖音视频去水印原理
Feb 07 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
Laravel学习教程之从入口到输出过程详解
2017/08/27 PHP
Laravel框架实现的rbac权限管理操作示例
2019/01/16 PHP
经典的解除许多网站无法复制文字的绝招
2006/12/31 Javascript
Jquery实战_读书笔记2 选择器
2010/01/22 Javascript
asp.net网站开发中用jquery实现滚动浏览器滚动条加载数据(类似于腾讯微博)
2012/03/14 Javascript
JS图片预加载 JS实现图片预加载应用
2012/12/03 Javascript
获取offsetTop和offsetLeft值的js代码(兼容)
2013/04/16 Javascript
倒记时60刷新网页的js代码
2014/02/18 Javascript
JavaScript中DOM详解
2015/04/13 Javascript
jQuery多级联动下拉插件chained用法示例
2016/08/20 Javascript
ReactNative Image组件使用详解
2017/08/07 Javascript
vue2.0 移动端实现下拉刷新和上拉加载更多的示例
2018/04/23 Javascript
Vue.js实现的计算器功能完整示例
2018/07/11 Javascript
vue2.0 + ele的循环表单及验证字段方法
2018/09/18 Javascript
微信小程序使用template标签实现五星评分功能
2018/11/03 Javascript
Vue表单控件绑定图文详解
2019/02/11 Javascript
vue-cli项目使用mock数据的方法(借助express)
2019/04/15 Javascript
Vue获取页面元素的相对位置的方法示例
2020/02/05 Javascript
javascript使用正则表达式实现注册登入校验
2020/09/23 Javascript
js禁止查看源文件屏蔽Ctrl+u/s、F12、右键等兼容IE火狐chrome
2020/10/01 Javascript
Python使用ftplib实现简易FTP客户端的方法
2015/06/03 Python
Python对字符串实现去重操作的方法示例
2017/08/11 Python
Python网页正文转换语音文件的操作方法
2018/12/09 Python
python利用itertools生成密码字典并多线程撞库破解rar密码
2019/08/12 Python
解决django 向mysql中写入中文字符出错的问题
2020/05/18 Python
PyCharm MySQL可视化Database配置过程图解
2020/06/09 Python
Python调用飞书发送消息的示例
2020/11/10 Python
HTML5 CSS3给网站设计带来出色效果
2009/07/16 HTML / CSS
关于前端上传文件全面基础扫盲贴(入门)
2019/08/01 HTML / CSS
报关简历自我评价怎么写
2013/09/19 职场文书
保密工作目标责任书
2014/07/28 职场文书
民警群众路线教育实践活动对照检查材料
2014/10/04 职场文书
黄山导游词
2015/01/31 职场文书
拾金不昧表扬信怎么写
2015/05/04 职场文书
个人的事迹材料怎么写
2019/04/24 职场文书