You need to enable JavaScript to run this app. 如何改进Python认证代码:添加循环实现错误输入自动重新校验
优惠活动
大模型
产品
解决方案
定价
更多

如何改进Python认证代码:添加循环实现错误输入自动重新校验

现有代码存在的核心问题
  • 逻辑判断存在运算符优先级漏洞:原代码中的if UsernameCheck and UsernameCheck2 in Usernames实际执行逻辑为(bool(UsernameCheck)) and (UsernameCheck2 in Usernames),由于用户输入的用户名默认为非空字符串,这部分判断永远为真,完全没有对Player1输入的用户名做存在性校验,密码判断环节存在完全相同的问题。
  • 凭据无绑定关系:用两个平行列表分别存储用户名、密码,无法实现账号与密码的一一对应,只要输入任意已注册的用户名、任意已设置的密码,就能通过校验,完全不满足身份认证的基本要求。
  • 冗余代码:str(input())为无效操作,input()方法本身返回值就是字符串类型,不需要额外强制转换;变量采用大驼峰命名,不符合Python语言的通用编码惯例。
优化改进方向
  • 替换数据存储结构:用字典替代平行列表存储凭据,通过键值对实现用户名与密码的一一绑定,从结构上消除凭据错配的可能。
  • 修正校验逻辑:明确规则为「输入的用户名存在于字典键中,且输入密码与该用户名绑定的密码完全匹配」,规避运算符优先级带来的逻辑错误。
  • 模块化拆分校验逻辑:将单用户的校验流程封装为独立函数,减少重复代码,方便后续调整校验规则。
  • 去掉无意义的类型转换代码,精简执行流程。
循环实现错误自动重试的完整代码实现

按照要求优先通过循环实现重试逻辑,当任意用户输入错误时,自动重置整个校验流程,引导用户重新输入:

# 预存合法用户凭据,结构为{注册用户名: 对应登录密码}
user_credentials = {
    "Bob": "Password1",
    "Dave": "Password2"
}

def verify_player(player_num: int) -> bool:
    """完成单个玩家的凭据校验,校验通过返回True,失败返回False"""
    curr_username = input(f"Player {player_num} - Enter your username: ")
    curr_password = input(f"Player {player_num} - Enter your password: ")
    # 同时校验用户名存在、密码匹配对应值
    if curr_username in user_credentials and user_credentials[curr_username] == curr_password:
        return True
    return False

# 无限循环执行校验,直到全部通过才退出
while True:
    player1_pass = verify_player(1)
    player2_pass = verify_player(2)
    if player1_pass and player2_pass:
        print("Your credentials are valid")
        break
    print("Your credentials are invalid, try again\n")

代码逻辑说明:只要任意一个玩家的用户名或密码输入错误,就会提示错误信息并重新进入输入流程,不需要手动重启程序,完全覆盖错误重试的需求。

内容的提问来源于stack exchange,提问作者Nobody

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 03:36:07