【问题标题】:combining user input variables into one variable. One of which may not be a variable将用户输入变量合并为一个变量。其中一个可能不是变量
【发布时间】:2022-01-24 22:19:22
【问题描述】:

我正在制作密码生成器。如果用户在问题中输入 no,我该如何做到这一点。例如,没有大写。生成器 sill 可以不使用大写字母吗?

   print("hello, Welcome to Password Generator")
            length = int(input('Please enter the length of password: '))
            upperanswer = input("Would you like to use UpperCase? ")
            if upperanswer == "yes":
                    upper = string.ascii_uppercase
            loweranswer = input("Would you like to use LowerCase?")
            if loweranswer == "yes":
                    lower = string.ascii_lowercase
            numberanswer = input("Would you like to use Numbers?")
            if numberanswer == "yes":
                    numbers = string.digits
            specialanswer = input("Would you like to use Special Characters?")
            if specialanswer == "yes":
                    special = string.punctuation
            all = lower + upper + numbers + special
            temp = random.sample(all,length)
            password = "".join(temp)
            print(password)

【问题讨论】:

    标签: python variables passwords generator


    【解决方案1】:

    此代码的问题是,如果您回答 yesupper 以外的任何内容,则该变量将未定义。我建议扩展一个我称为characters 的字符串,这样无论用户回答什么,您都可以参考它。

    #!/usr/bin/env python3
    import string
    import random
    print("hello, Welcome to Password Generator")
    
    characters = ""
    
    length = int(input('Please enter the length of password: '))
    upperanswer = input("Would you like to use UpperCase? ")
    if upperanswer == "yes":
            characters += string.ascii_uppercase
    loweranswer = input("Would you like to use LowerCase? ")
    if loweranswer == "yes":
            characters += string.ascii_lowercase
    numberanswer = input("Would you like to use Numbers? ")
    if numberanswer == "yes":
            characters += string.digits
    specialanswer = input("Would you like to use Special Characters? ")
    if specialanswer == "yes":
            characters += string.punctuation
    
    temp = random.sample(characters, length)
    password = "".join(temp)
    print(password)
    

    结果:

    hello, Welcome to Password Generator
    Please enter the length of password: 10
    Would you like to use UpperCase? no
    Would you like to use LowerCase? yes
    Would you like to use Numbers? no
    Would you like to use Special Characters? yes
    %-injo!&^e
    

    【讨论】:

    • 非常感谢真希尔!我的任务明天到期!
    【解决方案2】:

    只需在用户输入 no 时将字符串设置为空,方法是向每个 if 语句添加 else 语句,参见下面的代码。请注意,如果用户尝试为所有选项输入 no,这当然会失败,因为这样就没有可用的字符了

    import random
    import string
    
    print("hello, Welcome to Password Generator")
    length = int(input('Please enter the length of password: '))
    upperanswer = input("Would you like to use UpperCase? ")
    if upperanswer == "yes":
        upper = string.ascii_uppercase
    else:
        upper = ""
    loweranswer = input("Would you like to use LowerCase?")
    if loweranswer == "yes":
        lower = string.ascii_lowercase
    else:
        lower = ""
    numberanswer = input("Would you like to use Numbers?")
    if numberanswer == "yes":
        numbers = string.digits
    else:
        numbers = ""
    specialanswer = input("Would you like to use Special Characters?")
    if specialanswer == "yes":
        special = string.punctuation
    else:
        specialanswer = ""
    all = lower + upper + numbers + special
    temp = random.sample(all, length)
    password = "".join(temp)
    print(password)
    

    【讨论】:

    • ... 或者在开头将它们设置为空字符串,这样就不需要else 子句。
    • 非常感谢伊万·布朗和珍希尔!我的任务明天到期!
    最近更新 更多