Python 尝试从字符列表中获取特定数量的字符,然后通过随机函数

Python 尝试从字符列表中获取特定数量的字符,然后通过随机函数,python,for-loop,Python,For Loop,首先我想指出的是,我刚刚开始学习编码,所以如果我的问题是彻头彻尾的愚蠢(我相信会是这样),我很抱歉,但无论如何,我都可以从那些善良的灵魂那里得到一些帮助,他们不介意帮助一个完整的noob 因此,作为python的入门项目,我想我应该编写一个随机密码生成器,它接受以下输入- 1.字符数(最少6个) 2.大写字符数 3.小写字符数 4.数字字符数(0-9) 5.特殊字符数 我面临两个问题:- 1.当我得到输出时,它不是我输入的特定字符数。 2.输出总是带有[“”](作为列表) 我不太担心2。我已经看

首先我想指出的是,我刚刚开始学习编码,所以如果我的问题是彻头彻尾的愚蠢(我相信会是这样),我很抱歉,但无论如何,我都可以从那些善良的灵魂那里得到一些帮助,他们不介意帮助一个完整的noob

因此,作为python的入门项目,我想我应该编写一个随机密码生成器,它接受以下输入- 1.字符数(最少6个) 2.大写字符数 3.小写字符数 4.数字字符数(0-9) 5.特殊字符数

我面临两个问题:- 1.当我得到输出时,它不是我输入的特定字符数。 2.输出总是带有[“”](作为列表)

我不太担心2。我已经看到了一些关于使用join函数删除方括号的答案

我主要担心的是运行for循环(任何其他想法都非常受欢迎)来运行用户输入的次数,以便随机函数可以选择指定数量的字符

感谢您的帮助

代码如下:-

对于范围内的l(较低): 下一步=随机选择(下一步列表)

输出示例:- /通过2.py 你想要多少个字符?:9 有多少个大写字符?:3 有多少个小写字符?:3 多少位数?:2 有多少特殊字符?:1 [[0]、'>']、['R']、['y']]

回答(完全归功于@Arume):-

