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

Python用户名/密码验证代码未生效问题排查求助

用户名密码验证程序问题分析

我正在编写一个用户名密码验证程序,需求是接收并保存用户输入的用户名和密码,后续可根据输入内容判断是否允许登录。但当前代码未按预期执行,我尝试过重写部分代码、使用编程平台的AI工具、拆分if语句(breaker变量用于拆分,我原以为连续if语句影响pass命令)。我接触Python仅一周,希望有人能帮忙分析问题,谢谢!

原代码

username = input("Please enter your username: ")

username0 = username
username1 = username.find(" ")
username2 = username.isdigit
username3 = len(username)

password = input("Please enter your password: ")

password1 = len(password)
password2 = password.find("!, @, #, $, %, ^, &, *, (, ), -, _, +, =, `, ~, {, [, }")
password3 = password.find("], |, :, ;, ', ,, ., ?, /")

if username1 == -1:
  pass
elif username1 >= 0:
  print("Your username can not contain spaces.")

breaker1 = 1

if username2:
  pass
elif not username2:
  print("Your username can not contain numbers.")

breaker2 = 2

if username3 > 12:
  print("Your username can not be more than 12 characters.")
elif username3 <= 12:
  pass

breaker3 = 3

if password1 > 12:
  print("Your password can not be more than 12 characters.")
elif password1 <= 12:
  pass
if password2 == -1:
  pass
elif password2 >= 0:
  print("Your password can not contain symbols.")
elif password3 == -1:
  pass
elif password3 >= 0:
  print("Your password can not contain symbols.")

password4 = password.replace("a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q", "*")
password5 = password.replace("r, s, t, u, v, w, x, y, z","*")

print("Your username is " + username + " and your password is " + password + ".")

print(username2)

问题分析及修正建议

1. 用户名数字检查逻辑错误

  • username2 = username.isdigit 没有调用字符串方法,正确写法是username.isdigit(),但这个方法是判断整个字符串是否全为数字,不是检查是否包含数字。要验证用户名不能包含任何数字,应该用:
    has_digit = any(char.isdigit() for char in username)
    if has_digit:
        print("Your username can not contain numbers.")
    

2. 密码符号检查逻辑错误

  • password.find("!, @, #, ...") 是查找整个字符串是否存在,不是检查密码是否包含其中任意一个符号。正确做法是定义符号集合,遍历密码字符检查:
    forbidden_symbols = {'!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '-', '_', '+', '=', '`', '~', '{', '[', '}', ']', '|', ':', ';', "'", ',', '.', '?', '/'}
    has_forbidden_symbol = any(char in forbidden_symbols for char in password)
    if has_forbidden_symbol:
        print("Your password can not contain symbols.")
    

3. 密码替换逻辑错误

  • password.replace("a, b, c,...", "*") 会尝试替换整个字符串"a, b, c,...",不是逐个替换字母。要把小写字母替换为*,可以用循环或正则:
    # 循环替换
    masked_password = password
    for char in 'abcdefghijklmnopqrstuvwxyz':
        masked_password = masked_password.replace(char, '*')
    
    # 正则表达式(需导入re模块)
    import re
    masked_password = re.sub(r'[a-z]', '*', password)
    

4. 冗余的breaker变量

  • 定义的breaker1、breaker2等变量没有参与逻辑判断,对程序运行无影响,可直接删除。

5. 密码检查的if语句结构错误

  • 原代码中密码符号检查的if-elif结构逻辑混乱,password3的判断被嵌套在password2的elif分支里,导致password2不为-1时,永远不会检查password3。应合并为独立的条件判断(如上述符号检查代码)。

修正后的示例代码

username = input("Please enter your username: ")
password = input("Please enter your password: ")

valid = True

# 用户名验证
if " " in username:
    print("Your username can not contain spaces.")
    valid = False
if any(char.isdigit() for char in username):
    print("Your username can not contain numbers.")
    valid = False
if len(username) > 12:
    print("Your username can not be more than 12 characters.")
    valid = False

# 密码验证
if len(password) > 12:
    print("Your password can not be more than 12 characters.")
    valid = False
forbidden_symbols = {'!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '-', '_', '+', '=', '`', '~', '{', '[', '}', ']', '|', ':', ';', "'", ',', '.', '?', '/'}
if any(char in forbidden_symbols for char in password):
    print("Your password can not contain symbols.")
    valid = False

# 密码掩码处理
import re
masked_password = re.sub(r'[a-z]', '*', password)

# 输出结果
if valid:
    print(f"Your username is {username} and your masked password is {masked_password}.")
else:
    print("Validation failed, please check your input.")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 11:47:35