zoukankan      html  css  js  c++  java
  • python 模拟用户登录代码

    需求:输入用户名,判断用户是否被锁定,锁定则退出,否则进入密码验证,输入三次错误密码之后此用户被锁定。

    userlist.txt里,用":"将用户名、密码、状态码分开:

    [root@o2-test ~]# cat userlist.txt 
    张三:123:0
    李四:456:0
    admin:123:0
    qqq:123:0

    代码:

     1 #!/usr/bin/env python
     2 # -*- coding=utf-8 -*-
     3 __author__ = 'gmk'
     4 
     5 import sys
     6 import fileinput
     7 import getpass
     8 
     9 #打开用户列表, 只读
    10 fileinfo = file('userlist.txt','r')
    11 user_file = fileinfo.readlines()
    12 fileinfo.close()
    13 
    14 #定义字典 {'张三':['123','1'],...}
    15 userdict = {}
    16 for line in user_file:
    17     # userinfo = ['张三','123','0']
    18     userinfo = line.strip().split(":")
    19     # userdict['张三'] = []
    20     userdict[userinfo[0]] = [userinfo[1],userinfo[2]]
    21 
    22 
    23 #验证用户名
    24 def verify_user(inputname):
    25     #用户名为空
    26     if inputname == '':
    27         inputname = raw_input('用户名不能为空,请输入用户名:').strip()
    28         verify_user(inputname)
    29     #用户名不存在
    30     elif inputname not in userdict:
    31         inputname = raw_input('用户不存在,请重新输入用户名:').strip()
    32         verify_user(inputname)
    33     else:
    34         #用户名正确,判断是否锁定
    35         if userdict[inputname][1] == '1':
    36             print '此用户已锁定,请联系管理员!'
    37             sys.exit()
    38         else:
    39         #用户未锁定,进入密码判断
    40             print '用户名正确!'
    41             verify_pwd(inputname)
    42 
    43 
    44 #验证密码
    45 def verify_pwd(okname):
    46     pwdinfo = getpass.getpass('请输入密码:').strip()
    47     i = 2
    48     while True:
    49         if pwdinfo == userdict[okname][0]:
    50             print '%s 欢迎回来!' % okname
    51             sys.exit()
    52         elif pwdinfo == '':
    53             pwdinfo = getpass.getpass('密码不能为空,请输入密码:').strip()
    54         else:
    55             if i > 0:
    56                 pwdinfo = getpass.getpass("密码错误,您还有 %d 次机会,请重新输入密码:" %i)
    57                 i -= 1
    58             else:
    59                 update_file(okname)
    60                 print '密码输入超过三次,用户被锁定!'
    61                 sys.exit()
    62 
    63 #更新文件内容,锁定用户
    64 def update_file(okname):
    65     #旧的字符串   admin:123456:0
    66     old_str = ':'.join([okname,userdict[okname][0],str(userdict[okname][1])])
    67     #设置锁定标识
    68     userdict[okname][1] = 1
    69     #新的字符串   admin:123456:1
    70     new_str = ':'.join([okname,userdict[okname][0],str(userdict[okname][1])])
    71 
    72     #替换用户状态信息
    73     for line in fileinput.input('userlist.txt',inplace=1):
    74         print line.strip().replace(old_str,new_str)
    75     fileinput.close()
    76 
    77 
    78 user_input = raw_input('欢迎使用员工后台系统!请输入用户名:').strip()
    79 verify_user(user_input)
    View Code

    运行结果:

     1 [root@o2-test ~]# python login.py 
     2 欢迎使用员工后台系统!请输入用户名:
     3 用户名不能为空,请输入用户名:qweqwerqwer
     4 用户不存在,请重新输入用户名:qqq
     5 用户名正确!
     6 请输入密码:
     7 密码不能为空,请输入密码:
     8 密码错误,您还有 2 次机会,请重新输入密码:
     9 密码不能为空,请输入密码:
    10 密码不能为空,请输入密码:
    11 密码错误,您还有 1 次机会,请重新输入密码:
    12 密码输入超过三次,用户被锁定!
    13 [root@o2-test ~]# python login.py 
    14 欢迎使用员工后台系统!请输入用户名:qqq
    15 此用户已锁定,请联系管理员!
    16 [root@o2-test ~]# python login.py 
    17 欢迎使用员工后台系统!请输入用户名:admin
    18 用户名正确!
    19 请输入密码:
    20 admin 欢迎回来!

    userlist.txt结果:

    1 [root@o2-test ~]# cat userlist.txt 
    2 张三:123:0
    3 李四:456:0
    4 admin:123:0
    5 qqq:123:1
  • 相关阅读:
    让网页活起来!韵律线带你提升带你飞!
    打造晶格化背景
    简单banner制作
    设计模式-适配器模式
    类、方法的单一职责
    .NET趋势
    C# Delegate Event
    VB.NET项目技术总结
    版本控制工具Git的使用
    delete语句要注意的BUG.
  • 原文地址:https://www.cnblogs.com/mkuu/p/4953147.html
Copyright © 2011-2022 走看看