这是否真的产生了一个随机的foating点数?(蟒蛇)

use*_*205 5 python random

有关Python课程的介绍,我正在考虑在Python中生成一个随机浮点数,我看到了一个标准的推荐代码

import random

lower = 5
upper = 10
range_width = upper - lower
x = random.random() * range_width + lower
Run Code Online (Sandbox Code Playgroud)

对于从5到10但不包括10的随机浮点.

在我看来,通过以下方式可以实现同样的效果:

import random

x = random.randrange(5, 10) + random.random()
Run Code Online (Sandbox Code Playgroud)

因为那将给出5,6,7,8或9的整数,然后用小数点来表示它.

我的问题是,第二个代码仍会提供完全均匀的概率分布,还是不能保持第一个版本的完全随机性?

Val*_*tin 6

根据文件,然后是random()的确是一个统一的分布.

random(),在半开放范围[0.0,1.0]内均匀生成随机浮点数.Python使用Mersenne Twister作为核心生成器.

所以两个代码示例都应该没问题.要缩短代码,您可以同样:

random.uniform(5, 10)
Run Code Online (Sandbox Code Playgroud)

请注意,uniform(a, b)仅仅是a + (b - a) * random()如此相同,你的第一个例子.

第二个示例取决于您正在使用的Python版本.在3.2之前randrange()可能会产生略微不均匀的分布.