工作中遇到一个问题,已知一个整数,需要随机的把它分成n个整数之和,同时要求这n个数的最大值和最小值必须介于一个范围。

import random
# 把一个整数num分成n个数之和,最大值和最小值分别在max_num和min_num之间。
def random_split(num0, n, min_num = -1, max_num = float('inf')):
if min_num*n > num0:
return "最小值设置错误!"
while True:
num = num0
result = []
try: # 还没分配至第n个数时,就已经分配完,因此出错。
for i in range(n-1):
a = random.randint(1, num - sum(result)) # 每次生成的随机数,是1到剩余值之间的数
result.append(a)
result.append(num - sum(result))
except:
continue # 遇到出错,就进入下一次循环
if min(result) >= min_num and max(result)< max_num :
random.shuffle(result) # 打乱一下顺序
return result # 判断一下是否符合条件,不满足条件就返回空列表。
if __name__ == "__main__":
num =145 # int(input("请输入一个整数:"))
n = 4 # int(input("请输入要分成的份数:"))
result = random_split(num, n, 10, num // 2) # 最小数不小于100,最大数不大于总和的一半。
print(result)
该篇文章介绍了如何使用Python编写一个函数random_split,将给定整数按照指定数量n分成若干个和,同时保证每个部分的数值在给定的最大值和最小值范围内。
1万+

被折叠的 条评论
为什么被折叠?



