day1作业编写登录窗口

(野生程序员) (野生程序员)     2022-08-30     468

关键词:

作业一:编写登录接口

    (1)输入用户名和密码;

  (2)认证成功后显示欢迎信息;

  (3)输错三次后锁定。

    思路:我们知道,要想让程序记住之前输入多少次,锁定用户,那么可以使用数据库来保存用户的状态,然而,数据库的知识还没有学习,因此我们要使用文件来保存文件。持久化保存数据信息,要保存在硬盘中。

    (1)登陆,三次登陆锁定用户

    用户信息文件         (用文件存储用户信息)

  黑名单文件

        1.黑名单检测,不让登陆

    2.用户名密码判定

    readme:

    1.让用户输入用户名,首先在锁定列表中进行查找,查看用户是否进行锁定,如果用户没有在锁定文件中,那么在尝试看用户是否在用户文件中,如果输入的用户在文件中,则让用户输入密码,对密码进行判断,如果密码等于对应的用户的话就满足认证,让用户登陆成功,如果输入错误,则让用户重新输入,如果三次都没有成功,则锁定这个用户。

  2.在上面的思路中,我们可以遍历文件,把用户的信息存放在一个字典中,到时候只需要根据用户输入的用户名作为键,然后匹配对应的密码,看是否与用户输入的密码等同即可。

  3.我们也可以添加一个注册模块,如果用户不在用户文件中,则提示让注册,注册之后再登陆。

    为此:我们采用两种方式进行尝试,一种是从上而下的编程;第二种是函数式编程方式:

流程图如下:

 

    上面流程图是登录的过程,下面来编写代码:

   

#现有两个文件,一个lock_user,用于存储用户列表,一个lock_file用于锁定用户
#要想使用常规方法来造成多次输入的情况,必须使用while函数循环,为此,我们设置一个标识符,用来结束循环

active = True
#设置标识符,用于结束真个循环,当我们想结束整个循环的时候,可以让表示符为false
user_dic = {}
#定义一个空字典,用于存储未锁定用户的用户名和密码
lock_dic = {}
#定义一个用于存储锁定用户的空字典
i = 0
while active:
    username = input("Please input your name:")
    #让用户输入用户名
    with open("lock_user","r") as f:
        #打开文件,并且遍历文件的每一行,用户把用户信息存储到字典中,以我们熟悉的方式处理
        for line in f.readlines():
            user,password = line.strip().split(":")
            #读取文件的每一行,并且分割字符串,生成用户名和密码存储在下面字典中
            lock_dic[user] = password
    if username in lock_dic.keys():
        #判断用户名是否在锁定列表中,如果在退出
        print("对不起,你输入的用户名已经被锁定,请联系管理员......")
        break
    else:
        pass
    with open("user_list","r") as f1:
        #打开文件,目的是判断用户是否注册
        for line1 in f1.readlines():
            user1,pwd = line1.strip().split(":")
            user_dic[user1] = pwd
    while active:
        if username in user_dic:
            #判断用户是否注册,如果注册了,就让用户输入密码
            if i < 3:
                #给用户三次机会
                input_pwd = input("Pleae input your password:")
                if input_pwd == user_dic[username]:
                    print("登录成功,欢迎回来!")
                    exit()
                else:
                    if i == 2:
                        #如果第三次用户还没有输对,则把用户从用户文件移除到锁定文件中
                        print("对不起,你输入的次数过多,你的账户已经被锁定,请联系管理员")
                        with open("lock_user", "a") as f3:
                            f3.write("\n%s:%s" % (username, user_dic[username]))
                        with open("user_list","r+") as f4:
                            lines = f4.readlines()
                            if ("%s:%s\n" %(username,user_dic[username])) in lines:
                                lines.remove(("%s:%s\n" %(username,user_dic[username])))
                            else:
                                lines.remove(("%s:%s" %(username,user_dic[username])))
                            #逐行读取文件信息
                            f4.writelines(lines)
                        active = False
                    else:
                        print("您还有%s次机会输入,如果都没输对,系统将索斯能够你的用户名" %(2-i))
                        i += 1
        else:
            #如果用户没有注册,让用户这测,并且把注册后的用户添加到新的列表中
            print("您输入的用户没有注册,请注册")
            log_user = input("Please input your login in name:")
            log_pwd = input("Please input your log password:")
            with open("user_list","a") as f2:
                f2.write("\n%s:%s" %(log_user,log_pwd))
            print("注册成功,欢迎您的加入!")
            active = False

 

    上面代码中,主要用的是对文件的操作,文件的操作我掌握的还不是很熟练,另外我们在读取文件的时候,大家都经常遇到恶心的应该就是空行吧!我们在遍历文件的时候,如果使用split()方法分隔,遇到空行的时候会报错,因为分隔不了,没有参数提供给我们的变量,这个时候可以事先做个判断,而且文件的操作使用w+写读模式容易一不小心把后台文件内容清楚,被boss开除,因为文件的操作本人不是怎么喜欢。空行的问题可以使用if进行判断,如果遇到空行,回避掉。函数式编程程序如下:

