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

这个python登录函数缺少什么?,python,Python,我正在尝试使用python编写一个登录函数。但是,我似乎无法编写代码来对照文件中存储的用户名和密码检查用户名和密码。特定错误为NameError:未定义名称“adusername”。我该如何解决这个问题 def adminlogindetails(): adusername = input("Admin Username: ") adpassword = input("Admin Password: ") adfile = open

我正在尝试使用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()

首先,您没有调用
adminlogindetails()

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


请参见此-

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

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

adun, adpw = line.split(",")
将上述代码更改为如下所示:

adusername, adpassword = line.split(",")
您可以使用以下选项:

def adminlogindetails():
adusername=输入(“管理员用户名:”)
adpassword=输入(“管理员密码:”)
adfile=open(“adlogindetails.txt”、“a”)
adfile.writelines(adusername+','+adpassword)
adfile.close()
def adminverification():
adun=input(“输入用户名:”).strip()
adpw=输入(“输入密码:”).strip()
以open(“adlogindetails.txt”、“r”)作为f:
行=f.读行()
i=0
对于行中的行:
adusername,adpassword=line.split(“,”)
adusername=str(adusername).strip()
adpassword=str(adpassword).strip()
如果(adun==adusername)和(adpw==adpassword):
打印(“登录成功!”)
adminoptions()
打破
其他:
i+=1
如果i>=len(行):#如果最后一行没有匹配项,则为真
打印(“不正确的用户名/密码”)
角色选择()
打破
adminverification()

您得到的“adusername”未定义,因为您从未调用定义adusername的函数。验证功能,因此您存储信息的文件无法识别adusername,因为它不存在。它也是adminlogindetails函数的本地函数,因此adminverification无法访问它

这一行是您的问题:

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

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

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

当您调用
adminverification
时,您不会首先声明
adusername
adpassword
。此外,您也不会调用
adminlogindetails
adminverification
中的两行更改为
adusername=input(“输入您的用户名:”)adpassword=input(“输入密码”)
您似乎对变量的范围感到困惑。
def
内部定义的变量在其外部不可见。一旦您了解了这是如何工作的,修复应该是显而易见的和琐碎的;定义您试图使用的变量。我看到两个错误:adun,adpw=line.split(“,”),而且for循环将在第一次迭代时做出决定感谢所有帮助,我已相应地修复了它。但现在,当我输入正确的名称和密码时,会出现符合条件(adminoptions())和不符合条件(roleselection())的结果。如何解决此问题?在打印
登录成功之前,请尝试打印
adusername
adpassword
。在打印
不正确的用户名/密码之前,还要打印
adusername
adpassword
。你能通过更新你的主要问题来详细说明你现在面临的问题吗?当我输入正确的用户名和密码时,结果是“登录成功!”,后面是adminoptions()结果,下面是“不正确的用户名/密码”和roleselection()结果。基本上,正确和错误出现的结果我们的代码有一些逻辑问题。它只会检查文件的第一行,并决定它是否匹配。在我的文件中,我有两行代表两个用户名和密码。当我输入第一个用户名和密码时,中断解决了这个问题。但是如果我在第二行中输入,它会返回错误的结果