我想有一个程序调用一个随机的funtcion,它给定0,1,2作为定义的次数,并计算每次运行的结果。 使用random.randrange(0,3)我得到一个相等的分布。
如何以下列概率获得分发。
0:0.4633
1:0.3147
2:0.2218
这些数字是我在不同函数中计算的变量,它们在我再次运行函数后会发生变化。
import random
zeros = 0
ones = 0
twos = 0
for i in range(10000):
a = random.randrange(0,3)
if a == 0:
zeros = zeros + 1
if a == 1:
ones = ones + 1
if a == 2:
twos = twos + 1
print "zeros = ", zeros
print "ones = ", ones
print "twos = ", twos
zeros = 3345
ones = 3326
twos = 3329
通缉:
zeros = 4633
ones = 3147
twos = 2218
提前谢谢你:)
答案 0 :(得分:1)
增加随机化的范围,并为每个结果分配更多或更少的结果,以改变偏见。
a = random.randrange(0,9998)
if 0<=a<=4632:
zeros = zeros + 1
if 4643<=a<=7790:
ones = ones + 1
if 7791<=a<=9998:
twos = twos + 1
答案 1 :(得分:0)
def get_my_rand()
r = random.randrange(1,10000)
if r <= 4633:
return 0
elif r <= 4633 + 3147:
return 1
else:
return 2
答案 2 :(得分:0)
也许我不理解这个问题,但是如果你有你想要的发行版,那么你可以创建一个与该发行版匹配的列表:
N = 10
zeros = int(N * 0.4633)
ones = int(N * 0.3147)
twos = N - zeros - ones
l = [0] * zeros + [1] * ones + [2] * twos
如果您希望它看起来更“自然”,您可以随机播放列表:D
random.shuffle(l)
将为您提供一份包含您的发行版的精彩列表:
[1,0,0,2,1,0,1,0,2,2]