Python 如何制作一个函数,使一个输出占20%,另一个输出占10%,另一个输出占70%的时间?

Python 如何制作一个函数,使一个输出占20%,另一个输出占10%,另一个输出占70%的时间?,python,Python,我试图 import random from statistics import mode numlist = [] for i in range(6): numlist.append(random.randint(1, 4)) for i in range(3): numlist.append(random.randint(1, 3)) for i in range(1): numlist.append(random.randint(1, 2)) print(mod

我试图

import random
from statistics import mode

numlist = []
for i in range(6):
    numlist.append(random.randint(1, 4))
for i in range(3):
    numlist.append(random.randint(1, 3))
for i in range(1):
    numlist.append(random.randint(1, 2))

print(mode(numlist))
我试图在70%的时间里给出一个数字,在20%的时间里给出另一个数字,在10%的时间里给出另一个数字。 然而,算出数学,50%,30%,20%的两端分别是随机的。随机的(0,9)
i = random.random(0, 9)
if i <= 1:
    <10% of the time>
elif i <= 3:
    <20% of the time>
else:
    <70% of the time>

如果我你是在用概率场p重新创造选择

x = np.random.choice([2,3,4], 1, p=[0.2, 0.1, 0.7])
random.randint(1, x)
使用范围(6)时,它返回0,1,2,3,4,5。您的代码返回一个60-30-10列表

import random
from statistics import mode

numlist = []
for i in range(7):
    numlist.append(random.randint(1, 4))
for i in range(2):
    numlist.append(random.randint(1, 3))
for i in range(1):
    numlist.append(random.randint(1, 2))
在这里,它被包装在一个函数中,该函数允许您确定要在输出中包含多少年

import random

# stt for seven-twenty-ten
def stt_split(n=1):
    # returns lists with lengths that are multiples of ten
    numlist = []
    for decades in range(n):
        for i in range(7):
            numlist.append(random.randint(1, 4))
        for i in range(2):
            numlist.append(random.randint(1, 3))
        for i in range(1):
            numlist.append(random.randint(1, 2))
    return numlist

alice = stt_split()
print(alice) # 10 values in a list

bob = stt_split(4)
print(bob) # 40 values in a list
另一方面,如果您不希望返回具有集合分布的列表,但希望函数返回由随机选择的函数计算的值,则可以尝试以下操作

import random

# stt for seven-twenty-ten
def stt_dice(n=1):
    # returns lists of random ints with length n
    numlist = []
    for decades in range(n):
        x = random.choices([2, 3, 4], [2, 1, 7])[0]    
        numlist.append(random.randint(1, x))
    return numlist

alice = stt_dice()
print(alice) # 1 value in a list

bob = stt_dice(10)
print(bob) # 10 values in a list

几乎。你的评论刚刚结束。(我指的是中的部分)我想你需要
来获得randint(0,9)你实际上需要,
random.random(0,9)
会引发一个
TypeError:random()不带参数(给定2个)
。也许你的意思是随机的。均匀的(0,9)
。很好的捕获,这是正确的,不需要涉及numpy
lambda:random.choices([2,3,4],[0.2,0.1,0.7])
与numpy的文档相反,
random.choices
接受一个权重数组,其中概率是单位和的(近似)归一化。所以,
random.chooses([2,3,4],[2,1,7])
是等价的。