簡體   English   中英

我在這個 python 登錄 function 中缺少什么?

[英]What am I missing in this python login function?

我正在嘗試使用 python 編寫登錄 function。 但是,我似乎無法編寫代碼來檢查用戶名和密碼與存儲在文件中的用戶名和密碼。 具體錯誤是 NameError: name 'adusername' is not defined。 我該如何解決?

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 function 中使用global adusername使其成為全局變量,或者在全局 scope 中的函數之外聲明它。

看到這個 - https://www.w3schools.com/python/python_scope.asp

您尚未在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()

這條線是你的問題:

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

“adun”和“adpw”是您的輸入,您正在覆蓋它們。 換成這個就OK了:

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

注意:需要刪除“\n”才能進行比較。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM