系统设计要求:
(1)可以输入用户名和密码
(2)密码要密文显示
(3)输错三次要锁定对应的用户
首先,我们来完成要求1,设计一个可以输入用户名和密码的界面,输入正确或错误进行提示。
_username = "Fisher"
_password = "goodluck"
username = input("username:")
password = input("password:")
if _username == username and _password == password:
print("Welcome user {name} login...".format(name = username))
else:
print("Invalid username or password !")
然后,我们来完成密码输入的密文显示动作,这里用到了getpass库:
(1)这里需要import getpass库,然后通过getpass.getpass()来实现密文显示密码的动作;
(2)这个库还有另外一个函数getpass.getuser(),是用来读取系统用户名的,无输入参数;
(3)这个库必须在CMD模式下才能完整运行,否则会有无法密文或无法运行的问题;
import getpass
#系统自带用户名
_username = "Fisher"
_password = "goodluck"
username = input("username:")
password = getpass.getpass()
print(username,password)
if _username == username and _password == password:
print("Welcome user {name} login...".format(name = username))
else:
print("Invalid username or password !")
最后,我们要实现对输入错误三次的用户进行锁定操作,需要用到文件操作。
设计思路:
(1)有一个默认的用户名、密码列表文件,用于结果校验;
(2)输入错误三次的行为识别;
(3)对输入三次的用户进行锁定,每次输入用户名后先检查当前账户是否被锁定,锁定用户名被记录到文件中,无论程序是否退出均有效;
关键点:
(1)在文件中怎样分别读取不同用户的用户名和密码
(2)set、dict的查找、比较方法
import getpass
#从文件中读取所有用户名、密码到字典中
f_user_list_path = open(r"D:\python\homework\userlist.txt",'r')
f_user_blacklist_path = open(r"D:\python\homework\blacklist.txt",'r')
while True:
Registed_user = f_user_list_path.readline()
#读取用户名和密码到字典里
#去除用户名和密码里的非法的字符,比如:空格、换行,使用strip()
Registed_user = Registed_user.strip(" ")
Registed_user = Registed_user.strip("\n")
Registed_password = f_user_list_path.readline()
Registed_password = Registed_password.strip(" ")
Registed_password = Registed_password.strip("\n")
d_alluser = dict.fromkeys(Registed_user,Registed_password)
print(d_alluser)
if Registed_password == ''or Registed_user == '':
break
#关闭文件
f_user_list_path.close()
#读取黑名单列表到set中
s_blacklist = set()
while True:
blacklist_user = f_user_blacklist_path.readline()
#读取用户名和密码到字典里
#去除用户名和密码里的非法的字符,比如:空格、换行,使用strip()
blacklist_user = blacklist_user.strip(" ")
blacklist_user = blacklist_user.strip("\n")
blacklist_user = blacklist_user.strip("")
if blacklist_user != '':
s_blacklist.add(blacklist_user)
else:
print(blacklist_user,s_blacklist)
break
#关闭文件
f_user_blacklist_path.close()
#用户名密码登录
count = 0
while count < 10:
#用户名密码登录
username = input("Please input your username:")
#检查用户是否被锁定,如果没有锁定则可以输入密码,否则进行锁定提示
#Set查询方法待确定
# print("This is your name:",username,"Blacklist is:", s_blacklist)
# if s_blacklist.isdisjoint(username) != True:
# print("您输入的错误次数太多,已禁止访问",username,s_blacklist)
# continue
password = getpass.getpass()
#用户名密码合法性检查
#Dict查询方法待确定
print(d_alluser,d_alluser.get(username))
if d_alluser.get(username) == password:
print("Welcome user {name} login...")
else:
print("Invalid username or password !")
count = count + 1