python请编写程序、生成随机密码_Python v3(随机密码生成器)

这个问题有几个细微差别:有些答案使用string.printable,但这不是一个好主意,因为它包含空格字符。虽然对于密码来说,它们并不是严格的非法的,但是您很难看到它们,因此无法将选项卡与几个空格(等等)区分开来。下面我只使用大写字母、数字和标点符号。

基于元素位置从一组字符中随机选择不是随机的,因为每个包含的字符类的基数不是均匀分布的:26小写字母;26大写字母;10数字;32标点符号。因此,生成的密码可能包含的字母多于标点字符和数字;标点字符多于数字;(等等)。因此,如果使用random.choices()(如在其他答案中一样),还应该使用weights=和cum_weights=选项,以消除上述偏见,通过晚上的分布。

也就是说,我鼓励在这个用例中使用Python的secrets模块,而不是它的random模块。从他们的documentation on random:Warning: The pseudo-random generators of this module should not be used

for security purposes. For security or cryptographic uses, see the

secrets module.

下面是一个使用Python-3的面向功能的解决方案。它只使用secrets.choice()。它并不能完全解决随机问题(还存在其他细微差别),但它确实改善了选择分布以减少偏差:>>> import string, secrets

>>> char_classes = (string.ascii_lowercase,

string.ascii_uppercase,

string.digits,

string.punctuation)

>>> size = lambda: secrets.choice(range(8,13)) # Chooses a password length.

>>> char = lambda: secrets.choice(secrets.choice(char_classes)) # Chooses one character, uniformly selected from each of the included character classes.

>>> pw = lambda: ''.join([char() for _ in range(size())]) # Generates the variable-length password.

演示:使用从每个字符类中统一选择的字符生成10个可变长度密码字符串:>>> for i in range(1,11):

>>> p = pw()

>>> print('%i) %i chars :: %s' % (i,len(p),p))

1) 11 chars :: IwWNEAUmnJt

2) 10 chars :: ;N/'tO6RTv

3) 8 chars :: l=5.2CDh

4) 10 chars :: V0=I+A`t2Q

5) 12 chars :: PQm8:f,#56"9

6) 10 chars :: KOdx9~%r;F

7) 11 chars :: 67U8}3>F{

8) 11 chars :: G$5y~3fE7o*

9) 10 chars :: 70,|=Rexwn

10) 8 chars :: &31P^@cU

最后,当我们在这里使用secrets模块时,可以使用numpy和numpy.random执行类似的操作。我希望这有帮助!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
生成器是一种在Python中非常有用的数据类型,它可以让你更高效地处理大量数据。生成器可以一次生成一个值,而不是一次生成一个序列,这样可以节省内存并提高性能。在Python中,有两种实现生成器的方式。一种是使用yield关键字定义一个函数,通过yield语句来生成值。例如,可以定义一个生成器函数my_generator,使用yield语句分别生成1、2和3这三个值。然后可以通过调用next函数来逐个获取生成器中的值。另一种方式是使用生成器表达式,它类似于列表推导式,但是使用圆括号而不是方括号。生成器表达式可以在需要时生成值,而不是一次性生成整个序列。通过调用next函数或使用for循环来逐个获取生成器表达式中的值。总之,生成器是一种非常方便和高效的数据类型,可以在处理大量数据时提供很多便利。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [python中的生成器(generator)](https://blog.csdn.net/sinat_31608641/article/details/131692227)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Python生成器](https://blog.csdn.net/jianwei_S/article/details/129715348)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Python函数之生成器](https://blog.csdn.net/weixin_53860346/article/details/127632821)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值