我有以下代码,这是我需要帮助的登录功能。我有两个列表 - 用户名和密码。登录功能要求用户输入用户名和密码。如果输入的用户名在用户名列表中并且对应于密码列表中的相同索引号,则返回“已授予访问权限”,否则返回“拒绝”。
出于教学目的,我会对两件事感兴趣: a) 使用指定的两个列表简单修复问题。 b) 关于解决这个问题的最佳方法的建议。 (例如字典、2darrays 或其他任何东西)。
问题是需要同时遍历两个列表并查找相同的对应索引号。
示例:
用户名 1 和密码 1 = 已授予访问权限 但是 username1 和 pass2 =访问被拒绝
代码:
usernames=["user1","user2","user3"]
passwords=["pass1","pass2","pass3"]
def main():
mainmenu()
def mainmenu():
print("****MAIN MENU****")
print("=======Press L to login :")
print("=======Press R to register :")
choice1=input()
if choice1=="L" or choice1=="l":
login()
elif choice1=="R" or choice1=="r":
register()
else:
print("please make a valid selection")
def login():
print("*****LOGIN SCREEN******")
username=input("Username: ")
password=input("Password: ")
if username in usernames and password in passwords:
print("yes")
else:
print("denied")
def register():
print("*****REGISTRATION****")
username=input("Enter a username:")
password=input("Enter a password:")
usernames.append(username)
passwords.append(password)
answer=input("Do you want to make another registration?")
if answer=="y":
register()
else:
registration_details()
def registration_details():
print(usernames)
print(passwords)
main()
注意:我知道将列表存储在二维数组中是一个显而易见的解决方案/建议,但出于教学原因,此修复是必要的 - 即学生根本还没有学习数组。首先查看简单的解决方案,但 stackoverflow 用户也会从解决此问题的替代/更有效方法的建议中受益。
更新:
正如有人在下面评论的那样......我想我会澄清一下。我知道需要的是获取列表中所述值的索引号。我的问题是 - 什么是最好的解决方案,或者一些解决方案。枚举。压缩。简单地使用 for 循环?很难知道如何在 python 中开始,因为不仅有一种方法……任何关于哪种方法最惯用(pythonic)的评论也会很有用。
请您参考如下方法::
这可能是请您参考如下方法:,由达米安·拉特内罗 (Damian Lattenero) 在下方呈现 缩进,一个常见的错误,下面是关闭的。是否也可以快速评论一下原因?如何解决?
def login():
print("*****LOGIN SCREEN******")
username=input("Username: ")
password=input("Password: ")
for ind, user in enumerate(usernames):
if username == user and passwords[ind] == password:
print("correct login")
else:
print("invalid username or password")
输出
*****LOGIN SCREEN******
Username: user3
Password: pass3
invalid username or password
invalid username or password
correct login
>>>
请您参考如下方法:
如果你想教授 python 基础......
zip(usernames, passwords)
导致
dict(zip(usernames, passwords))
但你也可以...
for (idx, username) in enumerate(usernames):
valid_password = passwords[idx]