import getpass
#导入模块,用于让用户输入密码处于隐藏状态
def locked_user(username):
    #查看用户是否锁定
    lock_users = []
    #定义一个空的列表,用于存储锁定用户信息
    with open("lock_file","r") as f:
        #打开文件
        for line in f.readlines():
            #逐行读取文件信息
            if line.strip():
                #对文件进行判断,判断是否是空行,因为空行的时候会报错
                lock_user,lock_pwd = line.strip().split(":")
                #字符串分割,生成用户名和密码,用户名存放在一个列表中进行验证是否锁定
                lock_users.append(lock_user)
            else:
                pass
        if username in lock_users:
            #用户在锁定列表中告诉用户已经锁定
            print("您输入的用户已经被锁定,请联系管理员!")
        else:
            #用户没有锁定,返回用户名进行接下来用户是否注册的验证
            return username

def isregister(username):
    #验证是否注册
    user_dic = {}
    #定义一个空字典,用于存放用户名和密码
    users = []
    #定义一个空的列表,用于存储用户名
    with open("user_file","r") as f1:
        for line1 in f1.readlines():
            if line1.strip():
                users1,pwd1 = line1.strip().split(":")
                #字符串分割,生成用户名和密码
                user_dic[users1] = pwd1
                #生成用户名和密码字典
                users.append(users1)
                #把用户名以及对应的密码存放在一个字典中
            else:
                pass
        if username in user_dic.keys():
            #判断用户名是否在用户列表中,在进行验证
            i = 0
            while i < 3:
                pwd = input("请输入你的用户密码:")
                if user_dic[username] == pwd:
                    print("欢迎回来!")
                    return False
                else:
                    if i == 2:
                        print("对不起,您输入的次数过多,你的用户名已经被锁定,请联系管理员!")
                        # 用户名锁定之后要把锁定用户添加到锁定列表中,从user_file中剔除
                        with open("user_file", "r+") as f3:
                            lines = f3.readlines()
                            num = users.index(username)
                            lines.pop(num)
                            f3.writelines(lines)
                        with open("lock_file", "a") as f4:
                            f4.write("\n%s:%s" % (username, pwd))
                        return False
                    else:
                        print("您输入的密码不对,你还有%s次机会..." % (2 - i))
                        i += 1
        else:
            #不在让用户注册
            print("您输入的用户没有注册,请注册!")
            register(rigister_name = input("请输入你要注册的用户名:"),rigister_pwd = getpass.getpass("请输入您的密码"))

def register(rigister_name,rigister_pwd):
    #用户注册账号,注册之后添加到用户列表中,且打印一条注册成功的消息,结束过程
    with open("user_file","a") as f2:
        f2.write("\n%s:%s" %(rigister_name,rigister_pwd))

    print("注册成功,欢迎您!")
    return False

active = True
#定义一个标识符,用于开启结束循环
while active:
    username = input("请输入您的用户名::")
    locked_user(username)
    active = isregister(username)

    上面代码基本上能够满足要求,能够验证是否锁定,是否注册,没有注册让用户注册,注册之后添加到用户列表中;注册输入密码,密码三次后锁定,从用户文件删除,添加到锁定文件;但是用户文件哪里有一点小bug,因为我不知道如何读取一个文件删除之后在添加,因为"w"模式打开文件后直接清空文件,他妈的,操。而"r+"模式打开后,如果在添加信息进去的话,之前的信息还存在。造成没有删除的用户重复。

    在读取文件中也经常会遇到空格这种恶心的操作,真心不喜欢呀。不过可以使用if函数对空格进行判断,判断空格的位置。

day1作业---登录接口及多级菜单

作业一:编写登录接口输入用户密码认证成功后显示欢迎信息输错三次后锁定作业二:多级菜单三级菜单可一次选择进入各子菜单所需新知识点:列表、字典 查看详情

day1:作业编写登录接口并画出相应的流程图

