如何校验两个输入变量在不同列表的相同索引位置并返回有效状态
问题原因
你当前的校验逻辑只分别验证了用户名、密码是否存在于对应列表中,没有绑定二者的索引对应关系,因此会出现错位组合也能通过校验的问题。
实现方案
这里给你两种可行的实现方式:
方案1:按索引匹配(对应你现有列表存储的逻辑)
先找到输入用户名在用户列表中的索引位置,再校验密码列表对应索引的值是否和输入密码一致即可,修改后的check_login函数如下:
def check_login(user, pasw): # 先判断用户名是否存在,避免index方法抛出异常 if user not in logins.users: print('Invalid user and password, try again.') return # 获取用户名对应的索引 user_index = logins.users.index(user) # 校验对应索引的密码是否匹配 if logins.passes[user_index] == pasw: print('Valid') else: print('Invalid user and password, try again.')
方案2:用字典存储映射关系(更推荐,性能和可读性更好)
你可以提前把用户名和密码的列表打包成键值对字典,后续校验直接查字典即可,逻辑更简洁:
# 可以在导入logins后先初始化映射字典 user_pass_map = dict(zip(logins.users, logins.passes)) def check_login(user, pasw): if user_pass_map.get(user) == pasw: print('Valid') else: print('Invalid user and password, try again.')
额外优化建议
你已经导入了getpass模块,可以把密码输入的代码从password = input('Password: ')改成password = getpass('Password: '),终端输入密码时就不会明文显示,安全性更高。
内容的提问来源于stack exchange,提问作者starbars
相关产品推荐
相关产品推荐

