使用for循环访问列表值时Python代码输出不符合预期的问题排查
问题分析与修复
你的代码核心问题出在for循环的迭代方式上,没有正确将names和passwords列表中的元素一一配对。
为什么会输出Invalid Invalid?
你写的循环是:
for name, password in names, passwords:
这里的names, passwords会创建一个包含两个列表的元组:(['abc', 'root'], [123, 456])。循环会依次迭代这个元组里的每个列表:
- 第一次迭代:取第一个列表
['abc', 'root'],将其解包为name='abc'和password='root'。此时password='root'和输入的123不匹配,输出Invalid。 - 第二次迭代:取第二个列表
[123, 456],解包为name=123和password=456。此时name=123和输入的'abc'不匹配,输出Invalid。
这完全不是你想要的“逐个匹配用户名和密码对”的逻辑。
如何修复?
要把两个列表中对应位置的元素配对,你需要用Python内置的zip()函数,它会把多个可迭代对象的对应元素打包成元组,供循环迭代:
name_input = 'abc' password_input = 123 names = ['abc', 'root'] passwords = [123, 456] # 使用zip()配对两个列表的元素 for name, password in zip(names, passwords): if name == name_input and password == password_input: print('Valid') else: print('Invalid')
运行这段修正后的代码,就会输出预期的Valid Invalid了。
另外,小建议:实际场景中存储用户名和密码,用字典会更直观,比如user_credentials = {'abc':123, 'root':456},这样验证起来更简洁:
if user_credentials.get(name_input) == password_input: print('Valid') else: print('Invalid')
内容的提问来源于stack exchange,提问作者M. Saad A. Dar
相关产品推荐
相关产品推荐

