登录模块优化方案

来源:互联网 发布:java三大框架的作用 编辑:程序博客网 时间:2024/05/21 23:32

问题

1.采用\n分割账户和密码后在读取时strip("\n")多次调用是否浪费

2.用readline调用读取txt文件从头读到尾,同时每次都会运用if判断即使判断到对的也会继续判断下去直到读取完所有的。

fp=open("f:\\alluser.txt")ban=open("f:\\banuser.txt","r+")#获取被ban的用户flag=0;#判断登录状态0登录失败 2账户锁定 3登录成功username = input("username:")password = input("password:")while 1:    ban_user = ban.readline()    ban_user = ban_user.strip("\n")    if ban_user == username :        flag = 2        break    if ban_user == "":        breakif flag != 2 :    while 1:#读取用户民和密码        temp_username = fp.readline()        temp_username = temp_username.strip("\n")        temp_password = fp.readline()        temp_password = temp_password.strip("\n")        if temp_username == username and temp_password == password:                flag = 3                break        elif temp_username == username and temp_password != password:            for i in range(0,2):                print("对不起密码错误,您还有" + str(2 - i) + "次可以尝试")                password = input("password:")                if(temp_password == password):                    flag == 3                elif flag != 3 and i == 1:                    print("this is ban")                    flag = 2                    ban.write(username+"\n")                    ban.close()            break        else:            flag = 0if flag == 0:    return  "none"elif flag == 2:    return  "lock"elif flag == 3:    return  username

解决方案:

1.在读取时候采用split将字符串转化为数组。

2.那么在数组奇数位的为账户名,偶数位为密码

3.利用for i in 数组的方法循环遍历,隔一个遍历取一位直到找到与用户输入相同的用户名,那么下一位就是密码,这样就取到了用户名和密码,同时跳出循环

4.对用户名密码进行判断。(方便进行限制同时调理更清晰)

5.这样真的效率更高吗?有待验证。。。。。。。。。

fp=open("f:\\alluser.txt")ban=open("f:\\banuser.txt","r+")#获取被ban的用户flag=0;#判断登录状态0登录失败 2账户锁定 3登录成功ban_str = ban.read()ban_list = ban_str.split(",")fp_str = fp.read()fp_list = fp_str.split(",")username = input("username:")password = input("password:")temp_username = ""temp_password = ""for i in  range(0,len(ban_list)):#查询账户是否被ban    if(username == ban_list[i]):        flag = 2        breakfor i in range(0,len(fp_list[i])-2,2):#查询用户名和密码    if(username == fp_list[i]):        temp_username = username        temp_password = fp_list[i+1]if temp_username !="" and flag !=2:    for i in range(3):#从0开始循环两次        if  password == temp_password:            flag = 3            break        elif i == 2:#这里的作用是当i==2时截断循环因为已经没有输入机会了上面的判断是判断上一次的结果            break        else:            print("对不起密码错误,您还有"+str(2-i)+"次可以尝试")            password = input("password:")    if i==2 and flag != 3:#在48行已经判断过temp_username!=""所以这里不可能是用户名为空        flag = 2        ban.write(username+",")if flag == 0:    return  "none"elif flag == 2:    return  "lock"elif flag == 3:    return  username

原创粉丝点击