• python登陆认证程序



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

    代码一(只用到了列表),需要在同级别目录先创建名为lockedname.txt的空文件。
    #!/usr/bin/env python
    # coding=utf-8
    # __author__ = "zhaohongwei"
    # Date: 2019/1/27
    
    
    name_list = ["zhangsan","lisi","wangwu"]  # 用户名列表
    passwd_list = ["zhangsan666","lisi666","wangwu666"]  # 用户的密码列表
    count = [0, 0, 0]  # 用户登录密码错误的次数计数
    while True:
        name_index = 999999  # 定义一个不存在的用户的下标
        name = input("请输入你的姓名:").strip()
        passwd = input("请输入你的密码:").strip()
        with open("lockedname.txt","r+") as f:
            locked_name = "".join(f.readlines()).splitlines()
            if name in locked_name:
                print("用户已经被锁定,请联系管理员")
                continue
        for i in range(len(name_list)):
            if name == name_list[i]:
                name_index = name_list.index(name_list[i])
        if name_index == 999999:
            print("用户名不存在,请重新输入")
            continue
        if name == name_list[name_index] and passwd == passwd_list[name_index]:  # 判断用户名密码
            print("欢迎 %s 同学"%(name_list[name_index]))
            break
        else:
            count[name_index] += 1  # 同一个用户名输错密码加一
            print("密码错误")
            if count[name_index] == 3 :
                print("3次密码错误,用户账号已被锁定")
                with open("lockedname.txt","a+") as f:
                    f.writelines(name_list[name_index]+"
    ")
                break
    

    代码二(修改版,用到了字典)

    #!/usr/bin/env python
    # coding=utf-8
    # __author__ = "zhaohongwei"
    # Date: 2019/1/27
    
    import json
    
    user = {
        "zhangsan": ["zhangsan666",3,False],
        "lisi": ["lisi666",0,True],
        "wangwu": ["wangwu666",0,True]
    }    #用户名:[密码,密码输错次数,False锁定用户]
    while True:
        name = input("请输入你的姓名:").strip()
        try:
            with open("lockedname.txt","r+",encoding="utf-8") as f:
                user = json.load(f)  #若是有lockedname.txt文件,则user重新赋值
        except Exception as err:
            pass
        if name not in user:
            print("用户名不存在,请重新输入")
            continue
        elif user[name][2] == False:
            print("用户已经被锁定,请联系管理员")
            continue
        elif name in user:
            passwd = input("请输入你的密码:").strip()
            if passwd == user[name][0]:  # 判断用户名密码
                print("欢迎 %s 同学"%(name))
                user[name][1] = 0
                with open("lockedname.txt", "w", encoding="utf-8") as f:
                    json.dump(user, f)
                break
            else:
                user[name][1] += 1  # 同一个用户名输错密码加一
                print("密码错误")
                if user[name][1] >= 3:
                    print("用户账号已被锁定")
                    user[name][2] = False
                with open("lockedname.txt", "w", encoding="utf-8") as f:
                    json.dump(user, f)
    
  • 相关阅读:
    延时函数出错,volatile一例
    【转】STM32中的抢占优先级、响应优先级概念
    【转载】串口中怎样接收一个完整数据包的解析
    ARM-ContexM3/4组优先级和子优先级抢占规则
    【转载】Keil中的USE MicroLib说明
    线程让出实验【RT-Thread学习笔记 4】
    线程优先级抢占实验【RT-Thread学习笔记 3】
    RT-Thread的线程(任务)处理【RT-Thread学习笔记 2】
    熟悉RT-Thread的软硬件环境【RT-Thread学习笔记 1】
    RT-Thread下的串口驱动程序分析【转载】
  • 原文地址:https://www.cnblogs.com/zhaohw127/p/10494996.html
Copyright © 2020-2023  润新知