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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 23:35:22