zoukankan      html  css  js  c++  java
  • python作业:模拟登陆(第一周)

    模拟登陆作业需求:

    1. 用户输入帐号密码进行登陆

    2. 用户信息保存在文件内

    3. 用户密码输入错误三次后锁定用户

    额外实现功能:

    1.提示输入错误次数

    2.输入已锁定用户会提示

    3.用户不存在会提示

    正确用户信息文件中以字典形式保存用户名密码:

    {'name': 'password','cx':'123','even':'456','test':'ok'}

    锁定用户信息文件中以列表形式保存锁定用户名:

    ['name']

    流程图:

    详细代码:(python3.6)

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    # Author: Even
    
    
    count = 0  # 为了记录需求中3次输入错误避免的次数,计数项赋初始值
    load = True  # 为了完成功能后退出,赋初始值
    file = open("正确用户信息文件",'r',encoding='utf-8')  # 打开正确用户信息文档,获取正确的用户名密码
    file_wrong = open("锁定用户信息文件",'r+',encoding='utf-8')  # 打开已锁定的用户信息文档,获取锁定的用户名密码
    line = eval(file.readline())  # 将正确信息中的字符串转换成字典(原字符串为字典格式)
    line_wrong = eval(file_wrong.readline())  # 将正确信息中的字符串转换成列表(原字符串为列表格式)
    
    
    def out():  # 将重复代码定义,功能是帮助跳出while循环并关闭已打开文档
        global load  # 声明全局变量
        load = False  # 赋值load,为了跳出while循环
        file_wrong.close()  # 关闭正确用户信息文档
        file.close()  # 关闭锁定用户信息文档
    
    while load:  # 判断是否已完成功能
        name = input("请输入用户名:")  # 输入用户名
        password = input("请输入密码:")  # 输入密码
        if name in line and name not in line_wrong:  # 判断用户名是否正确,和是否已被锁定
            while count <= 3:  # 判断是否已循环3次
                if password == line[name]:  # 判断用户名是否对应正确的密码
                    print("您已成功登陆")  # 输出成功登陆信息
                    out()  # 调用自定义out方法
                    break  # 跳出本次循环
                else:  # 说明未输入正确的密码
                    count +=1  # 计数项自加一
                    msg_count = '''第%s次密码输入错误
    '''%(count)  # 提示输入错误次数
                    print(msg_count)  # 打印错误次数信息
                    if count < 3:  # 小于三次错误输入,可以重新输入
                        password = input("密码错误,请重新输入密码:")  # 重新输入密码
                    elif count == 3:  # 判断是否已输错三次
                        print("已输错3次,账号已锁定")  # 打印锁定提示信息
                        line_wrong.append(name)  # 将已锁定信息加入锁定元组中
                        file_wrong.seek(0)  # 输入指针移到开头,如果不移动会产生多个元组
                        file_wrong.write(str(line_wrong))  # 写入锁定信息
                        file_wrong.tell()  # 获取当前的输入指针位置,如果不获取会产生多个元组
                        out()  # 调用out方法
                        break
        elif name in line_wrong:  # 判断用户名是否在已锁定用户名中
            print("该用户名已被锁定")  # 打印已锁定通知信息
            out()  # 调用自定义out方法
            break  # 跳出当前循环
        else:  # 说明用户名不在正确用户名信息中
            print("该用户名不存在")  # 打印用户名输入错误信息
            out()  # 调用out方法
    View Code
  • 相关阅读:
    [vue]vue路由篇vue-router
    [vue]spa单页开发及vue-router基础
    [css]table的拆分
    [sh]md5sum接变量,find排除,sh判断文件存在
    [vue]通过watch实现数据双向绑定
    [django]form不清空问题解决
    [vue]实现父子组件数据双向绑定
    springboot2.0 如何异步操作,@Async失效,无法进入异步
    kafka搭建笔记
    Springboot2.x+shiro+redis(Lettuce)整合填坑
  • 原文地址:https://www.cnblogs.com/bg0131/p/6416303.html
Copyright © 2011-2022 走看看