这个python登录函数缺少什么?

2024-06-02 02:20:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用python编写一个登录函数。但是,我似乎无法编写代码来对照文件中存储的用户名和密码检查用户名和密码。特定错误为NameError:未定义名称“adusername”。我该如何解决这个问题

def adminlogindetails():
    adusername = input("Admin Username: ")
    adpassword = input("Admin Password: ")
    adfile = open("adlogindetails.txt", "a")
    adfile.write(adusername)
    adfile.write(",")
    adfile.write(adpassword)
    adfile.write("\n")
    adfile.close()

def adminverification():
    adun = input("Enter your username:")
    adpw = input("Enter your password:")
    adinfo = open("adlogindetails.txt", "r")
    for line in adinfo:
        adun, adpw = line.split(",")
        if adun == adusername and adpw == adpassword:
            print("Login successful!")
            adminoptions()
        else:
            print("Incorrect username/password")
            roleselection()

adminverification()

Tags: txt密码inputadmindefopen用户名write
3条回答

您尚未在adminverification()中声明adusernameadpassword。因此,它导致了错误。如果要使用来自adminlogindetails()的变量,请更改变量名称,因为您已将详细信息存储在adlogindetails.txt

应更改以下代码,因为line变量包含已存储的用户名和密码:

adun, adpw = line.split(",")

将上述代码更改为如下所示:

adusername, adpassword = line.split(",")

您可以使用以下选项:

def adminlogindetails():
    adusername = input("Admin Username: ")
    adpassword = input("Admin Password: ")
    adfile = open("adlogindetails.txt", "a")
    adfile.writelines(adusername + ',' + adpassword )
    adfile.close()

def adminverification():
    adun = input("Enter your username:").strip()
    adpw = input("Enter your password:").strip()
    with open("adlogindetails.txt", "r") as f:
        lines = f.readlines()
        i = 0
        for line in lines:
            adusername, adpassword= line.split(",")
            adusername = str(adusername).strip()
            adpassword = str(adpassword).strip()
            if (adun == adusername) and (adpw == adpassword):
                print("Login successful!()")
                adminoptions()
                break
            else:
                i += 1
                if i >= len(lines): #If no any match upto last line, this will be true
                    print("Incorrect username/password")
                    roleselection()
                    break
    
adminverification()

首先,您没有调用adminlogindetails()

另外adusername是一个局部变量,您应该在adminlogindetails函数中使用global adusername使其成为全局变量,或者在全局范围内的函数之外声明它

见此-https://www.w3schools.com/python/python_scope.asp

这是你的问题:

adun, adpw = line.split(",")

“adun”和“adpw”是您的输入,您正在覆盖它们。替换为此项,则一切正常:

adusername, adpassword = line.replace("\n", "").split(",")

注意:“\n”需要删除才能进行比较

相关问题 更多 >