随机选择一个5位数字和单独挑选每个数字有什么区别?

时间:2016-05-12 00:53:40

标签: python language-agnostic probability

使用random.randrange分别挑选5位数字之间是否有任何区别,如下所示:

a=random.randrange(0,10)
b=random.randrange(0,10)
c=random.randrange(0,10)
d=random.randrange(0,10)
e=random.randrange(0,10)
print (a,b,c,d,e)

...并立即选择5位数字,如下所示:

x=random.randrange(0, 100000)
print (x)  

2 个答案:

答案 0 :(得分:1)

是,不,不。

是:概率乘以,因此数字序列具有相同的概率

概率(a)和概率(b)=概率(a)*概率(b)

由于每个数字的出现概率为0.1,因此按顺序排列的两个特定数字的概率为0.1 ** 2或0.01,即0到99之间的数字的概率。

否:你的第二个号码有拼写错误。

第二种形式只有四位数字;你可能意味着randrange(0,100000)

否:输出不一样

第二种形式不会打印前导数字;你可以打印(“%05d”%x)来获取所有数字。此外,第一个表单在输出中有空格,因此您可以改为打印(“%d%d%d%d%d”%(a,b,c,d,e))。

答案 1 :(得分:1)

任何随机数发生器的差异(如果有的话 - 参见随机性部分)与一次数字方法的效用和可维护性缺点相比是微不足道的。

对于初学者来说,生成每个数字需要更多代码来处理完全正常的调用,例如randrange(0, 1024)randrange(0, 2**32),其中的数字以相同的概率出现。例如,在闭合闭合范围[0,1023](需要4位数)上,四个中的第一个数字从不可以是0或1以外的任何数字。最后一个数字略微更可能成为0,1,2或3.等等。

试图覆盖所有基础会迅速使代码变得更慢,更容易出错,并且比现在更脆弱。 (你在发布这个问题时遇到的令人讨厌的小细节的数量应该会让你知道在这条道路上的更远的地方。)

...所有的悲伤都在之前你考虑random.randrange处理非零start值,step参数和否定参数的容易程度

随机性问题

如果你的RNG是好的,你的替代方法应该产生"同样随机的"结果(假设您已经处理了我上面提到的所有问题)。 然而,如果您的RNG存在偏差,那么一次数字方法可能会增加其对您输出的影响。

出于演示目的,假设您的荒谬偏向RNG有一个一个一个错误,因此它永远不会产生给定范围的最后一个值:

  • 电话randrange(0, 2**32)永远不会产生2**32 - 1(4,294,967,295),但剩余的40亿以上的价值将出现在他们预期的概率非常接近。它在数百万次调用中的输出很难与工作的伪随机数发生器区分开来。

  • 单独生成相同的随机数的十位数将使每个数字受到同一个逐个错误的影响,从而产生十位输出,完全由数字[0,8],没有9s ...... 永远。这是非常随机的#34;而不是一次产生整数。

相反,即使请求的范围非常小,一次数字方法永远不会比支持它的RNG 更好。这种方法可能会放大任何RNG偏差,或只是重复这种偏见,但它永远不会减少它。