Python密码检查器:如何高效遍历验证方法并按需重启循环
密码检查器验证逻辑优化方案
你的代码目前的问题是:所有验证函数只负责打印提示,没有返回验证是否通过的结果,所以没法判断是否所有条件都满足,也就无法控制循环在验证失败时重启。
可以按以下步骤修改,实现「任意验证失败就重启循环,全部通过则结束」的逻辑:
1. 修改验证函数,让它们返回布尔值
让每个函数在符合要求时返回True,不符合时返回False,同时保留原有的提示输出:
def check_length(password): if len(password) > 8: print("Password is long enough. ") return True else: print("Password too short, please try a new password. ") return False def check_numbers(password): if len([num for num in password if num.isdigit()]) >= 2: print("Password has two digits. ") return True else: print("Password needs two digits, please try a new password. ") return False def check_lower(password): if any(map(str.islower, password)): print("Password has lower case. ") return True else: print("Password needs a lowercase letter, please try a new password.") return False def check_upper(password): if any(map(str.isupper, password)): print("Password has upper case. ") return True else: print("Password needs an uppercase letter, please try a new password.") return False
注:给函数改了更清晰的名字,同时把password作为参数传入,避免依赖全局变量,代码更规范。
2. 遍历验证函数,控制循环逻辑
把所有验证函数放到一个列表里,在循环中逐个调用,只要有一个验证失败(返回False),就继续下一轮循环;全部通过则退出循环:
while True: password = input("What is your password? \n") # 定义所有验证规则的列表 validations = [ check_length, check_numbers, check_lower, check_upper ] # 遍历所有验证,检查是否全部通过 all_passed = True for validation in validations: if not validation(password): all_passed = False # 提前终止后续不必要的验证 break if all_passed: print("All checks passed! Your password is valid.") break
这样只要有任何一个验证失败,all_passed会被设为False,循环会重启;只有当所有验证都返回True时,才会打印成功提示并退出循环。
额外优化:提前终止验证
如果希望在第一个验证失败时就停止后续检查(比如密码太短就不用再检查数字、大小写了),可以在发现验证失败时直接break循环,像上面代码里那样,这样能减少不必要的验证操作。
内容的提问来源于stack exchange,提问作者Tate
相关产品推荐
相关产品推荐

