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


    基础需求:
    让用户输入用户名密码
    认证成功后显示欢迎信息
    输错三次后退出程序
    
    升级需求:
    可以支持多个用户登录 (提示,通过列表存多个账户信息)
    用户3次认证失败后,退出程序,再次启动程序尝试登录时,还是锁定状态(提示:需把用户锁定的状态存到文件里)


    # author:simon002
    # -*- coding: utf-8 -*-
    
    import os
    
    
    # 创建文件存储用户名和密码,并放入两对用户名和密码
    if not os.path.exists('simon.txt'):
        with open('simon.txt','a+') as fx:
            fx.write(str({'simon': '001', 'lily': '002'}))
    
    # 创建文件存储用户名和密码输入的次数,初始为空
    if not os.path.exists('simonlocktime.txt'):
        with open('simonlocktime.txt','a+'):pass
    
    
    with open('simon.txt','r')as f:
        user = f.read()
        user = eval(user)    # 把文件中的字典格式的内容读出来,并且转化为字典(默认读进来是字符串)
    with open('simonlocktime.txt','r')as f2:
        dic_locktime = f2.read()    # 读锁定次数的字典
        if len(dic_locktime)>0:    # 初始为空,所以读出来的有值的时候才将其转化为字典
            dic_locktime = eval(dic_locktime)
        else:dic_locktime={}    # 无值的时候初始化字典
    
    ifcontinue = 1
    while ifcontinue:
        name = input('请输入用户名:')
        name_exist = user.get(name)    # 根据输入的用户名找对应的密码
        if name_exist:
            error_num = dic_locktime.get(name)    # 找到之后读取锁定次数
            if error_num == 3:
                print('账户已被锁定!')
                exit()
            if error_num == None:
                error_num = 0
            while error_num<3:    # 未锁定时输入密码
                psd = input('请输入密码:')
                if psd ==user.get(name):
                    dic_locktime[name] = error_num
                    print('Welcome %s login ...'%name)
                    ifcontinue = 0    # 成功登陆之后不让用户再输入用户名,锁定的时候再继续输入用户名
                    break
                else:
                    error_num += 1
                    print('密码输入错误第%s次,输入错误超过三次后将被锁定!'%error_num)
            if error_num == 3:
                dic_locktime[name] = 3
        else:
            print('未找到此用户名!')
        with open('simonlocktime.txt', 'w+')as f__lock:
            f__lock.write(str(dic_locktime))
    View Code
  • 相关阅读:
    easyui validatebox 验证集合
    java.io.InvalidClassException: com.master.CurrentMessages; local class incompatible:
    脏读 幻读 不可重复读
    配置spring上下文
    radio checked不起作用的原因
    org.codehaus.jackson.map.JsonMappingException: No serializer found for class org.hibernate.proxy.pojo.javassist.
    [JBPM3.2]TaskNode的signal属性详解
    JBPM具体应用之decision节点的使用
    ED/EP系列1《简单介绍》
    利用内容观察者操作系统的联系人(查询,加入)
  • 原文地址:https://www.cnblogs.com/Simonsun002/p/8280241.html
Copyright © 2020-2023  润新知