Python模拟登陆及个人经验(五)

发布时间:2019-06-21 16:23:30编辑:auto阅读(1990)

    实验名称:模拟登陆

    实验要求:

    1. 输入用户名密码

    2. 认证成功显示欢迎信息

    3. 输错三次锁定用户

       

      思路:

    4. 用户输入username

    5. 判断username是否为真(文件)。

    6. 否:提示用户不存在;是:判断是否锁定(文件)

    7. 如果用户锁定提示:该用户已锁定;没锁定就输入密码

    8. 循环三次(判断密码是否正确)

    9. 密码超过三次不正确,就写入锁文件

       

      流程图:


    3f9b32d65712b0a8ed38ee85b603dd44.png-wh_

     

     

        代码实现:

    #!/usr/bin/env python
    #Author:Li QW

    #加载sys模块
    import sys

    #指定文件路径,这里用的是绝对路径
    user_word='C:/Users/Administrator/Desktop/open.txt'  #用户文件
    close_word='C:/Users/Administrator/Desktop/close.txt' #锁用户文件
    f=open(user_word,'r')  #打开文件
    user_info=f.read() # 读取文件
    f.close() #读取之后关闭文件
    user_lis= user_info.split("#") #以井号作为分隔符
    dict = {} #导入字典
    for item in user_lis:  #赋给变量item
        item_list=item.split(':') #以冒号作为分隔符
        dict[item_list[0]]=item_list[-1]    

    count = 0 #计数器的作用
    username = input("Input username:") #输入用户名
    if username in dict:
        l=open(close_word,'r')
        black_info = l.read()
        l.close()
        black_list = black_info.split('#')
        lock_dict = {}
        for items in black_list:
            items_list = items.split(':')
            lock_dict[items_list[0]]=items_list[-1] #这里注意,用-1 读最后一行,我之前写1 ,掉进坑里爬不起来了。写1,当文件为空时,它会读取不到这个参数就会报错。
        if username in lock_dict: #如果在close.txt文件有这个用户,则提示该用户已锁!
            print("username close...")
            sys.exit() #退出
        else:
            while count <3: #输入次数小于三次继续循环
                password = input("Input password:") #输入密码
                if password == dict[username]: #判断密码是否正确
                    print("Welcome user login !")
                    sys.exit()
                else:
                    count +=1 #错误累加一次 (相当于count = count +1)
                    if count ==3: #写错三次记录到close.txt文件中
                        l=open(close_word,'a') 
                        l.write("#%s:%s"%(username,dict[username]))
                        print("用户输错三次被锁定...")
                        sys.exit() #退出
                    else: #提示还有几次机会
                        print('您还有%s次机会'%(3-count)) 
    else: #用户不存在打印
        print("NO usernames...") 

     

    附带报错内容: 

    f2c848760cbee0b07edaefd26e17d5b5.png-wh_


    心得体悟:

    写代码容易,排错难!做事要尽可能的考虑周全。走过的坑多了,自然就会熟悉。

关键字