【发布时间】:2017-06-29 20:09:39
【问题描述】:
我有以下代码,这是我需要帮助的登录功能。我有两个列表 - 用户名和密码。登录功能要求用户输入用户名和密码。如果输入的用户名在用户名列表中并且对应于密码列表中的相同索引号,则返回“访问授权”,否则返回“拒绝”。
出于教学目的,我对两件事感兴趣: a) 使用指定的两个列表对问题进行简单修复。 b) 关于解决这个问题的最佳方法的建议。 (例如字典、2darray 或其他任何东西)。
问题是需要同时遍历两个列表并查找相同的相应索引号。
示例:
username1 和 pass1 = 访问权限 但是 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)的 cmets 也将是有用的。
最佳答案:
这可能是最好的答案,由 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
>>>
【问题讨论】:
-
你可以做一个字典,其中键,值是用户名,密码,否则
if username in usernames and password in passwords:内部你需要获取密码和用户名的索引并比较它们 -
谢谢 - 是的,字典和我在上面的编辑中提到的 2d ararys 是显而易见的建议,但目前学生只涵盖了列表,因此需要首先使用解决方案.替代解决方案也欢迎补充答案....谢谢您的建议,但我需要一个解决方案(书面),以获取密码和用户名索引的最佳编码方式。这就是我所追求的......
-
你好小姐,我不确定我是否理解你...什么样的缩进问题?
-
啊-如果您查看我的编辑(最后),那里的代码就是您的解决方案,但缩进问题仍然存在。它在“正确登录”语句之前产生多个“无效条目” - 我假设是因为缩进。你能解释为什么它是错误的。如果你用 user3 和 pass3 试试,你会注意到错误
标签: python list loops simultaneous