6

randomしたがって、毎回ランダムな順序で 2 つの小文字、2 つの大文字、3 つの特殊記号、および 3 つの数字を含む10 桁のパスワード (モジュールを使用する必要があります) を生成する必要があります。ランダム パスワード ジェネレーターの部分は完了しましたが、小文字 2 文字、大文字 2 文字、特殊記号 3 つ、数字 3 つに制限する方法がわかりません。

これは私がこれまでに持っているものです:

import random
import string
lc_letter = ["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"]
uc_letter = ["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"]
symbols = ["!","@","#","$","%","^","&","*","(",")","_","+","=","-","/",">","<",",",".","?","\\"]
numbers = ["0","1","2","3","4","5","6","7","8","9"]
options = [lc_letter,uc_letter,symbols,numbers]
for i in range(10):
    choice = random.choice(options)
    digit = random.choice(choice)
    print(digit, end = '')
4

6 に答える 6

6

次の定数を使用できますstring

import random
import string

s = ""

for i in range(2):
    s = s + random.choice(string.ascii_lowercase)
for i in range(2):
    s = s + random.choice(string.ascii_uppercase)
for i in range(3):
    s = s + random.choice(string.punctuation)
for i in range(3):
    s = s + random.choice(string.digits)

s = ''.join(random.sample(s, 10))

print(s)
于 2022-01-23T18:44:04.860 に答える
3

最初に必要なすべての文字を選択してから、それらをシャッフルします。

from random import choice as rd
from random import shuffle
import string
lc_letter = ["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"]
uc_letter = ["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"]
symbols = ["!","@","#","$","%","^","&","*","(",")","_","+","=","-","/",">","<",",",".","?","\\"]
numbers = ["0","1","2","3","4","5","6","7","8","9"]
options = [
    rd(lc_letter),
    rd(lc_letter),
    rd(uc_letter),
    rd(uc_letter),
    rd(symbols),
    rd(symbols),
    rd(symbols),
    rd(numbers),
    rd(numbers),
    rd(numbers),
]
shuffle(options)
print(''.join(options))
于 2022-01-23T18:43:38.377 に答える
1

実際にできることは、次のような長さ 10 のリストを作成することです。

dist = [0, 0, 1, 1, 2, 2, 2, 3, 3, 3]

このリストは、リストからの各インデックスの分布を表していますoptions。たとえば、オプションで最初に小文字を入力し、2 つの小文字の値を選択する必要がある場合、配布リストには 2 つのゼロが含まれます。

リストからインデックスを選択できるようになりました。

idx = random.randint(0, len(dist))

次に、次のリストから選択しますoptions[dist[idx]]

最後にfrompopの値。idxdist

dist.pop(idx)

これにより、すべての有効なパスワードが同じ確率で生成されます。

于 2022-01-23T18:44:57.917 に答える