欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python学习-实现用户密码登录,输错三次锁定

程序员文章站 2022-05-04 15:07:46
作业需求: 实现思路: 方式一: 方式二: ......

作业需求:

  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()