栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python从入门到精通(DAY 3)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python从入门到精通(DAY 3)

要求:编写登陆接口

输入用户名密码
认证成功后显示欢迎信息
输错三次后锁定

针对此实例写了有二种类型的脚本,略有不同,具体如下:

帐号文件account.txt内容如下:

sam 123

david 12
kevin 123
lin 12
tailen 123
jack 12

锁文件account_lock.txt默认为空

一、只针对帐号文件里的用户进行判断并锁定,针对用户和密码各有三次错误重试机会。

1、流程图如下:

代码如下:

#!/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('33[31;43mUsername:33[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('33[35mUser %s is locked!!!33[0m' % username)  #如果LOCK了就直接退出
  password = raw_input('33[32;41mPassword:33[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()

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/34242.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号