Python:生成 5 个具有固定总和的随机整数每个都有自己的范围

如何解决Python:生成 5 个具有固定总和的随机整数每个都有自己的范围

import random
#lets take kg(for Total) for better understanding

Total = random.randint(40,110) #For example Total=100   kg and this is 100%

Total = (a+b+c+d+e) 
 

Total 中的每个值都有自己的范围(以 % 为单位)。

首先:找到随机值(在占总数百分比的范围内。

我试过了(但 sum() 可以 > 或

a=random.randint(40,70)

b=random.randint(0,4)

c=random.randint(0,2)

d=random.randint(22,44)

e=random.randint(0,7)

第二:找到 a、b、c、d、e 的准确值(根据第一部分中 Total 的百分比)。我试过这个:

a=Total*random.randint(40,70)/100

b=Total*random.randint(0,4)/100

c=Total*random.randint(0,2)/100

d=Total*random.randint(22,44)/100

e=Total*random.randint(0,7)/100

代码不起作用。请帮忙

解决方法

试试这个:

import random

random_ints = []
sum_randoms = 0
upper_limit = 100
while sum(random_ints) < 100 and len(random_ints) < 5:
    random_int = random.randint(0,upper_limit)
    random_ints.append(random_int)
    upper_limit = 100 - sum(random_ints)

random_ints.append(100 - sum(random_ints))

print(random_ints)
,

我会先从最小的范围开始,然后不是随机选择最后一个,而是选择其他 4 和 100 之和的差值。由于不能保证随机数满足所有约束,您可能需要不断挑选,直到得到满意的答复。

def sum_to_100(range_list):
    if sum(lo for lo,hi in range_list) > 100 or sum(hi for lo,hi in range_list) < 100:
        raise ValueError('Solution is impossible within the constraints')
    ordered_ranges = sorted((lo,hi,i) for i,(lo,hi) in enumerate(range_list))
    n = len(range_list)
    solution = []
    while len(solution) != n or sum(solution) != 100:
        index = len(solution)
        lo,i = ordered_ranges[index]
        if index == n - 1:
            final = 100 - sum(solution)
            if lo <= final <= hi:
                solution.append(final)
            else:  # start over
                solution = []
        else:
            solution.append(random.randint(lo,hi))
    # restore the original order
    solution = [num for i,num in sorted(enumerate(solution),key=lambda x:ordered_ranges[x[0]][2])]
    return solution

>>> sum_to_100([(40,70),(0,4),2),(22,44),7)])
[59,3,1,32,5]
>>> sum_to_100([(40,7)])
[47,2,44,7]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?