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 ip正则式
May 07 Python
Python设计模式编程中解释器模式的简单程序示例分享
Mar 02 Python
python基础教程项目四之新闻聚合
Apr 02 Python
Python安装lz4-0.10.1遇到的坑
May 20 Python
Python实现将多个空格换为一个空格.md的方法
Dec 20 Python
python实现切割url得到域名、协议、主机名等各个字段的例子
Jul 25 Python
python实现计算器功能
Oct 31 Python
用python中的matplotlib绘制方程图像代码
Nov 21 Python
Python导入模块包原理及相关注意事项
Mar 25 Python
基于python实现可视化生成二维码工具
Jul 08 Python
python报错: 'list' object has no attribute 'shape'的解决
Jul 15 Python
python 闭包函数详细介绍
Apr 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
phpMyAdmin 链接表的附加功能尚未激活的问题
2010/08/01 PHP
ThinkPHP3.2.2的插件控制器功能简述
2014/07/09 PHP
PHP获取短链接跳转后的真实地址和响应头信息的方法
2014/07/25 PHP
javascript之卸载鼠标事件的代码
2007/05/14 Javascript
JavaScript 解析读取XML文档 实例代码
2009/07/07 Javascript
javascript几个易错点记录
2014/11/26 Javascript
jQuery scrollFix滚动定位插件
2015/04/01 Javascript
jQuery封装的tab选项卡插件分享
2015/06/16 Javascript
详解JavaScript数组的操作大全
2015/10/19 Javascript
极力推荐一款小巧玲珑的可视化编辑器bootstrap-wysiwyg
2016/05/27 Javascript
AngularJS入门教程之表格实例详解
2016/07/27 Javascript
Javascript使用SWFUpload进行多文件上传
2016/11/16 Javascript
jQuery实现判断控件是否显示的方法
2017/01/11 Javascript
Angular.js中控制器之间的传值详解
2017/04/24 Javascript
vue webpack实用技巧总结
2018/04/24 Javascript
element-ui表格列金额显示两位小数的方法
2018/08/24 Javascript
微信小程序保持session会话的方法
2020/03/20 Javascript
JavaScript this指向相关原理及实例解析
2020/07/10 Javascript
pyside写ui界面入门示例
2014/01/22 Python
Python中Random和Math模块学习笔记
2015/05/18 Python
Python3读取Excel数据存入MySQL的方法
2018/05/04 Python
python实现对输入的密文加密
2019/03/20 Python
Python文件操作中进行字符串替换的方法(保存到新文件/当前文件)
2019/06/28 Python
Django框架之DRF 基于mixins来封装的视图详解
2019/07/23 Python
Pytorch evaluation每次运行结果不同的解决
2020/01/02 Python
Python实现钉钉订阅消息功能
2020/01/14 Python
简单总结CSS3中视窗单位Viewport的常见用法
2016/02/04 HTML / CSS
俄罗斯购买剧院和演唱会门票网站:Parter.ru
2019/11/09 全球购物
乌克兰的第一家手表店:Deka
2020/03/05 全球购物
销售内勤岗位职责
2015/02/10 职场文书
出国留学导师推荐信
2015/03/26 职场文书
十二生肖观后感
2015/06/12 职场文书
小爸爸观后感
2015/06/15 职场文书
交通事故责任认定书
2015/08/06 职场文书
2016社区平安家庭事迹材料
2016/02/26 职场文书
python3+PyQt5+Qt Designer实现界面可视化
2021/06/10 Python