【python测试开发栈】帮你总结python random模块高频使用方法

随机数据在平时写python脚本时会经常被用到,比如随机生成0和1来控制逻辑、或者从列表中随机选择一个元素(其实抽奖程序也类似,就是从公司所有人中随机选择中奖用户)等等。这篇文章,就帮大家整理在python中random模块使用频率比较高的方法。

常用方法

为了方便大家理解和记忆,将方法进行了归类:

整数用函数

  • random.randrange(stop)

    • 随机返回[0, stop-1]之间的整数
  • random.randrange(start, stop, step)

    • 随机返回[start, stop-1]之间的整数。
    • step是递增计数,列一个公式你就明白了:(随机生成的值—start)%step=0
  • random.randint(start, stop)

    • 随机返回[start, stop]之间的整数
  • random.getrandbits(bits)

    • 用于随机对应bits位的整数
    • 随机返回[0, 2的bits位-1]之间的整数。

最后需要注意一点:上面的几个方法也是可以随机返回负数的,只需要参数传承负数就可以了。下面举个例子:

    # 0-2之间的整数
    print(random.randrange(3))
    # 1-299之间的整数,增长基数是5
    print(random.randrange(1, 300, 5))
    # 1-20之间的整数
    print(random.randint(1, 20))
    # -3到0之间的负数
    print(random.randint(-3, 0))
    # -3到-1之间的负数
    print(random.randrange(-3, 0))

    # 返回1~2-1之间的数字
    print(random.randrange(1))
    # 返回1~2的32次方-1之间的数字
    print(random.getrandbits(32))
    
    ## 返回值
    0
    1
    17
    0
    -1
    0
    3150567570

浮点型函数

  • random.random()

    • 随机返回[0,1)之间的浮点型数字
  • random.uniform(a, b)

    • 随机返回[a,b)之间的浮点数字

其实上面的两个方法也是符合数学随机分布模式的,为了方便大家理解,我这里单独列出来(区别于下面的 数学分布模式),方便大家在随机生成浮点型数字时,能少些犹豫。

# 1. 生成一个0-1之间随机浮点数
print(random.random())
# 2. 生成一个a-b之间的随机浮点数
print(random.uniform(10, 500))
print(random.uniform(40, 10))
  
  # 返回值
  0.7833926665736892
  150.2805875943869
  39.88236257691508

序列函数

顾名思义,序列函数随机的对象是列表。

  • random.choice(list)

    • 从list随机返回一个元素。
  • random.choices(list, weights,k)

    • 相当于random.choice()的升级版本。
    • weights是权重,针对list的每个元素都设置权重,来改变随机的概率。
    • k是返回几个元素。需要注意这个方法返回的是列表。
  • random.sample( population, k )

    • 3.6新增功能,用于从population列表中,返回随机无重复的抽样。
    • 前面提过抽奖,其实如果你想做一个抽奖系统,可以用这个方法改造。
  • random.shuffle(list)

    • 将list列表中的元素随机打乱。

对应的例子如下:

  # 从给定的序列中随机选择一个元素
  print(random.choice([1, 2, 3, 4, 5]))
  # random.choice的升级版本,还可以指定某个元素对应的权重
  print(random.choices([1, 2, 3, 4, 5], [10, 15, 45, 50, 60]))
  # 打乱某个序列,从python3.6新增的方法
  list_test = [2, 3, 4, 5, 6]
  random.shuffle(list_test)
  print(list_test)
  # 取样,从某个列表中,随机选择若干个元素
  print(random.sample([1, 2, 3, 4, 5, 6, 7], k=3))

  # 返回值
  3
  [5]
  [6, 3, 4, 2, 5]
  [6, 1, 7]
    

控制random的行为

  • random.seed( a=None, version=2 )

    • 设置random的种子值,怎么理解种子值呢?大家就想一句话就好了:"种瓜得瓜种豆得豆",所以一样的种子值,那么种出来的结果是一样的。
    • 假如现在随机两次,在调用random随机生成数据前,将random.seed设置成一样的值,则随机生成的值是一样的。
  • random.getstate()

    • 这个很简单,就是返回random生成器当前的状态的。
  • random.setstate(state)

    • 这个用于设置random的状态
    • setstate和getstate方法结合起来使用,可以用于恢复random的状态。

