Python新手求助:用户登录系统的用户名与密码输入验证代码优化
登录系统用户名与密码验证代码优化建议
需求说明
我是Python新手,正在开发一个用户登录系统,需要实现带输入验证的用户名与密码功能,验证规则如下:
用户名验证规则
- 不能包含空格
- 长度至少为5个字符
- 不能包含特殊字符
- 未满足条件时需显示对应错误提示(至少4种)
密码验证规则
- 至少包含一个大写字母
- 至少包含一个小写字母
- 至少包含一个特殊字符
- 长度至少为6个字符
原代码
while True: sNewUser1 = input("""Please enter a new username. The username must NOT contain any spaces, it must have at least 5 characters and it cannot include any special characters: """) if len(sNewUser1) < 5: print("Your username is too short, please enter 5 or more characters! Please try again!\n") elif sNewUser1.count(" ") > 0: print("Your username contains one or more spaces, this is not allowed! Please try again! \n") elif sNewUser1.isalnum() == False: print("Your username contains a special character please try again! \n") else: greetuser() break while True: sNewPass1 = input(""" Please enter a new password. It must contain: At least one Capital letter At least one lower case letter At least one special character It has to be at least 6 characters in length: """) if len(sNewPass1) < 6: print("Your username is too short, please enter 5 or more characters! Please try again!\n")
优化建议
1. 拆分验证逻辑为独立函数
把用户名和密码的验证逻辑拆成单独函数,提高代码复用性和可读性,同时能一次性收集所有错误:
def validate_username(username): errors = [] # 新增空输入验证 if not username: errors.append("用户名不能为空") if len(username) < 5: errors.append("用户名长度不能少于5个字符") if " " in username: errors.append("用户名不能包含空格") if not username.isalnum(): errors.append("用户名不能包含特殊字符") return errors def validate_password(password): errors = [] if not password: errors.append("密码不能为空") if len(password) < 6: errors.append("密码长度不能少于6个字符") if not any(c.isupper() for c in password): errors.append("密码必须包含至少一个大写字母") if not any(c.islower() for c in password): errors.append("密码必须包含至少一个小写字母") # 明确特殊字符范围,避免歧义 special_chars = "!@#$%^&*()_+-=[]{}|;:,.<>?" if not any(c in special_chars for c in password): errors.append("密码必须包含至少一个特殊字符(如!@#$等)") return errors
2. 抽象通用输入循环
把重复的输入循环逻辑封装成通用函数,减少代码冗余:
def get_valid_input(prompt, validator): while True: user_input = input(prompt).strip() errors = validator(user_input) if not errors: return user_input # 一次性列出所有错误 print("输入不符合要求,问题如下:") for err in errors: print(f"- {err}") print() # 定义中文提示语,更友好 username_prompt = """请输入新用户名: 要求: - 不能包含空格 - 长度至少5个字符 - 不能包含特殊字符 """ password_prompt = """请输入新密码: 要求: - 至少包含一个大写字母 - 至少包含一个小写字母 - 至少包含一个特殊字符(如!@#$等) - 长度至少6个字符 """ # 获取合法输入 valid_username = get_valid_input(username_prompt, validate_username) valid_password = get_valid_input(password_prompt, validate_password) # 执行后续逻辑 greetuser()
3. 修复原代码中的问题
- 原密码验证仅判断了长度,补充完整所有规则的验证
- 修正密码错误提示中的笔误:把"用户名"改为"密码"
- 移除原输入字符串中多余的双引号
4. 提升用户体验
- 一次性展示所有不符合的规则,避免用户多次修改才能看到全部问题
- 错误提示简洁清晰,避免重复冗余的表述
- 增加空输入的验证,覆盖更多边界场景
内容的提问来源于stack exchange,提问作者gabbergoblin23
相关产品推荐
相关产品推荐

