
正文
python学习-实现用户密码登录,输错三次锁定
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
作业需求:
- 输入用户名密码
- 认证成功后显示欢迎信息
- 输错三次后锁定
实现思路:
- 判断用户是否在黑名单,若在黑名单,则将用户锁定
- 判断用户是否存在,若不存在,提示用户不存在
- 若用户存在,判断登录密码是否正确,若正确,则欢迎用户成功登录,提供用户三次密码输入机会,若三次输入错误,则将账户锁定
方式一:
#!/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("用户名不存在,请输入正确的用户名。")
方式二:
#新建两个文件,account.txt和account_lock.txt,在account中输入aaa 123
#其中account.txt采用只读形式,account_lock.txt则采用读写形式
import sys,os
count = 0
name_list = []
while count < 3:
name = input("请输入用户名:")
lock_file = open("account_lock.txt","r+") #读取黑名单,"r+":打开一个文件用于读写,"r":以只读方式打开文件
lock_list = lock_file.readlines()
#.readlines():一次读取整个文件,并将内容分析成一个行的列表,与.read()一样
#.readline():一次读取一行,当内存不够时使用.readline()
for lock_line in lock_list:
lock_line = lock_line.strip('\n')
if name == lock_line:
#如果输入的用户名位于黑名单,则程序异常退出
sys.exit("用户%s已经被锁定,请联系管理员解锁." %name)
#读取正确的用户名和密码
user_file = open("account.txt","r")
user_list = user_file.readlines()
for user_line in user_list:
(user,password) = user_line.strip('\n').split()
name_list.append(user_line) #.append():用于在列表末尾添加新的对象
print("---------",name_list)
#用户名正确,密码输入计数
if name == user:
i = 0
while i<3:
passwd = input("请输入密码:")
if passwd == password:
print("欢迎%s登录"%name)
sys.exit(0)
else:
if i<2:
print("用户%s密码错误,请重新输入,还有%d机会."%(name,2-i))
i += 1
else:
lock_file.write(name + '\n')
sys.exit("用户%s输错密码三次,用户将被锁定并退出,请联系管理员解锁."%name)
else:
pass
else:
#用户名输入错误计数
if count < 2:
print("用户%s不存在,请重新输入,还有%d次机会"%(name,2-count))
count += 1
else:
sys.exit("用户%s不存在,退出"%name)
#关闭已经打开的文件
lock_file.close()
user_file.close()








