Python 三个随机比例区间,生成随机数算法

  1. 区间总数为Total=18
  2. 将区间划分为三份:T1,T2,T3
  3. 每个区间都有最小、最大至范围,具体如下:

    T1 = [1/18,3/18]
    T2 = [10/18,16/18]
    T3 = [1/18,5/18]

    代码如下

def prorate(total):
    T1 = random.uniform((total*(1/18.00)),(total*(3/18.00)))
    T2 = random.uniform(((total-T1)*(10/18.00)),((total-T1)*(16/18.00)))
    T3 = random.uniform(((total-T1-T2)*(1/18.00)),((total-T1-T2)*(5/18.00)))
    return T1,T2,T3

这样打印出来的sum=T1+T2+T3,与初始值total误差很大。
请问有没有其他办法能实现这种随机比例划分区间,生成随机数,然后和值固定为total的方法

阅读 3.9k
1 个回答
def prorate(total):
    p1 = random.uniform(1/18.0, 3/18.0)
    p3 = random.uniform(1/18.0, 5/18.0)
    p2 = 1-p1-p3
    return total*p1,total*p2,total*p3

p1+p3 范围在2/18~8/18
p2 范围在 10/18~16/18

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题