对应的例子如下:

 # 验证seed
 random.seed(1)
 print(random.randrange(1000))
 random.seed(1)
 print(random.randrange(1000))
 # 验证random的状态
 state = random.getstate()
 print(random.randrange(1000))
 print(random.randrange(1000))
 random.setstate(state)
 print(random.randrange(1000))
 
 # 返回结果
  137
  137
  582
  867
  582

数学分布模式

下面列的这些方法都是跟数学分布的概念有关系,说实话大学里学的相关的东西,都还给老师了,我查了资料想去理解不同的数学分布的知识,但是理解起来有些吃力,不过其实对我们使用的人来说,只需要理解其能根据一定规则,随机返回浮点数就可以了。

  • random.triangular(low, high, mode) 以三角分布的概率分布返回随机数
  • random.betavariate(alpha, beta) 以beta分布的概率分布返回0到1之间的随机数
  • random.expovariate() 以指数分布返回随机数
  • random.gammavariate(alpha, beta) 以gamma分布的概率分布返回随机数
  • random.gauss(mu, sigma) 以高斯分布的概率分布返回随机数
  • random.lognormvariate(mu, sigma) 以对数正态分布的概率分布返回随机数
  • random.normalvariate(mu, sigma) 和高斯分布类似
  • random.vonmisesvariate(mu, kappa) 以von Mises分布的概率分布返回随机数
  • random.paretovariate(alpha) 以Pareto( 帕累托)分布的概率分布返回随机数
  • random.weibullvariate(alpha, beta) 以Weibull(威尔布)分布的概率分布返回随机数

其实大家也不需要完全记住上面的方法,碰到具体的使用场景,知道有对应的方法,能查看文档找到就可以了。

总结

上面帮大家整理了random模块高频使用的方法,相对还是比较简单的,大家有任何的问题,欢迎留言。

关注【公众号:软件测试布道师】,回复【python】,即可获取【python自动化及编程实践资料】
Image placeholder
Fr00tL00ps511
未设置
  53人点赞

没有讨论,发表一下自己的看法吧

推荐文章
【python测试开发栈】帮你总结python time模块高频使用方法

在平时写python脚本时,时间是我们经常用到的数据,比如:时间戳、前端展示的对应格式的时间等,在python中主要有三个和时间处理相关的模块:time、datetime、calendar,这篇文章主

详解layui模块化与非模块化的不同引用方式

layui模块化与非模块化的不同引用方式:1、模块化与非模块化的区别layui中有许多不同的内置模块,如弹出层、日期与时间选择器、分页等不同模块。模块化:使用时加载相应的模块。非模块化:一次性加载所有

面向回家编程!GitHub标星两万的”Python抢票教程”,我们先帮你跑了一遍

盼望着,盼望着,春节的脚步近了,然而,每年到这个时候,最难的,莫过于一张回家的火车票。据悉,今年春运期间,全国铁路发送旅客人次同比将增长8.0%。达到4.4亿人次,2020年铁路春运自1月10日开始,

面试高频:如何访问 Redis 中的海量数据?

目录前言事故产生分析原因解决方案总结前言有时候我们需要知道线上的redis的使用情况,尤其需要知道一些前缀的key值,那我们怎么去查看呢事故产生因为我们的用户token缓存是采用了【user_toke

Python入门教程_2. 使用 Python 解释器

2.1.调用解释器 Python解释器通常安装在目标机器上的/usr/local/bin/python3.7目录下;把/usr/local/bin目录放进你的Unixshell的搜索路径里,确保它可以

MySQL Batched Key Access (BKA)原理和设置使用方法举例

MySQL5.6版本开始增加了提高表join性能的算法:BatchedKeyAccess(BKA)的新特性。BKA算法原理:将外层循环的行/结果集存入joinbuffer,内存循环的每一行数据与整个b

static使用方法

(1)在非静态的成员方法中技能访问非静态的成员也能访问静态的成员;(静态成员被所有对象共享)(2)在静态的成员方法中只能访问静态的成员不能访问非静态的成员(调用静态方法时,可能还没有创建对象)(3)只

一篇文章帮你了解 PHP 7.3 更新

PHP目前依旧是其它脚本语言强劲的竞争对手,这主要归功于其核心维护团队的快速更新。 自从PHP7.0发布以来,社区见证了许多新特性的诞生,极大地改进了开发者在项目中应用PHP的方式。提高PHP应用的性

Python 教程-了解Python

什么是Python Python能干什么? 有什么特点? 什么是Python 官方介绍: Python是一个易于学习、功能强大的编程语言。它拥有高效高级的数据结构和一种简单有效的面向对象编程的

