修改Python随机数脚本:确保生成159个符合约束的指定总和数值
生成指定数量且总和精准的随机数解决方案
原脚本的问题在于生成过程中一旦当前总和超过目标值就删除已生成的数,导致最终生成的数量不足159个,同时最后补的数可能超出[0.04, 4.5]的范围。以下是修改后的方案,确保生成159个符合范围要求的随机数且总和精准匹配298.51:
import random target_total = 298.51 total_numbers = 159 min_value = 0.04 max_value = 4.50 random_numbers = [] remaining_sum = target_total for i in range(total_numbers - 1): # 计算还需要生成的数字数量 remaining_count = total_numbers - i - 1 # 计算当前数字的合法范围:确保剩余数字能凑够剩余总和且都在范围内 current_min = max(min_value, remaining_sum - remaining_count * max_value) current_max = min(max_value, remaining_sum - remaining_count * min_value) # 生成两位小数的随机数 num = round(random.uniform(current_min, current_max), 2) random_numbers.append(num) # 更新剩余需要凑的总和 remaining_sum = round(remaining_sum - num, 2) # 最后一个数直接用剩余的总和,确保精准匹配目标 last_num = round(remaining_sum, 2) random_numbers.append(last_num) # 输出结果 for idx, num in enumerate(random_numbers, start=1): print(f"Row {idx}: {num}") print("Total sum:", round(sum(random_numbers), 2))
关键逻辑说明
- 动态限制随机数范围:每次生成随机数前,根据剩余需要生成的数量和剩余总和,计算当前数的最小和最大合法值。比如当前数不能太小,否则剩下的数全取最大值也达不到剩余总和;也不能太大,否则剩下的数全取最小值也会超过剩余总和。
- 精准控制总和:每次生成后更新剩余总和,最后一个数直接使用剩余的总和,确保最终总和完全等于目标值298.51。
- 保证数量达标:循环执行
total_numbers - 1次,最后再添加一个数,确保总数正好是159个。
内容的提问来源于stack exchange,提问作者Alfonzo
相关产品推荐
相关产品推荐

