随机小数,比如随机10个小数之和等于10.00,或者20个小数之和等于10.00

随机小数,比如随机10个小数之和等于10.00,或者20个小数之和等于10.00

import os
import random

def findSum(list1,sum,result):
if list1[0] == sum:
result.append(list1[0])
return True
else:
if len(list1) == 1:
return False

list1 = list1[1:]
sum = sum - list1[0]
result.append(list1[0])

if sum in list1:
    index = list1.index(sum)
    result.append(list1[index])
    return True

return findSum(list1,sum,result)

def getSum(sum):
list1 = []
list1.append(random.randint(0,10))
while True:
result = []
list1.append(random.randint(0,10))
if findSum(list1,sum,result):
return list1,result

if name == "main":
print(getSum(32))

用循环产生随机数,第一个随机数范围为0.01-9.90,然后10减去第一个随机数得到余数;第二个随机数范围为0.01-余数减去0.09,以此类推
确保每个随机数至少有0.01,最后一个数就是第9个数减去后的余数,确保和为10.00

import random
a = 1000
sum = 0
val = []
for i in range(1,10):
    r = random.randint(1,a-i+9)+1
    val.append(r/100.0)
    a = a - r
val.append(a/100.0)
print(val)