我的问题是:如何生成一个随机密码,每次生成的密码长度从8到12个字符不等。
这是我的代码:
import string
import random
def randompassword():
chars=string.ascii_uppercase + string.ascii_lowercase + string.digits
size=8
return ''.join(random.choice(chars) for x in range(size,12))
print(randompassword())
Tags:
size = 8; range(size, 12)
总是返回数组[8,9,10,11]
,因此您总是得到长度为4的密码。 相反,请提前使用randint
确定此特定密码的大小:这个问题有几个细微差别:
string.printable
,但这不是一个好主意,因为它包含空格字符。虽然对于密码来说,它们并不是严格的非法的,但是您很难看到它们,因此无法将选项卡与几个空格(等等)区分开来。下面我只使用大写字母、数字和标点符号。random.choices()
(如在其他答案中一样),还应该使用weights=
和cum_weights=
选项,以消除上述偏见,通过晚上的分布。secrets
模块,而不是它的random
模块。从他们的documentation on random:下面是一个使用Python-3的面向功能的解决方案。它只使用
secrets.choice()
。它并不能完全解决随机问题(还存在其他细微差别),但它确实改善了选择分布以减少偏差:演示:使用从每个字符类中统一选择的字符生成10个可变长度密码字符串:
最后,当我们在这里使用
secrets
模块时,可以使用numpy
和numpy.random
执行类似的操作。我希望这有帮助!相关问题 更多 >
编程相关推荐