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

如何为Python密码生成器添加while循环处理非法输入重询?

密码生成器输入验证修复方案

原代码存在两处输入验证缺陷:

  • 输入密码长度时,若输入非数字会直接触发报错
  • 询问是否需要特殊字符时,输入非"yes"/"no"仅提示错误但不会重新询问

以下是修复后的完整代码,通过while循环实现输入合法性校验:

import random
import string

def random_pass(length):
    # 循环询问直到输入合法的 yes/no(忽略大小写)
    spec_char = ""
    while spec_char.lower() not in ["yes", "no"]:
        spec_char = input("Would you like special characters in your password? ")
        if spec_char.lower() not in ["yes", "no"]:
            print("Please only type Yes or No")
    
    if spec_char.lower() == "yes":
        characters = string.ascii_letters + string.digits + string.punctuation
        password = ''.join(random.choice(characters) for i in range(length))
        print("Your password is: ", password)
    else:
        # 修正无特殊字符密码的生成逻辑,与上方保持统一
        characters = string.ascii_letters
        password = ''.join(random.choice(characters) for i in range(length))
        print("Your password is: ", password)

# 循环询问密码长度,直到输入有效数字
char_length = None
while char_length is None:
    try:
        char_length = int(input("How many characters would you like your password to be? "))
        # 可选:添加密码长度最小值限制,提升安全性
        if char_length < 6:
            print("Password length should be at least 6 characters.")
            char_length = None
    except ValueError:
        print("Please enter a valid number.")

random_pass(char_length)

关键改进说明:

  • 密码长度校验:用while循环配合try-except捕获非数字输入的异常,确保用户必须输入有效整数;还可额外添加长度最小值限制,避免生成过短的弱密码
  • 特殊字符选择校验:通过while循环持续询问,直到输入(转小写后)为"yes"或"no",兼容大小写输入,提升用户体验
  • 修复密码生成逻辑:原代码中无特殊字符的密码生成逻辑有误,修改为与有特殊字符的写法一致,直接从string.ascii_letters中随机选字符,代码更简洁高效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 09:01:11