Python-random模块

news2024/11/24 9:28:14

一、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文件

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

APP抓包渗透测试首尝试

前言 文章分为两大部分&#xff0c;一是介绍抓取app数据包的常用方法&#xff0c;二是结合笔者所接触的授权项目&#xff0c;对抓取的app数据包转传统Web渗透测试的小分享。通过阅读文章分享内容&#xff0c;读者能快速了解app渗透测试方式&#xff0c;初步入门APP抓包渗透测试…

禁止methtype联网

mathtype断网_如何禁止mathtype联网-CSDN博客https://blog.csdn.net/qq_41060221/article/details/128144783

03-QTWebEngine中使用qtvirtualkeyboard

qt提供了 virtualKeyboard 虚拟键盘模块&#xff0c;只需要在在main函数中最开始加入这样一句就可以了 qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard")); 但是在使用的时候遇到了一些问题&#xff1a; 1、中文输入的时候没有输入提示 Qvirt…

openh264 SVC 时域分层原理介绍

openh264 OpenH264是一个开源的H.264编码器&#xff0c;由Cisco公司开发并贡献给开源社区。它支持包括SVC&#xff08;Scalable Video Coding&#xff09;在内的多种编码特性&#xff0c;适用于实时应用场景&#xff0c;比如WebRTC。OpenH264项目在GitHub上是公开的&#xff0…

hugo-magic主题使用教程(一)

前提条件 以下教程以windows10为例操作终端使用git bash魔法上网的前提下 下载hugo https://github.com/gohugoio/hugo/releases/download/v0.127.0/hugo_extended_0.127.0_windows-amd64.zip解压到任意目录,然后将目录添加到系统环境变量 如图 (windows)打开cmd 输入 hugo …

windows系统,家庭自用NAS。本地局域网 Docker安装nextcloud

windows系统&#xff0c;家庭自用NAS。本地局域网 Docker安装nextcloud 1、docker安装 太简单了&#xff0c;直接去搜一搜。 docker-compose 相关命令 docker-compose down docker compose up -d2、还是使用老的 在你需要挂载的目录下&#xff0c;新建一个文件&#xff0c;…

2023年13个最适合销售电子书的WordPress主题

欢迎来到我们用于销售电子书和其他数字/可下载产品&#xff08;软件、应用程序、图标集、主题等&#xff09;的最佳WordPress主题的完整集合。 这些主题有内置的支付网关&#xff0c;可以通过 PayPal、信用卡等处理安全支付。&#xff08;易于配置&#xff01;&#xff09; 最…

我主编的电子技术实验手册(07)——串联电路

本专栏是笔者主编教材&#xff08;图0所示&#xff09;的电子版&#xff0c;依托简易的元器件和仪表安排了30多个实验&#xff0c;主要面向经费不太充足的中高职院校。每个实验都安排了必不可少的【预习知识】&#xff0c;精心设计的【实验步骤】&#xff0c;全面丰富的【思考习…

海外仓系统如何让海外仓受益,WMS海外仓系统使用指南

随着跨境电商业务的快速发展&#xff0c;海外仓面临着需要更加高速运转的巨大挑战。 当海外仓出现因为手动作业导致效率低下&#xff0c;成本不断飙升或者出现库存管理问题的时候&#xff0c;意味着是时候引入一套合适的海外仓管理系统了。 对于寻求海外仓业务流程优化的企业…

2024年大数据领域的主流分布式计算框架有哪些

Apache Spark 适用场景 以批处理闻名&#xff0c;有专门用于机器学习的相关类库进行复杂的计算&#xff0c;有SparkSQL可以进行简单的交互式查询&#xff0c;也可以使用DataSet&#xff0c;RDD&#xff0c;DataFrame进行复杂的ETL操作。 关键词 处理数据量大批计算微批计算…

MATLAB中与直方图有关函数的关系

histogram Histogram plot画直方图 histcounts 直方图 bin 计数 histcounts是histogram的主要计算函数。 discretize 将数据划分为 bin 或类别 histogram2 画二元直方图 histcounts2 二元直方图 bin 计数 hist和histc过时了。替换不建议使用的 hist 和 histc 实例 hist → \r…

ByteTrack

1. 论文中伪代码表示的流程图 2. 简要版 此图源自&#xff1a; ByteTrack多目标跟踪原理&#xff0c;白老师人工智能学堂 3. 详细版 根据ByteTrack-CPP-ncnn代码的数据流画的较为详细的流程图&#xff1a; 4. ByteTrack-CPP-ncnn的UML类图 Reference ByteTrack多目标跟踪原…

[FFmpeg学习]windows环境sdl播放音频试验

参考资料&#xff1a; FFmpeg和SDL2播放mp4_sdl 播放mp4 声音-CSDN博客 SimplePlayer/SimplePlayer.c at master David1840/SimplePlayer GitHub 在前面的学习中&#xff0c;通过获得的AVFrame进行了播放画面&#xff0c; [FFmpeg学习]初级的SDL播放mp4测试-CSDN博客 播放…

npm安装不了解决办法

npm安装不了解决办法 这个错误是一个权限问题&#xff0c;导致 npm 无法在 D:\nodejs\node_modules 目录中创建必要的文件和文件夹。以下是一些解决方法&#xff1a; 1. 以管理员身份运行命令提示符 确保你以管理员身份运行命令提示符&#xff0c;然后再次尝试运行命令&#…

【计算机毕业设计】基于Springboot的毕业生实习与就业管理系统【源码+lw+部署文档】

包含论文源码的压缩包较大&#xff0c;请私信或者加我的绿色小软件获取 免责声明&#xff1a;资料部分来源于合法的互联网渠道收集和整理&#xff0c;部分自己学习积累成果&#xff0c;供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者…

JVM-GC-什么是垃圾

JVM-GC-什么是垃圾 前言 所谓垃圾其实是指&#xff0c;内存中没用的数据&#xff1b;没有任何引用指向这块内存&#xff0c;或者没有任何指针指向这块内存。没有的数据应该被清除&#xff0c;垃圾的处理其实是内存管理问题。 JVM虽然不直接遵循冯诺依曼计算机体系架构&#…

【深度学习】解析Vision Transformer (ViT): 从基础到实现与训练

之前介绍&#xff1a; https://qq742971636.blog.csdn.net/article/details/132061304 文章目录 背景实现代码示例解释 训练数据准备模型定义训练和评估总结 Vision Transformer&#xff08;ViT&#xff09;是一种基于transformer架构的视觉模型&#xff0c;它最初是由谷歌研究…

Java阻塞队列:ArrayBlockingQueue

Java阻塞队列&#xff1a;ArrayBlockingQueue ArrayBlockingQueue是Java中的一个阻塞队列&#xff08;Blocking Queue&#xff09;实现&#xff0c;它是线程安全的&#xff0c;并且基于数组实现。ArrayBlockingQueue常用于生产者-消费者模型&#xff0c;在这种模型中&#xff…

移动硬盘打不开怎么办?原因解析!

移动硬盘是一种方便携带、快速传输大量数据的存储设备。但有时我们会遇到这样的问题&#xff1a;插上电脑后&#xff0c;移动硬盘无法打开&#xff0c;出现各种错误提示。这时候我们该怎么办呢&#xff1f; 以下是一些可能导致移动硬盘打不开的原因及解决方法&#xff1a; 1.硬…