如何在函数中正确遍历列表 避免登录校验结果重复输出
问题根源
- 错误提示逻辑写在了
users列表的遍历循环内部,每匹配失败一个用户就会触发一次错误输出,输入错误的账号密码时,有多少个用户就会输出多少条错误提示 - 全局变量
loged_in在函数内部修改时未声明global,且原代码错误使用比较运算符==做赋值操作,即使登录成功也无法修改全局登录状态,会一直触发循环 - 存在冗余的类型转换逻辑,密码输入时已转为字符串,后续判断时无需重复转换
调整后完整代码
users = [{"username":"tom", "password":1234},{"username":"pete", "password":1234},{"username":"lisa", "password":1234}] loged_in = False def login(): global loged_in while not loged_in: username_check = input("Please enter your username: ") password_check = str(input("Please enter your password: ")) # 标记本次输入是否匹配到有效用户 is_match = False for user in users: if username_check == user["username"] and password_check == str(user["password"]): is_match = True break # 遍历完全部用户后统一输出结果,仅触发一次 if is_match: print("Welcome, you're logged in.") loged_in = True else: print("Wrong username or password, please try again.")
核心调整点
- 新增
is_match标记位,遍历用户列表时仅记录匹配结果,不直接输出提示 - 将成功/失败提示逻辑移到遍历循环外部,无论有多少个用户,单次输入只会输出一次结果
- 修正全局变量修改逻辑:新增
global声明,使用赋值运算符=修改登录状态,避免死循环 - 删除冗余的重复类型转换逻辑,移除无用的函数入参
log
内容的提问来源于stack exchange,提问作者Domi
相关产品推荐
相关产品推荐

