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

Python密码生成器问题:password数组无值及简化多分支判断

问题解决:密码生成器的两个核心问题

一、为什么password数组为空?

你遇到的第一个问题是典型的输入类型不匹配!input()函数返回的是字符串类型,但你定义的password_strength数组里的元素是整数。比如用户输入"1",你拿字符串"1"和整数1做比较,结果肯定是False,导致第一个if分支根本不会执行,password数组自然是空的。

解决方法很简单,把用户输入转换成整数即可:

user_choice = int(input("Enter desired password strength (1-5) : "))

👉 额外提示:最好加个输入验证,防止用户输入非数字或超出范围的内容,比如用try-except做异常捕获:

while True:
    try:
        user_choice = int(input("Enter desired password strength (1-5) : "))
        if 1 <= user_choice <=5:
            break
        else:
            print("请输入1-5之间的数字!")
    except ValueError:
        print("请输入有效的数字!")

二、如何避免多个if分支?

用字典映射替代一堆if分支是最优雅的方案!我们可以把每个强度对应的规则(比如密码长度、可用字符集)存在字典里,直接根据用户选择的强度取对应配置生成密码,代码会更简洁易维护。

优化后的完整代码:

import string
import random

def password_generator():
    # 定义每个强度对应的配置:密码长度 + 可用字符集
    strength_config = {
        1: {"length": 4, "chars": string.ascii_letters},
        2: {"length": 6, "chars": string.ascii_letters + string.digits},
        3: {"length": 8, "chars": string.ascii_letters + string.digits + string.punctuation},
        4: {"length": 10, "chars": string.ascii_letters + string.digits + string.punctuation + string.whitespace},
        5: {"length": 12, "chars": string.printable}
    }

    # 输入验证逻辑
    while True:
        try:
            user_choice = int(input("Enter desired password strength (1-5) : "))
            if user_choice in strength_config:
                break
            print("请输入1-5之间的数字!")
        except ValueError:
            print("请输入有效的数字!")

    # 获取对应强度的配置并生成密码
    config = strength_config[user_choice]
    password = ''.join(random.choice(config["chars"]) for _ in range(config["length"]))
    print(f"生成的密码:{password}")

password_generator()

代码说明:

  • strength_config字典把每个强度等级和规则绑定,后续修改规则或新增等级,直接改字典即可,不用动核心逻辑
  • 用random.choice()替代chr(random.randint()),更直观灵活,能直接从自定义字符集选字符
  • 用''.join()直接生成字符串,比先存数组再处理更高效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:39:28