该数字产生的时间百分比

时间:2018-07-06 00:01:01

标签: python random probability

所以我有一个程序可以在2048年生成数字。现在有2或4个生成的机会是50/50。

nlist = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
def spawnnum():
    x = []
    for i in range(0, 16):
        if nlist[i] == 0:
            x.append(nlist[i])
    y = random.randint(1, len(x))
    count = 0
    for j in range(len(nlist)):
        if nlist[j] == 0:
            count += 1
        if count == y:
            nlist[j] = 2 * random.randint(1, 2)
            break

有没有一种制作程序的方法,因此产生4次的机会是10%的时间,产生2次的机会是90%的时间。顺便说一句,该程序实际产生数字的地方是nlist[j] = 2 * random.randint(1, 2)(倒数第二行)。

2 个答案:

答案 0 :(得分:2)

鉴于您只能简单地选择两个选项:

if random.random() <= 0.1:
    nlist[j] = 4
else: 
    nlist[j] = 2

您可以执行与单个表达式类似的操作,但基于可读性我不建议这样做:

nlist[j] = 2 * ((random.random() <= 0.1) + 1)

答案 1 :(得分:1)

最简单的方法是:

            nlist[j] = random.choice((4, 2, 2, 2, 2, 2, 2, 2, 2, 2))