使用两个字典登录

2024-06-16 13:00:39 发布

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

def login():

while True: 
    username = input("Please enter your username or x to quit: ")
    if username.casefold() == "x":
        break
    else:
        password = input("\nPlease enter your password: ")

    if username =="" or password =="":
        print("You cannot leave this blank,Please try again.")


    else:
        if len(username)>0 and len(password)>0: 
            for i in memberDict:
                if username == i and password == memberDict[i]:
                    print(f"Login successful, Welcome Member, {memberDict[i]}")
                    statuslist.append(0)
                    break
                else:
                    for i in adminDict:
                        if username == i and password == adminDict[i]:
                            print(f"Login successful, Welcome Admin, {adminDict[i]}")
                            statuslist.append(1)
                            break
                        else:
                            print("Login failed, There is no registered customers. Please try again.")

我试图通过两个不同的字典登录。字典工作正常,只是有问题,必须阅读他们两个和分开他们作为管理用户或成员

我正在尝试附加0作为成员,1作为管理员


Tags: orandinputyourifusernameloginpassword
2条回答

第二个“admin”循环出现在成员dict循环中

也就是说,你应该:

for i in memberDict:
    if username == i and password == memberDict[i]:
        print(f"Login successful, Welcome Member, {memberDict[i]}")
        statuslist.append(0)
        login=True
for i in adminDict:
    if username == i and password == adminDict[i]:
        print(f"Login successful, Welcome Admin, {adminDict[i]}")
        statuslist.append(1)
        login=True
if not login:
    print("Login failed, There is no registered customers. Please try again.")

但事实上,你可能不应该重复这些格言。您可以通过以下方式判断键i是在dict memberDict还是adminDict中

if i in memberDict:
    if memberDict[i] == password:
       # Display login message

行政官也是如此


为清晰起见,请编辑:

我想说的是,如果dict中存在一对keyvalue的话,您正在尝试定位它。您不需要迭代dict(也就是说,使用for循环)。您可以使用if i in memberDict->;找出key是否在dict中(在您的例子中,是MemberDict中的用户名);如果键i在dict中,则返回True,否则返回false

如果memberDict和adminDict的内容不重复,那么您确实需要检查这两个dict中的所有用户,以检查用户是否存在,只需使用找到的变量,这样就可以将时间复杂度从O(member)*O(admin)降低到O(member)+O(admin)

def login():
    while True: 
        username = input("Please enter your username or x to quit: ")
        if username.casefold() == "x":
            break
        else:
            password = input("\nPlease enter your password: ")

        if username =="" or password =="":
            print("You cannot leave this blank,Please try again.")


        else:
            if len(username)>0 and len(password)>0: 
                found = False
                for i in memberDict:
                    if username == i and password == memberDict[i]:
                        print(f"Login successful, Welcome Member, {memberDict[i]}")
                        statuslist.append(0)
                        found = True
                        break
                for i in adminDict:
                    if username == i and password == adminDict[i]:
                        print(f"Login successful, Welcome Admin, {adminDict[i]}")
                        statuslist.append(1)
                        found = True
                        break
                if not found:
                    print("Login failed, There is no registered customers. Please try again.")

相关问题 更多 >