当前位置: 首页 > news >正文

python之random模块

python之random模块

文章目录

  • python之random模块
    • 引入
      • 什么是 random 模块
    • 一、random 模块七种基本用法介绍
      • 1.random( )
      • 2.uniform( )
      • 3.randint( )
      • 4.randrange( )
      • 5.choice( )
      • 6.sample( )
      • 7.shuffle( )
    • 二、随机生成验证码
      • 1.储备知识
      • 2.生成指定位数的验证码, 含大小写英文和数字
      • 3.优化版本

引入

什么是 random 模块

  • random 模块是 Python的内置模块
  • random 主要用来生成随机数

一、random 模块七种基本用法介绍

1.random( )

  • 只能生成大于 0 且小于 1 之间的小数 (float类型)

    import random
    print(random.random())  # 0.445551017368668
    print(random.random())  # 0.09191193089709782
    

2.uniform( )

  • 生成指定数值之间的小数 (float)
#由random.random()的扩展因为其不能指定参数。而random.uniform(1, 3)指定了一到三之间的浮点数, (注意: 返回浮点数。不包括一和三)
import random

print(random.uniform(1,3))  # 1.8079224989194222
print(random.uniform(1,3))  # 2.2382904648981112

3.randint( )

  • 生成指定数值之间的整数 (int类型)
import random

# 生成大于等于 2 且小于等于 5 之间的整数 (包括2,包括5, 表示的是开区间)
print(random.randint(2,5))  # 3
print(random.randint(2,5))  # 2
print(random.randint(2,5))  # 3

4.randrange( )

  • 生成指定数值之间的整数 (顾头不顾尾)
import random

# 生成大于等于 2 且小于 5 之间的整数(顾头不顾尾和range一样取不到5)
print(random.randrange(2,5))  # 4
print(random.randrange(2,5))  # 3
print(random.randrange(2,5))  # 4

5.choice( )

  • 从你指定的列表里面随机取出一个值
import random

res = random.choice([1,'23',[4,5]])
print(res,type(res))
'''多次输出后的结果
23     <class 'str'>
1      <class 'int'>
[4, 5] <class 'list'>
'''

6.sample( )

  • 从你指定的列表里面随机取出你指定个数的元素组合
import random

res = random.sample([1,2,3,'23',[4,5]],2)  # 从列表里随机取出 2 个元素组合
print(res,type(res))  # [[4, 5], '23'] <class 'list'> (存放在一个列表里)

res = random.sample([1,2,3,'23',[4,5]],3)  # # 从列表里随机取出 3 个元素组合
print(res,type(res))  # ['23', 1, 2] <class 'list'>

7.shuffle( )

  • 将列表里面元素的顺序打乱, 相当于洗牌 (只能传入列表)
import random

item = [1,2,3,4,5]
random.shuffle(item) # 随机打乱item这个列表中元素的顺序。
print(item)  # [4, 5, 1, 2, 3]

二、随机生成验证码

1.储备知识

  • 小写字母 a-z 对应的十进制是 97-122
  • 大写字母 A-Z 对应的十进制是 65-90
  • chr(num) : 将传入的一个十进制转换成对应的 ASCII 码表中的一个字符
  • ord(‘A-z’) : 将传入的一个 ASCII 码中的一个字符转换成对应的十进制

2.生成指定位数的验证码, 含大小写英文和数字

import random

def auth_code(count=6):
    res = ''
    for i in range(count):
        lower = chr(random.randint(97,122))  # 随机小写字母
        upper = chr(random.randint(65,90))   # 随机大写字母
        num = str(random.randint(0,9))       # 随机数字
        res2 = random.choice([lower,upper,num])  # 三者之间随机取走一个
        res += res2  # 字符拼接
    return res

print(auth_code(6))  # tmvp60
print(auth_code(6))  # Bl7h51
print(auth_code(6))  # Y9xa33
print(auth_code(6))  # 787zR3

3.优化版本

  • 上一个版本是字符拼接, 会重复新建内存空间, 造成一定的资源占用
  • 优化版本使用列表来接收值, 内存空间不重复申请, 再使用 join 将列表拼成字符串
import random

def auth_code(count=6):
    l = []
    for i in range(count):
        lower = chr(random.randint(97, 122))
        upper = chr(random.randint(65,90))
        num = str(random.randint(0,9))
        res2 = random.choice([lower,upper,num])
        l.append(res2)
    return "".join(l)

print(auth_code())  # 6O22yl
print(auth_code())  # g24X4u
print(auth_code())  # 0V220P
print(auth_code())  # 9sgnO8

相关文章:

  • python之os模块
  • shutil模块
  • shelve 模块
  • typing模块
  • 压缩zipfile与解压缩tarfile模块
  • pyecharts 模块的简单使用
  • hashlib 与 hmac 模块
  • python之包
  • python之logging模块详解
  • logging模块基本介绍及使用
  • 面向对象的由来
  • python之面向对象编程
  • 类的封装
  • 类的多继承下的菱形问题
  • 类的派生
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • 【技术性】Search知识
  • input实现文字超出省略号功能
  • JS变量作用域
  • laravel with 查询列表限制条数
  • php中curl和soap方式请求服务超时问题
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • Web设计流程优化:网页效果图设计新思路
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 基于 Babel 的 npm 包最小化设置
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 技术发展面试
  • 面试总结JavaScript篇
  • 前端设计模式
  • 通过npm或yarn自动生成vue组件
  • 温故知新之javascript面向对象
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • 《码出高效》学习笔记与书中错误记录
  • ionic异常记录
  • Semaphore
  • 阿里云服务器如何修改远程端口?
  • $L^p$ 调和函数恒为零
  • (libusb) usb口自动刷新
  • (solr系列:一)使用tomcat部署solr服务
  • (十八)SpringBoot之发送QQ邮件
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (转)socket Aio demo
  • (转载)深入super,看Python如何解决钻石继承难题
  • .java 9 找不到符号_java找不到符号
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .Net Core缓存组件(MemoryCache)源码解析
  • .Net Memory Profiler的使用举例
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .net 后台导出excel ,word
  • .NET/C# 的字符串暂存池
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • .NET中的Exception处理(C#)
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • [ C++ ] STL priority_queue(优先级队列)使用及其底层模拟实现,容器适配器,deque(双端队列)原理了解