Python 教程-Python 安装

在Windows上安装 访问https://www.python.org/downloads/并下载最新版本。在撰写时当前最新是3.8。在安装的时候和其他软件一样,无脑式下一步。需要注意的是如果在W

Python入门教程_3. Python 简介

在下面的例子中,输入和输出分别由大于号和句号提示符(>>>和...)标注:如果想重现这些例子,就要在解释器的提示符后,输入(提示符后面的)那些不包含提示符的代码行。需要注意的是在练习中遇到的从属提示符

Python入门教程_4. 深入 Python 流程控制

除了刚刚介绍的while语句,Python还有一些在其他语言中常见的控制流语句,并做了一些改动。 4.1.if语句 也许最著名的语句是if语句了。 例如: >>>x=int(input("Please

流畅的Python读书笔记 --- 第一章 Python数据模型

近期开始读“流畅的Python”这本书,想把自己的读书笔记分享给大家,希望能帮到也对这本书感兴趣但是没时间看的各位。(文章中大部分的话和图片摘录总结自“流畅的Python”一书,以及python官方网

Python入门教程_6. 模块

如果你从Python解释器退出然后再进入它,你所做的定义(函数和变量)都会消失。因此,如果你想写某些更长的程序,你最好使用一个文本编辑器来为解释器准备输入,然后以这个文件作为输入来运行程序。这也被称为

Python中的系统内置模块笔记

系统内置模块就是按照python解释器后,系统给提供的模块 在需要时可以导入后使用,例如:json,re,os。。。 序列化模块 序列化是指可以把python中的数据,以文本或二进制的方式进行转

Python time时间模块笔记

time时间模块 importtime ''' 概念: 1。时间戳:1574905882.6581771表示从1970年1月1日0时0分0秒到现在的一个秒数,目前可以计算到2

Python程序员进阶必备:从新手到高手的100个模块

在知乎和CSDN的圈子里,经常看到、听到一些python初学者说,学完基础语法后,不知道该学什么,学了也不知道怎么用,一脸的茫然。近日,CSDN的公众号推送了一篇博客,题目叫做《迷思:Python学到

对话OceanBase资深总监韩鸿源:数据库是技术能力,云是使用方式,两者不应是竞争关系

5月10日,在第十届中国数据库技术大会(DTCC2019)上,蚂蚁金服的金融级分布式关系数据库OceanBase2.0,在经过200名数据库领域三年以上的从业者投票和专业评委的评选下,高分荣获了“年度

Python 教程-代码测试

测试你的代码是非常重要的。 习惯于同时写测试用例和运行代码,现在被视为一个好的习惯。如果使用得当,这种方式将帮助你更加明确自己代码的功能,以及拥有更加可解耦的结构。 测试的通用规则: 测试单元应该集

【PHP学习】PHP入门学习 之 常量

PHP常量是一个简单值的标识符(名字)。如同其名称所暗示的,在脚本执行期间该值不能改变(除了所谓的魔术常量,它们其实不是常量)。PHP常量默认为大小写敏感。传统上常量标识符总是大写的。 PHP常量名

Python 使用 CTypes调用 C 方法

CTypes Python中的ctypes模块可能是Python调用C方法中最简单的一种。ctypes模块提供了和C语言兼容的数据类型和函数来加载dll文件,因此在调用时不需对源文件做任何的修改。也正

docker-compose 搭建 dnmp 总结

说明从零开始写一份dnmp环境的docker-compose.yml(由于redis比较常用,也包括进来)。总体设计示意图: 网络分配上,让要直接通讯的容器同属于一个网络,不直接通讯的容器属于不同的网

SWIG-Python中调用C代码的另一种方法

SWIG SWIG是SimplifiedWrapperandInterfaceGenerator的缩写。是Python中调用C代码的另一种方法。在这个方法中,开发人员必须编写一个额外的接口文件来作为S

零基础学测试 2 - 进一步理解 Laravel 的测试与 PHP Unit 的关系

细心的读者可以发现,上一讲中创建的用例继承的是PHPUnit的测试基类。

Testin用iTestin开启下一代测试,测试行业为什么要“重新来过”?

测试,其实并不是一个新话题。从有软件开发开始,就有测试,最早的测试就是找Bug。后来,自动化测试、云测试、众包测试的模式开始成为流行趋势,今天又迎来以智能化为核心的下一代测试。但是,“测试”从简单的软