Python 使用双字典登录
我正在尝试通过两个不同的字典登录。字典很好用,只是有一些问题需要同时阅读它们并将它们作为管理员用户或成员分开Python 使用双字典登录,python,Python,我正在尝试通过两个不同的字典登录。字典很好用,只是有一些问题需要同时阅读它们并将它们作为管理员用户或成员分开 我正在尝试附加0作为成员,1作为管理员 如果memberDict和adminDict的内容不重复,那么您确实需要检查这两个dict中的所有用户是否存在,只需使用找到的变量,这样就可以将时间复杂度从O(成员)*O(管理员)降低到O(成员)+O(管理员) 第二个“admin”循环出现在成员dict循环中 也就是说,你应该: def login(): while True:
我正在尝试附加0作为成员,1作为管理员 如果memberDict和adminDict的内容不重复,那么您确实需要检查这两个dict中的所有用户是否存在,只需使用找到的变量,这样就可以将时间复杂度从O(成员)*O(管理员)降低到O(成员)+O(管理员) 第二个“admin”循环出现在成员dict循环中 也就是说,你应该:
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.")
但事实上,你可能不应该重复这些格言。您可以判断键i
是在dict memberDict还是adminDict by中
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.")
对adminDict也是如此
为清晰起见,请编辑:
我想说的是,如果dict中存在
键
和值
对,那么您正试图找到它。您不需要在dict上迭代(即,使用for
循环)。您可以找出dict中是否有键
(在您的情况下,MemberDict
中的用户名使用if i in MemberDict
->如果关键字i
在dict中,则返回True,否则返回false。我不太清楚原因,但它一直提示我。您是这里的会员吗?会员有权享受10%的折扣。如果按L,按R注册,按G登录作为来宾或X退出程序。尽管通过字典检查成功。没关系,我想我明白了。你救了我的灵魂,我在这个问题上被困了至少6个小时嘿!谢谢你帮助我,我不明白你的意思“您可能不应该迭代dict。您可以通过“这里有点新手!”@EhFabian您是对的,我不清楚。我想说的是,您正在尝试查找键
和值
对(如果它存在于您的dict中)。您不需要迭代dict(也就是说,使用for循环)。您可以通过使用if i in MemberDict
->来确定键是否在dict中(在您的情况下,MemberDict
中的用户名,如果键i
在dict中,则返回True,否则返回false)。
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.")
if i in memberDict:
if memberDict[i] == password:
# Display login message