#/usr/bin/env蟒蛇3.7
#密码生成器尝试2
随机输入
characters=int(输入(“您想要多少个字符:”)
如果字符>=6:
通过
其他:
打印(“最小字符长度为6”)
退出()
upper=int(输入(“多少大写字符:”)
lower=int(输入(“多少小写字符:”)
digits=int(输入(“多少位数:”)
spec_characters=int(输入(“多少特殊字符:”)
tot_char=int(上)+int(下)+int(数字)+int(特殊字符)
如果tot_char==字符且int(上)>=1且int(下)>=1且int(数字)>=1且int(规范字符)>=1:
通过
其他:
打印(“字符总数与您选择的字符不匹配,或者其中一种字符类型设置为0”)
退出()
#上表=['A'、'B'、'C'、'D'、'E'、'F'、'G'、'H'、'I'、'J'、'K'、'L'、'M'、'N'、'O'、'P'、'Q'、'R'、'S'、'T'、'U'、'V'、'W'、'X'、'Y'、'Z']
#下表=['a'、'b'、'c'、'd'、'e'、'f'、'g'、'h'、'i'、'j'、'k'、'l'、'm'、'n'、'o'、'p'、'q'、'r'、's'、't'、'u'、'v'、'w'、'x'、'y'、'z']
#数字列表=[1,2,3,4,5,6,7,8,9,0]
#规范字符列表=['!'、'@'、'#'、'$'、'%'、'^'、'&'、'*'、'('、')'、':'、';'、'?'、'|'、'/']
通过列表=[]
对于范围内的u(上限):
上通行证=随机选择(“ABCDEFGHIJKLMNOPQRSTUVXYZ”)
通过列表。追加(上通过)
对于范围内的l(较低):
低通=随机选择(“abcdefghijklmnopqrstuvwxyz”)
通过列表。追加(下通过)
对于范围内的d(数字):
数字通过=随机选择(“0123456789”)
通过列表。追加(数字通过)
对于范围内的s(规格字符):
spec_characters_pass=random.choice(“!@:;#$%^&*,?|/”)
通过列表。追加(规格字符通过)
随机洗牌(通过列表)
密码=“加入(通过列表)
#打印(上限、下限、数字、规格字符)
打印(“您的随机密码为:”,密码)

我不明白你有什么问题,但我试着写了三个例子。试着执行它们

  • 使用
    random.choice
    函数的示例。这很长,但很容易理解
  • 使用
    random.choices
    函数和
    for
    语句的示例。这更优雅
  • 随机导入
    number_all=int(输入(“您想要多少个字符?:”)
    如果数字_全部<6:
    打印(“字符总数必须为6个或更多!”)
    退出()
    number_upper=int(输入(“多少大写字符:”)
    number_lower=int(输入(“多少小写字符:”)
    数字=整数(输入(“多少位数:”)
    number_special=int(输入(“多少个特殊字符:”)
    如果数字为所有!=数字上+数字下+数字数字+数字特殊:
    打印(“数字不相加!”)
    退出()
    字符和数字列表=(
    (“ABCDEFGHIJKLMNOPQRSTUVWXYZ”,数字以上),
    (“abcdefghijklmnopqrstuvwxyz”,数字较低),
    (“0123456789”,数字),
    (“,.;:()[]-+=”,特殊编号),
    )
    字符列表=[]
    对于字符,字符和数字列表中的数字:
    选择列表=随机。选择(字符,k=数字)
    字符列表。扩展(拾取列表)
    随机移动(字符列表)
    密码=“”。加入(字符列表)
    打印(密码)
    
    我不明白你有什么问题,但我试着写了三个例子。试着执行它们

  • 使用
    random.choice
    函数的示例。这很长,但很容易理解
  • 使用
    random.choices
    函数和
    for
    语句的示例。这更优雅
  • 随机导入
    number_all=int(输入(“您想要多少个字符?:”)
    如果数字_全部<6:
    打印(“字符总数必须为6个或更多!”)
    退出()
    number_upper=int(输入(“多少大写字符:”)
    number_lower=int(输入(“多少小写字符:”)
    数字=整数(输入(“多少位数:”)
    number_special=int(输入(“多少个特殊字符:”)
    如果数字为所有!=数字上+数字下+数字数字+数字特殊:
    打印(“数字不相加!”)
    退出()
    字符和数字列表=(
    (“ABCDEFGHIJKLMNOPQRSTUVWXYZ”,数字以上),
    (“abcdefghijklmnopqrstuvwxyz”,数字较低),
    (“0123456789”,数字),
    (“,.;:()[]-+=”,特殊编号),
    )
    字符列表=[]
    对于字符,字符和数字列表中的数字:
    选择列表=随机。选择(字符,k=数字)
    字符列表。扩展(pi
    
    import random
    
    number_all = int(input("How many characters would you like? : "))
    
    if number_all < 6:
        print("The total number of characters must be 6 or more!")
        exit()
    
    number_upper = int(input("How many upper case characters? : "))
    number_lower = int(input("How many lower case characters? : "))
    number_digit = int(input("How many digits? : "))
    number_special = int(input("How many Special Characters? : "))
    
    if number_all != number_upper + number_lower + number_digit + number_special:
        print("The figures do not add up!")
        exit()
    
    characters_list = []
    
    for _ in range(number_upper):
        upper = random.choice("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
        characters_list.append(upper)
    
    for _ in range(number_lower):
        lower = random.choice("abcdefghijklmnopqrstuvwxyz")
        characters_list.append(lower)
    
    for _ in range(number_digit):
        digit = random.choice("0123456789")
        characters_list.append(digit)
    
    for _ in range(number_special):
        special = random.choice(",.;:()[]-+=")
        characters_list.append(special)
    
    
    random.shuffle(characters_list)
    password = "".join(characters_list)
    print(password)
    
    import random
    
    number_all = int(input("How many characters would you like? : "))
    
    if number_all < 6:
        print("The total number of characters must be 6 or more!")
        exit()
    
    number_upper = int(input("How many upper case characters? : "))
    number_lower = int(input("How many lower case characters? : "))
    number_digit = int(input("How many digits? : "))
    number_special = int(input("How many Special Characters? : "))
    
    if number_all != number_upper + number_lower + number_digit + number_special:
        print("The figures do not add up!")
        exit()
    
    characters_list = []
    
    upper_list = random.choices("ABCDEFGHIJKLMNOPQRSTUVWXYZ", k=number_upper)
    characters_list.extend(upper_list)
    
    lower_list = random.choices("abcdefghijklmnopqrstuvwxyz", k=number_lower)
    characters_list.extend(lower_list)
    
    digits_list = random.choices("0123456789", k=number_digit)
    characters_list.extend(digits_list)
    
    special_list = random.choices(",.;:()[]-+=", k=number_special)
    characters_list.extend(special_list)
    
    
    random.shuffle(characters_list)
    password = "".join(characters_list)
    print(password)
    
    import random
    
    number_all = int(input("How many characters would you like? : "))
    
    if number_all < 6:
        print("The total number of characters must be 6 or more!")
        exit()
    
    number_upper = int(input("How many upper case characters? : "))
    number_lower = int(input("How many lower case characters? : "))
    number_digit = int(input("How many digits? : "))
    number_special = int(input("How many Special Characters? : "))
    
    if number_all != number_upper + number_lower + number_digit + number_special:
        print("The figures do not add up!")
        exit()
    
    characters_and_numbers_list = (
        ("ABCDEFGHIJKLMNOPQRSTUVWXYZ", number_upper),
        ("abcdefghijklmnopqrstuvwxyz", number_lower),
        ("0123456789", number_digit),
        (",.;:()[]-+=", number_special),
    )
    characters_list = []
    for characters, number in characters_and_numbers_list:
        picked_list = random.choices(characters, k=number)
        characters_list.extend(picked_list)
    
    random.shuffle(characters_list)
    password = "".join(characters_list)
    print(password)