整数分割为多个指定范围的随机数字

71 阅读1分钟

代码

import random, math
from typing import Dict, Union, List


def split_number(target: int, split_count: int = 1, min_value: int = 1, max_value: int = math.inf) -> Dict[str, Union[str, bool, List[int]]]:
	"""将整数分割成多个整数"""
	if not min_value <= target // split_count <= max_value:
		return {
			"success": False,
			"error": "不满足min_value<=target//split_count<=max_value"
		}

	remainder = target  # 待分割值
	parts = []  # 存放分割结果
	for i in range(split_count - 1, 0, -1):
		current_max = min(remainder - i * min_value, max_value)  # remainder - i * min_value 计算最大可分割量
		current_min = max(remainder - i * max_value, min_value)  # remainder - i * max_value 计算最小可分割量
		left_len = remainder // (i + 1) - current_min
		right_len = current_max - remainder // (i + 1)
		# 分割点左右两侧长度相等
		if left_len < right_len:
			section = (current_min, remainder // (i + 1) + left_len)
		elif left_len > right_len:
			section = (remainder // (i + 1) - right_len, current_max)
		else:
			section = (current_min, current_max)
		val = random.randint(*section)
		parts.append(val)
		remainder -= val  # 分割
	return {
		"success": True,
		"data": parts + [remainder]
	}

运行结果

在这里插入图片描述

![在这里插入图片描述](i-blog.csdnimg.cn/direct/c1b5… 在这里插入图片描述