Python while循环特殊字符检查异常:密码生成器循环无法终止
密码生成器循环无法终止的解决办法
你的代码逻辑本身是正确的,但因为完全依赖随机选字符,极端低概率下会反复生成不满足所有条件的密码,导致你误以为循环卡着不动。
更可靠的做法是直接确保每个要求的字符类别都至少有一个字符,再填充剩余的随机字符,彻底避免无限循环的可能,修改后的代码如下:
import string import secrets # 拆分各个字符类别 lowercase = string.ascii_lowercase uppercase = string.ascii_uppercase digits = string.digits spec = string.punctuation # 先从每个必填类别选一个字符,保证满足所有条件 password_chars = [ secrets.choice(lowercase), secrets.choice(uppercase), secrets.choice(digits), secrets.choice(spec) ] # 填充剩余的8个字符(总长度12位) remaining = 12 - len(password_chars) all_chars = lowercase + uppercase + digits + spec password_chars += [secrets.choice(all_chars) for _ in range(remaining)] # 打乱字符顺序,避免固定的类别开头 secrets.SystemRandom().shuffle(password_chars) password = ''.join(password_chars)
如果一定要保留原来的循环写法,可以先检查你的Python环境中string.punctuation的内容是否正常,执行print(spec)看看输出的特殊字符集合是否符合预期,排除字符集异常的问题。
内容的提问来源于stack exchange,提问作者codeblock
相关产品推荐
相关产品推荐

