请,我需要创建一个像这样的单词列表"X4K7GB9y";。长度为8的
(大写字母((编号((大写字母((编号((大写字母((大写字母((编号((字母小写(
有了所有不重复使用python的可能性,如果你给我一个提示,我将不胜感激提前感谢
所以,理论上,简单的方法是得到所有这样的排列。
from itertools import product
from string import ascii_uppercase, digits
ups = ascii_uppercase
lows = ascii_lowercase
for x in product(ups, digits, ups, digits, ups, ups, digits, lows):
print("".join(x))
然而,在实践中,你很可能会耗尽记忆。请注意,有很多排列(确切地说是11881376000(,所以你很可能想要得到其中的一个子集。你可以这样做,其中n
是你想要的排列数量。
def alphastring_generator(pattern, n):
for idx, x in enumerate(product(*pattern)):
if idx > n:
break
yield "".join(x)
my_pattern = [ups, digits, ups, digits, ups, ups, digits, lows]
result = [*alphastring_generator(my_pattern, n=1000)]
您可以使用random.sample
并从所需列表中选择k=8件。
为了满足您的要求,您可以在不重复的情况下生成各个类别(大写、小写、数字(中的字符,并对它们进行重新排序。您可以将其放入一个循环中,并将结果写入一个文件中。
import random
import string
random.seed(0)
NUM_WORDS = 10
with open("wordlist.txt","w",encoding="utf-8") as ofile:
for _ in range(NUM_WORDS):
uppc = random.sample(string.ascii_uppercase,k=4)
lowc = random.sample(string.ascii_lowercase,k=1)
digi = random.sample(string.digits,k=3)
word = uppc[0] + digi[0] + uppc[1] + digi[1] + uppc[2] + uppc[3] + digi[2] + lowc[0]
print(word,file=ofile)
这是你想要的吗?或者你不重复的意思是别的吗?