新手,虽然比较简单的东西,但是弄了我很久。
很多不完善的地方,比如锁定用户,同一用户输入错三次密码就会锁定,但是如果在第二第三次换了用户再输入原来的用户,则计数会重新计算。
另外不存在的用户输入密码错误次数过多也会被锁定,然后还能创建一个被锁定的用户,这个就不搞了,只要检测一下是否存在用户名就可以了。
暂时想到了解决办法是在一个专用的文件里面增加一个专用的计数变量,舍弃blocklist这个文件,但是不懂怎么操作,先留着。
虽然python没有像C一样的main函数作为程序入口,姑且弄了一个,方便看懂
"""登陆系统
要求:
1、可以选择创建新的用户
2、可以登陆原有的用户
3、输入密码错误三次后用户则被锁定"""
flag=True #循环控制符
def createuser():
f=open("userlist.txt","r")#打开已存在用户的文件,假设文件已经存在
flag=True
name=f.readlines()
f.close()
while flag:
username=input("username:")
flag2=False#用户名已存在的标记符
for line in name:
if(username==line.split("*")[0]):
flag2=True
print("用户名已存在,请重新输入")
if flag2!=True:
f=open("userlist.txt","a")#创建新的用户
f.write(" "+username)
f.write("*")
password=input("password:")
f.write(password)
f.close()
break
main()
def login():#登入函数,输入密码错误三次则锁定用户
count=0#密码错误计数,3次则锁定
f=open("userlist.txt","r")
info=f.readlines()
f.close()
user=None#重复用户标记符
while flag:
flag2=False
f2=open("blocklist.txt", "r")
block_name=f2.readlines()
f2.close()
username=input("username:")
if user==None:#user没有使用过,则直接赋予输入的用户名
user=username
elif user!=username:#如果下一次输入的用户名不一样,则记录上一次的用户名,同时计数清零
user=username
count=0;
for line in block_name:#检查用户名是否被锁定,锁定则返回主菜单
if username==line.strip(" "):
print("该用户已经被锁定,请联系管理员")
main()
password=input("password:")
for line in info:
if(username==line.split("*")[0]and password==line.split("*")[1].strip(" ")):
print("登入成功!")
flag2=True
if flag2==False:
count+=1
print("用户名或密码错误,请重新输入")
if count==3:#错误三次,把用户名添加到锁定列表中
print("密码错误次数过多,该用户已被锁定")
f3=open("blocklist.txt","a")
f3.write(" "+username)
f3.close()
count=0#加入黑名单后重置计数
main()#加入黑名单后退回主菜单
info="""
------请输入相关数字-----
1.创建新的用户
2.登陆已有用户
3.退出程序
"""
def main():
print(info)
while flag:
i=input()
if i=="1":
createuser()
break
elif i=="2":
login()
break
elif i=="3":
exit()
else:
print("请输入正确的数字.")
main()#程序入口
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。