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

如何用Python创建支持用户自定义选项的密码生成器

密码生成器代码问题修复

原代码存在的问题

  • 输入的密码长度是字符串类型,未转换为整数,无法直接用于长度判断
  • 初始化的password是字符串类型,无法调用列表专属的append方法
  • while循环逻辑写反,且未对password取长度判断,循环条件完全错误
  • 函数返回的密码是列表格式,无法直接和字符串拼接输出
  • 缺少边界判断:如果用户未选择任何字符类型,会导致从空列表取值报错

修复后完整代码

import random
import string

uppercase = list(string.ascii_uppercase)
lowercase = list(string.ascii_lowercase)
numbers = list(string.digits)
symbols = list(string.punctuation)

def generatePassword(passwordLength, useUppercase, useLowercase, useNumbers, useSymbols):
    charsToUse = []
    password = []

    if useUppercase:
        charsToUse.extend(uppercase)
    if useLowercase:
        charsToUse.extend(lowercase)
    if useNumbers:
        charsToUse.extend(numbers)
    if useSymbols:
        charsToUse.extend(symbols)
    
    # 边界处理:未选择任何字符类型时抛出提示
    if not charsToUse:
        raise ValueError("至少需要选择一种字符类型")

    while len(password) < passwordLength:
        password.append(random.choice(charsToUse))
    
    random.shuffle(password)
    
    return ''.join(password)


print('====================================================')
print('==== WELCOME TO THE ULTIMATE PASSWORD GENERATOR ====')
print('====================================================')

# 输入密码长度转换为整数
passwordLength = int(input('你想要生成多长的密码?: '))

useUppercase = bool(input('是否包含大写字母?输入任意内容为是,留空为否: '))
useLowercase = bool(input('是否包含小写字母?输入任意内容为是,留空为否: '))
useNumbers = bool(input('是否包含数字?输入任意内容为是,留空为否: '))
useSymbols = bool(input('是否包含符号?输入任意内容为是,留空为否: '))

print('----------------------------------------------------')
print('正在生成密码...')
print('----------------------------------------------------')
print("你的新密码是: " + generatePassword(passwordLength, useUppercase, useLowercase, useNumbers, useSymbols))
print('====================================================')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 11:39:03