You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 03:35:42