Python-random模块

一、random模块的用法

import random

print(random.random())  # 不需要传参,random 返回0-1随机小数

print(random.uniform(1, 10))  # 需要传参,返回参数区间的随机小数

print(random.randint(-100, 100))  # 需要传参,返回参数区间的随机整数

print(random.randrange(1, 2))  # 类似与uniform,这个是左闭右开区间

print(random.choice(['孙悟空', 18, ('吃饭', '睡觉', '打豆豆')]))  # 从一个序列中随机选择一个元素;序列可以是 字符串,列表,字典,元组

print(random.sample(['孙悟空', 18, ('吃饭', '睡觉', '打豆豆')], 2))  # 与choice相似,区别,可以取多个值(根据参数决定),返回列表

l = [1, 3, 5, 7, 9]
random.shuffle(l)  # shuffle,洗牌,把容器(可变类型 = 列表 )中的数据打乱顺序
print(l)

运行结果:

0.7875324724376389
9.009184861681847
19
1
孙悟空
[18, ('吃饭', '睡觉', '打豆豆')]
[7, 3, 5, 9, 1]

二、random模块实际运用

1、随机生成一个16位密码;必须包含大写字母,小写字母,数字和符号,如:vC3D-kf26c+70(z4。

(1)思路

        1) 新建一个空字符串

        2)16位密码,循环16次,每次随机从大写字母,小写字母,数字和符号中随机选一个 #

        3)然后将16个字符拼接起来

(2)代码的思路

pwd = ''

for i in range(16): # 不需要i ,只是单纯循环16次,可将i替换为_

         随机字符 = random.choice([['大写字母','a','b'], ['小写字母'], ['数字'], ['符号']])

        # 这里列举写字母,数字,符号太麻烦,可以用ASCII码,规定不同的范围

        pwd += 随机字符

(3)初步简略代码

def pwd_generator(length):
    pwd = ''
    list = [[97, 122], [65, 90], [48, 57], [33, 47]]
    # 小写字母:97-122,大写字母:65-90 ,数字:48-57,符号33-47;
    # print(random.choice(list))
    for _ in range(length):
        random_list = random.choice(list)  # 选择的是4个子列表中的任意一个
        random.randint(random_list[0], random_list[1])  # 返回参数区间的任意整数
        random_char = chr(random.randint(*random_list))  # *用在实参中是打散,形参中打包
        pwd += random_char
    return pwd


print(pwd_generator(16))

运行结果:

1P06Osl28CKzy$q%

注:实际运用中,以下代码二选一即可,(功能一样,不同的表达)

        random.randint(random_list[0], random_list[1])  
        random_char = chr(random.randint(*random_list))

# 上述代码,多次运行可能发现,只有三种字符或者两种字符(we42lz),对上述问题进行解决;

(4)完整代码之一

def pwd_generator(length):
    if length < 4:  # 若密码长度小于4 ,无法满足必须包含4种字符,返回空字符串
        return ''
    while True:
        pwd = ''
        for _ in range(length):
            list = [[97, 122], [65, 90], [48, 57], [33, 47]]
            # 小写字母:97-122,大写字母:65-90 ,数字:48-57,符号33-47;
            # print(random.choice(list))

            random_list = random.choice(list)  # 选择的是4个子列表中的任意一个
            random_char = chr(random.randint(*random_list))  # *用在实参中是打散,形参中打包
            pwd += random_char

        l = [False for i in range(4)]  # 通过列表创建4个值都为False的列表

        # 遍历前面生成的密码 pwd ,判断密码是否包含四种类型的字符
        # 因为可能16次循环完,碰巧出现少某一种或多种字符
        for word in pwd :
            if 97 <= ord(word) <= 122:
                l[0] = True
            if 65 <= ord(word) <= 90:
                l[1] = True
            if 48 <= ord(word) <= 57:
                l[2] = True
            if 33 <= ord(word) <= 47:
                l[3] = True

        if l[0] and l[1] and l[2] and l[3]:
            return pwd
        print('密码不合法',pwd)
        # 以上整体放入一个死循环中,知道有合法的密码,才会return出去


print(pwd_generator(6))

运行结果:

密码不合法 Yy012j
密码不合法 (*awKP
密码不合法 0977hi
密码不合法 #g#Ge&
密码不合法 22,3W1
.%ssR0


符:ASCII码


(5)第二种方法思路:

        1)将随机生成的4中字符都要;

        2)循环16/4次;

        3)循环结束后,洗牌,再转成字符串返回去

