python 从源码讲解random模块

目录1.random.random()2.random.uniform()3.random.randrange()4.random.randint()5.random.choice()6.random.shuffle()7.random.sample()我们先来看一看random模块中有多少个方法而此文章要讲解的方法主要有如下几个:1.random.random()2.random.uniform()3.random.randrange()4.ra.
摘要由CSDN通过智能技术生成

目录

1.random.random()

2.random.uniform() 

3.random.randrange()

4.random.randint()

5.random.choice()

6.random.shuffle()

7.random.sample()


我们先来看一看random模块中有多少个方法

而此文章要讲解的方法主要有如下几个:

1.random.random()

2.random.uniform()

3.random.randrange()

4.random.randint()

5.random.choice()

6.random.shuffle()

7.random.sample()

1.random.random()

简介:

random.random()

作用:

用于生成一个0到1的随机浮点数

注意:

生成的浮点数的范围为0<= n < 1.0

源码:

    def random(self):
        """Get the next random number in the range [0.0, 1.0)."""
        return (int.from_bytes(_urandom(7), 'big') >> 3) * RECIP_BPF

这一句话是返回从区间[0,1)的随机浮点数

我们设计一段代码:

import random
if __name__ == '__main__':
    print(random.random())

控制台输出:

2.random.uniform() 

random.unifor(a, b)

作用:

用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限。

注意:

如果a > b,则生成的随机数n: b <= n <= a。如果 a <b, 则 a <= n <= b

源码:

    def uniform(self, a, b):
        "Get a random number in the range [a, b) or [a, b] depending on rounding."
        return a + (b - a) * self.random()

我们发现这个方法有调用了random()方法,我们知道random()方法返回的是[0,1)的随机浮点数,那么uniform()方法,因为a不一定严格小于b,a也可能等于b,如果a=b,那么返回的就是a,又因为a也可以大于b,所以返回值范围为[a,b],为左闭右闭区间

我们设计一段代码:

import random
if __name__ == '__main__':
    print(random.uniform(2,4))

控制台输出:

3.random.randrange()

简介:

random.randrange(start, stop, step)

作用:

从指定范围内,按指定基数递增的集合中获取一个随机数

注意:

该方法返回的随机值是左闭右开的,也就是取不到stop的值

举例:

random.randrange(10, 30, 2),结果相当于从[10, 12, 14, 16, ... 26, 28]序列中获取一个随机数。

查看源码:

    def randrange(self, start, stop=None, step=1):
        """Choose a random item from range(start, stop[, step]).

        This fixes the problem with randint() which includes the
        endpoint; in Python this is usually not what you want.

        """

        # This code is a bit messy to make it fast for the
        # common case while still doing adequate error checking.
        istart = int(start)
        if istart != start:
            raise ValueError("non-integer arg 1 for randrange()")
        if stop is None:
            if istart > 0:
                return self._randbelow(istart)
            raise ValueError("empty range for randrange()")

        # stop argument supplied.
        istop = int(stop)
        if istop != stop:
            raise ValueError("non-integer stop for randrange()")
        width = istop - istart
        if step == 1 and width > 0:
            return istart + self._randbelow(width)
        if step == 1:
            raise ValueError("empty range for randrange() (%d, %d, %d)" % (istart, istop, width))

        # Non-unit step argument supplied.
        istep = int(step)
        if istep != step:
            raise ValueError("non-integer step for randrange()")
       
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

再让我学一会吧!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值