如何为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
相关产品推荐
相关产品推荐