def pwd_generator(length):
    pwd = []
    for _ in range(length//4+1):  # 在这里加1 ,若需要长度是5,5不是4的倍数,需要循环两次,得到8个字符
        char_list = [chr(random.randint(97, 122)),
                     chr(random.randint(65, 90)),
                     chr(random.randint(48, 57)),
                     chr(random.randint(33, 47))]
        pwd.extend(char_list)
    pwd = pwd[:length]  # 这里切片,比如需要5个字符,两次循环,得到8个字符
    random.shuffle(pwd)
    return ''.join(pwd)  # 转成字符串返回


print(pwd_generator(8))
# 如上的方法,得到的密码,每种字符有两位

运行结果;

*jN,V6q3

附:

(1)切片:从 python 对象中提取出部分值。

 python 切片操作可以使用切片操作符 : 和切片类 slice 来完成

    list[:stop]

(2)str.join(item),join函数是一个字符串操作函数

        str表示字符串(字符),item表示一个成员,注意括号里必须只能有一个成员

例:','.join('abc')

“将字符串abc中的每个成员以字符 ',' 分隔开再拼接成一个字符串

输出结果:'a,b,c'

三、ASCII码表

请看PDF文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/702329.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

腾讯云SSL证书获取及Nginx配置教程

前言 很多人应该都有属于自己网站,刚开始基本是只能用http进行访问,无法使用https安全访问,但是随着网络安全意识的不断提高,越来越多的网站开始使用HTTPS协议来保护用户的数据安全,SSL证书是实现HTTPS协议的关键组件,本文将讲解如何在腾讯云上获取SSL证书,并配置到Ngi…

k8s中的pod域名解析失败定位案例

问题描述 我在k8s中启动了一个Host网络模式的pod&#xff0c;这个pod的域名解析失败了。 定位步骤 敲kubectl exec -it [pod_name] -- bash进入pod后台&#xff0c;查看/etc/resolv.conf&#xff0c;发现nameserver配的有问题。这里我预期的nameserver应该使用宿主机的&…

橡胶:神奇的天然材料

你是否知道&#xff0c;橡胶其实是一个充满神秘与奇妙的世界&#xff1f; 从原始的乳胶&#xff0c;到现代工业中的合成橡胶&#xff0c;它的变化与运用令人叹为观止。橡胶&#xff0c;不仅是轮胎、胶鞋的原材料&#xff0c;更是众多工业产品不可或缺的组成部分。它的弹性、耐磨…

M41T00串行实时时钟-国产兼容RS4C400

RS4C400是一种低功耗串行实时时钟&#xff08;RTC&#xff09;。内置32.768 kHz振荡器&#xff08;外部晶体控制&#xff09;和RAM的前8个字节用于时钟/日历功能&#xff0c;并以二进制编码十进制&#xff08;BCD&#xff09;格式配置。地址和数据通过双线双向总线串行传输。内…

机票追位功能大揭秘

亲爱的民航代理人朋友们&#xff0c;你们是否在为客户寻找合适机票而费尽心思&#xff1f;是否曾为客户买不到心仪的机票而烦恼&#xff1f;是否曾因机票舱位紧张而焦虑&#xff1f;别担心&#xff0c;我们ASMS系统的机票追位功能经过重构优化后再次登场&#xff0c;将为你排忧…

python urllib2中文乱码怎么解决

很多乱码问题是编码造成的&#xff0c;一般对于中文网站基本是UTF-8&#xff0c;GB2312&#xff0c;可以GB18030通吃。 另一个造成乱码的原因是压缩格式&#xff0c;很多规模较大的网站都是以gzip的压缩格式输出页面的&#xff0c;所以在用BS解析之前需要先判断该网页是否经过…

42.vue-element-admin界面上的search字段配置

目录 一、配置方法 1.如果这个字段要放到search区域&#xff0c;则&#xff1a; 2.如果这个字段不要放到search区域&#xff0c;则&#xff1a; 二、配置示例 1.先找到下面的vue文件 2.找到字段的配置区域 3.找到你要配置的字段&#xff0c;例如index 4.修改search.hid…

分贝通到餐解决方案全新升级

消费小票总是神出鬼没;申请、报销驴唇不对马嘴;虚报陷阱难逐一排查 部门餐标视而不见;单笔超支屡见不鲜;规则复杂总被吐槽记不住 发票、单据多如牛毛;发票合规层出不穷;审核对账气血两亏; ...... 针对上述问题,分贝通全面升级了到餐解决方案。 从一线CBD商务区到地方县城,优…

栈及其相关应用

栈是一种线性数据结构&#xff0c;栈的特征是数据的插入和删除只能通过一端来实现&#xff0c;这一端称为“栈顶”&#xff0c;相应的另一端称为“栈底”。 栈及其特点 用一个简单的例子来说&#xff0c;栈就像一个放乒乓球的圆筒&#xff0c;底部是封住的&#xff0c;如果你想…

如何在 Windows 上安装 MySQL(保姆级教程2024版)

MySQL 是最流行的数据库管理系统 (DBMS) 之一。它轻量、开源且易于安装和使用&#xff0c;因此对于那些刚开始学习和使用关系数据库的人来说是一个不错的选择。 本文主要系统介绍Windows的环境下MySQL的安装过程和验证过程。 目录 1 安装过程 1.1 前置要求 1.2 下载并安装 …

C语言,struct 结构体、union共用体的使用

//状态字节&#xff0c;根据数据定义几个标志&#xff0c;标志位依据联合体内部结构体进行变量定义 //目的&#xff0c;节省内存空间&#xff0c;省去特定字节 struct STATDATA {union{unsigned char stat;struct {unsigned stat0:1;unsigned stat1:1;unsigned stat2:1;unsign…

知识付费平台功能模块详解

知识付费平台作为一种新兴的在线教育模式&#xff0c;以其用户需求导向的设计理念和便捷高效的学习方式&#xff0c;受到了广泛欢迎。这类平台汇集了职业技能、生活兴趣和人文社科等多领域的专业知识&#xff0c;并通过视频播放、在线问答、作业批改等工具和服务&#xff0c;助…

架构设计 - MySQL 插入数据性能优化策略

mysql 数据库提高数据插入效率主要可以考虑以下方面&#xff1a; 使用批量插入数据的 SQL 语句&#xff0c;避免使用 for 循环逐条记录插入。 所有插入语句共用一个事务&#xff0c;避免1条SQL语句开1个事务&#xff0c;所有操作都完成后再提交事务。 尽量按照索引递增顺序插入…

更适合工程师和研究僧的FPGA专项培训课程

各位编程精英er~ 社区打造的FPGA工程师培训班上线后&#xff0c;有不少同学后台私信询问&#xff1a;“能不能出个那种专门针对某个知识点的课程呢&#xff1f;我想针对自己的薄弱点深入学习。” 贴心如我&#xff0c;当然会满足大家的学习需求啦。本周&#xff0c;社区FPGA专…

springboot物流管理系统-计算机毕业设计源码00781

摘要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对物流管理系统等问题&#xff0c;对如何通过计…

【网络安全的神秘世界】Kali 自带 Burp Suite 使用指南:字体与CA证书设置详解等

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 Kali 自带 Burp Suite 使用指南目录 Burp Suite的打开方式设置Burp Suite软件的字体大小查看Burp Suite 默认代理在火狐浏览器设置代理Burp Suite 抓不到本…

python的%time 、%%time 、%timeit、%%timeit的区别

%time 、%timeit 要在ipython下才可以使用。(所以说Jupyter Notebook当然是可以用的,pycharm里的python环境也是jupyter Notebook的) %time可以测量一行代码执行的时间 %timeit可以测量一行代码多次执行的时间 网上有说法说,%timeit是测量一行代码100000次循环内,3次最快速…

OJ——环形链表

环形链表概念 环形链表是一种特殊类型的链表数据结构&#xff0c;其最后一个节点的地址域不为null&#xff0c;而是指向了链表中的某个节点&#xff0c;形成一段闭环&#xff0c;如下图&#xff1a; tip&#xff1a;该类型题目不能以判断 cur.next 是否为 null 为循环条件&…

2024 Python-Flask框架:网页版 邮件超时自动提醒器(超简单)

首先安装flask框架 pip install flask pip install pywin32 pip install pandas pip install datetime 然后根目录下&#xff0c;创建 app.py 和 templates文件夹 &#xff08;注意我们的原时间是年&#xff0c;周&#xff0c;日的计算方式&#xff09; from flask import …

Windows10安装配置Docker客户端和WSL2与Hyper-V虚拟机

一、需求说明 需要在Windows系统中安装配置Docker的客户端,方便直接管理配置docker镜像容器内容。 二、Windows10安装Docker客户端步骤 2.1、下载安装Docker客户端 对于Windows 10以下的用户,推荐使用Docker Toolbox Windows安装文件:http://mirrors.aliyun.com/docker-…