- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我要求我的学生编写一个 Python 程序,其中将一对 6 面骰子掷 100 次的结果存储在一个列表中,然后绘制成直方图。
我一直认为 random.choice(1,2,3,4,5,6)
不如 random.randint(1,6)
,直到我注意到使用 random.choice
的学生的直方图更好地反射(reflect)了预期结果。例如,在几乎所有使用 random.randint(1,6)
的学生的直方图中,掷出 12 (6+6) 的概率异常高。有谁知道发生了什么事?
最佳答案
Almost all module functions depend on the basic function random(), which generates a random float uniformly in the semi-open range [0.0, 1.0). Python uses the Mersenne Twister as the core generator. It produces 53-bit precision floats and has a period of 2**19937-1. The underlying implementation in C is both fast and threadsafe. The Mersenne Twister is one of the most extensively tested random number generators in existence. However, being completely deterministic, it is not suitable for all purposes, and is completely unsuitable for cryptographic purposes.
所以结果应该没有任何真正的区别。但是,我不同意 random.choice()
不如 randint()
,事实上,随机选择在生成随机数方面实际上更快。当您查看源代码时:
def randint(self, a, b):
return self.randrange(a, b+1)
def randrange(self, start, stop=None, step=1, _int=int, _maxwidth=1L<<BPF):
istart = _int(start)
if istart != start:
# not executed
if stop is None:
# not executed
istop = _int(stop)
if istop != stop:
# not executed
width = istop - istart
if step == 1 and width > 0:
if width >= _maxwidth:
# not executed
return _int(istart + _int(self.random()*width))
对于choice()
:
def choice(self, seq):
return seq[int(self.random() * len(seq))]
您可以看到 randint()
有使用 randrange()
的额外开销
编辑 正如@abarnert 在评论中指出的那样,这里几乎没有性能差异,randint(1,6)
是一个清晰且表示掷骰子的直观方式
我都运行了 10000 卷,没有看到任何倾斜,所以您的输入样本可能太小了:
下面是一个骰子掷两次的分布,也很均匀:
我从这两个有用的答案中借用了一些内容:Performance of choice vs randint Is Pythons random.randint statistically random? , 有助于进一步阅读。
关于python random.randint 与 random.choice : different outcomes usingsame values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49243597/
我有一个关于两种方法的简单而广泛的问题: scipy.stats.randint 和 numpy.random.randint 在阅读了这两种方法的 API 之后,我对何时最好使用每种方法感到有点困惑
在Python编程中,随机数的生成是一项常见的任务。random.randint()函数是Python中生成随机整数的常用函数之一。该函数可以生成指定范围内的随机整数,为数据处理、模拟实验和游戏开发等
对于这个项目,我需要在随机点绘制 400 个不同的正方形,并且彼此之间至少相距 5 个像素。目前,框大多绘制在窗口底部,并且在程序卡住之前只绘制了大约一半。我咨询了我的教授,他们被难住了。 #Impo
from random import randint number_of_trials = 100 range_of_random_numbers = 1000 for each in number_
from random import randint 这是我用来导入 Random 模块的代码。当我运行代码时,它会导入一个名为 random.py 的用于测试代码的文件。这导致了各种错误,所以我在回
我是 python 的新手,我想知道如何使代码重复 random.randint 部分 100 次。 #head's or tail's print("you filp a coin it lands
我想在 a 和 b 之间选择一个随机整数,包括在内。 我知道 3 种方法。然而,他们的表现似乎非常违反直觉: import timeit t1 = timeit.timeit("n=random.ra
我正在用 Python 中的随机库来模拟我工作的项目,我发现自己处于一个非常奇怪的位置。 假设我们在 Python 中有以下代码: from random import randint import
我想在 a 之间选择一个随机整数和b (两者均包含),统计权重为c . c是 a 之间的值和b . 应用权重因子最有效的方法是 c到 random.randint? 我得到的最接近的是this问题,但
我想在 a 之间选择一个随机整数和b (两者均包含),统计权重为c . c是 a 之间的值和b . 应用权重因子最有效的方法是 c到 random.randint? 我得到的最接近的是this问题,但
我有一个生成sms_token的函数。它不能与数据库中现有的重复。然而,token的空间可能不够大,那么新的token可能会发生冲突。 Python 3.7.0 from random import
我正在努力在 Python 2.7 中导入random。我想让这段代码生成两张随机卡。当前代码不会生成随机卡。如果我请求卡片 (9,11),代码会生成总共 19 张卡片 (9,J)。输出没有任何随机性
我正在尝试用 python 编写简单的角色创建页面。我想要重新滚动统计信息的选项。问题是,刷新页面后,统计数据保持不变。下面是我的代码: View .py from my import Charac
我正在尝试运行一个简单的程序,其中我试图在循环中运行 random.randint() 以更新字典值,但它似乎无法正常工作。它似乎总是产生相同的值(value)。 到目前为止的程序如下。我正在尝试创建
我目前正在尝试在添加下一个项目之前将一个随机项目(使用 randint)从一个列表附加到另一个列表。好吧,这可能是一种奇怪的表达方式,但我不确定如何描述它 - 我很抱歉。因此,这里是我当前的相关代码和
在 python 控制台中我可以运行: from random import randint 但是当我运行时出现错误: import random.randint 错误说: ModuleNotFoun
我有这个游戏,您需要对列表中发送的 5 个随机表情符号使用react。问题在于,有时 random.randint() 会吐出相同的表情符号两次,因此不可能用相同的表情符号对同一消息做出两次 reac
我想生成 0-9 之间的随机整数(包括两端),但我想确保它不会经常连续生成相同的数字。我计划使用 random 模块中的 randint 函数。但我不确定它是否会派上用场。 random.randin
所以我生成了一个带有 numpy 命名高度的随机列表... heights = random.randint(10, size=random.randint(20)) 我将此列表用于测试目的,但我有一
我有一个名为:cars 的专栏并想创建另一个名为 persons 的使用 random.randint()我有: dat['persons']=np.random.randint(1,5,len(da
我是一名优秀的程序员,十分优秀!