作业要求:1.输入用户名密码2.认证成功后显示欢迎信息3.输错三次后锁定代码如下_user_list=[]_user_dict={}_login_error_count=0whileTrue:user_naming=input(‘Plassinputyourname:‘)user_password=input(‘Plassinputyourpassword:‘)user_data=open(‘Us 查看详情

day1作业:登录接口

   作业一:编写登陆接口    1.输入用户名和密码   2.认证成功后显示欢迎信息   3.输错三次后锁定   思路:   (1)用户输入用户名;  (2)去锁定文件中... 查看详情

day1作业--登录接口

作业:编写登陆接口输入用户名密码认证成功后显示欢迎信息输错三次后锁定   知识:   1.循环的使用;  2.continue,break在循环中中断的作用;  3.文件的写入,读取;  4.各基础知识的穿插应用 &n... 查看详情

day1作业要求

Day1作业作业需求博客模拟登录三级菜单博客地址杨振伟Day1博客地址模拟登录1.程序说明实现功能如下用户输入密码,密码验证后登录成功用户登录成功后提示登录信息用户输入3次错误密码后锁定2.程序测试账号测试账号:admin测... 查看详情

day1作业-模拟登录

#/usr/bin/envpython#-*-coding:utf-8-*-#Author:jenvid.yangimportgetpassimportshutiluserspwd={}#print(type(userspwd))userssta={}luser=[]count=0usercontent=open(‘../config/users.inf‘,‘r‘)forlineinusercon 查看详情

day1作业:编写登陆接口

   作业一:编写登陆接口    1.输入用户名和密码   2.认证成功后显示欢迎信息   3.输错三次后锁定   思路:要求是编写登陆接口,那么要有一个存放用户信息的模块;三... 查看详情

day1(代码片段)

作业1编写登录接口?输入用户名密码?认证成功后显示欢迎信息?输错三次后锁定---思路:用户信息文件、密码文件、检测用户名,是否让登录用户名密码判定 作业2多级菜单市区县?三级菜单?可依次选择进入各子菜单?所需新知... 查看详情

day1作业一:编写登陆接口

   作业一:编写登陆接口    1.输入用户名和密码   2.认证成功后显示欢迎信息   3.输错三次后锁定Readme:   (1)提示用户输入用户名;   (2)用户名验证,... 查看详情

day1课后作业:用户登录简单版

user="gaojun"password="123abc"foriinrange(3):user=input(‘请输入用户名:‘)password=input(‘请输入密码:‘)ifuser=="gaojun"andpassword=="123abc":print("欢迎!gaojun!")breakelse:print("用户或密码错误!")else:print("输入次数到达3次,!")解释 查看详情

老男孩day1作业二

作业内容:(1)编写登录接口(2)认证成功后显示欢迎信息(3)输错三次锁定 以下为代码,分为两个部分的代码,一是register.py,另一个是login.py;其中register.py实现的注册功能,客户可输入用户名密码,用户名密码保存在... 查看详情

day1-作业

编写登陆接口输入用户名密码认证成功后显示欢迎信息输错三次后锁定代码如下:#!/usr/bin/envpython#-*-coding:utf-8-*-count=0name="hx"passwd="123"f=open(‘user_black‘,‘r‘)lock_file=f.read()f.close()name=input("请输入用户名:")foriinrange(1):iflock_fil 查看详情

day1-作业2

作业二:编写登陆接口输入用户名密码认证成功后显示欢迎信息输错三次后锁定编程思想:1.先初始化需要的值2.写主程序逻辑,判断账号密码3次记录黑名单,并锁定3.读取黑名单并判断是否输入为黑名单用户#!/usr/bin/envpython#-*-co... 查看详情

编写登录接口-第一个作业

编写登录接口让用户输入用户名密码认证成功后显示欢迎信息输错三次后退出程序1count=12whilecount<4:3name=input(‘name:‘)4password=input(‘password:‘)5ifname==‘egon‘andpassword==‘123‘:6print(‘欢迎登录‘)7break8else:9print(‘不好意思,您已... 查看详情

day1作业二:多级菜单操作

作业二:多级菜单(1)三级菜单(2)可以次选择进入各子菜单(3)所需新知识点:列表、字典要求:输入b返回上一层,输入q退出整个程序 查看详情

day1作业-三级菜单

#/usr/bin/envpython#-*-coding:utf-8-*-#Author:jenvid.yangimportjsonfilecontent=open(‘../config/menue.json‘)content=json.load(filecontent)print(type(content))filecontent.close()whileTrue:foriincontent: 查看详情

团队项目scrum冲刺-day1

这个作业属于哪个课程2023软件工程—双学位这个作业要求在哪里团队作业4——项目冲刺这个作业目标团队项目Scrum冲刺-day1目录1.Alpha任务认领2.明日安排3.项目预期任务量4.敏捷开发前的感想5.团队期望1.Alpha任务认领职责人员前... 查看详情

day1作业

importsys,os,getpassi=0whilei<3:name=input("请输入用户名:")lock_file=open(‘user.txt‘,‘r+‘)#打开文件查看是否有这个用户lock_list=lock_file.readlines()forlock_lineinlock_list:lock_line=lock_line.strip(‘ ‘)print(lock_li 查看详情