zoukankan      html  css  js  c++  java
  • python学习实现用户密码登录,输错三次锁定

    作业需求:

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

    实现思路:

    1. 判断用户是否在黑名单,若在黑名单,则将用户锁定
    2. 判断用户是否存在,若不存在,提示用户不存在
    3. 若用户存在,判断登录密码是否正确,若正确,则欢迎用户成功登录,提供用户三次密码输入机会,若三次输入错误,则将账户锁定

    方式一:

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    count = 0    #计数器
    username = "aaa"  #登录用户名
    userpassword = "asd"   #登录密码
    
    #读取黑名单用户
    f = open("aaa.txt","r")
    file_list = f.readlines()
    f.close()
    lock= []
    name = input("登录用户名:")
    
    #判断用户是否在黑名单
    for i in file_list:
        line = i.strip("\n")
        lock.append(line)
    if name in lock:
        print("你的账户已锁定,请联系管理员。")
    else:
    #如果用户没有在黑名单,判断用户是否存在
        if name == username:
        #如果密码连续输错了三次,锁定账号
            while count <3:
                password = input("登录密码:")
                if name == username and password == userpassword:
                    print("欢迎%s!"%name)
                    break
                else:
                    print("账号和密码不匹配")
                    count +=1
            else:
                print("对不起,您的账号连续输错三次密码已被锁定,请联系管理员。")
                f = open("aaa.txt","w+")
                li = ['%s'%username]
                f.writelines(li)
                f.close()
        else:
            print("用户名不存在,请输入正确的用户名。")

    方式二:

     1 #新建两个文件,account.txt和account_lock.txt,在account中输入aaa 123
     2 #其中account.txt采用只读形式,account_lock.txt则采用读写形式
     3 import sys,os
     4 count = 0
     5 name_list = []
     6 while count < 3:
     7     name = input("请输入用户名:")
     8     lock_file = open("account_lock.txt","r+")   #读取黑名单,"r+":打开一个文件用于读写,"r":以只读方式打开文件
     9     lock_list = lock_file.readlines()
    10     #.readlines():一次读取整个文件,并将内容分析成一个行的列表,与.read()一样
    11     #.readline():一次读取一行,当内存不够时使用.readline()
    12     for lock_line in lock_list:
    13         lock_line = lock_line.strip('\n')
    14         if name == lock_line:
    15             #如果输入的用户名位于黑名单,则程序异常退出
    16             sys.exit("用户%s已经被锁定,请联系管理员解锁." %name)
    17     #读取正确的用户名和密码
    18     user_file = open("account.txt","r")
    19     user_list = user_file.readlines()
    20     for user_line in user_list:
    21         (user,password) = user_line.strip('\n').split()
    22         name_list.append(user_line)    #.append():用于在列表末尾添加新的对象
    23         print("---------",name_list)
    24         #用户名正确,密码输入计数
    25         if name == user:
    26             i = 0
    27             while i<3:
    28                 passwd = input("请输入密码:")
    29                 if passwd == password:
    30                     print("欢迎%s登录"%name)
    31                     sys.exit(0)
    32                 else:
    33                     if i<2:
    34                         print("用户%s密码错误,请重新输入,还有%d机会."%(name,2-i))
    35                 i += 1
    36             else:
    37                 lock_file.write(name + '\n')
    38                 sys.exit("用户%s输错密码三次,用户将被锁定并退出,请联系管理员解锁."%name)
    39         else:
    40             pass
    41     else:
    42         #用户名输入错误计数
    43         if count < 2:
    44             print("用户%s不存在,请重新输入,还有%d次机会"%(name,2-count))
    45         count += 1
    46 else:
    47     sys.exit("用户%s不存在,退出"%name)
    48 #关闭已经打开的文件
    49 lock_file.close()
    50 user_file.close()
  • 相关阅读:
    asm createdisk时提示没有权限
    webkit 模拟点击 winform
    .net中的反射(转载)
    wpf——三维学习1
    3dmax导出到blend或者vs中
    地理坐标系与投影坐标系
    Arcgis与CityEngine安装破解
    忘记Windows7登陆密码解决办法
    wpf的UserControl用户控件怎么添加到Window窗体中
    postgres索引创建、 存储过程的创建以及在c#中的调用
  • 原文地址:https://www.cnblogs.com/yangshijia/p/8643604.html
Copyright © 2011-2022 走看看