把一个整数随机分成n个数的和(对前文的改进)

Python3.8

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

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

主要改进思路:把这个整数看成一个线段,只需要随机生成n-1个点,插入其中,即可分成n段。

import random

# 随机分段函数。思路:把整个区间看成是一条线段。插入n-1个随机点,把线段分为n条线段。
def random_split(num, n):
    random_point = []  # 用此列表,接收n-1个此范围内的随机点。
    for i in range(n-1):
        random_point.append(random.randint(0, num))
    # 将随机点排序,并插入两个端点
    random_point.sort()
    random_point.insert(0,0)
    random_point.append(num)

    rtn = []  # 计算每两个点之间的长度
    for i in range(n):
        rtn.append(random_point[i+1]-random_point[i])
    return rtn


# 评估随机分段函数,主要判断每个元素的值是否在最小值和最大值的范围内。
def evaluate_random_split(random_split, min_num, max_num):
    for x in random_split:
        if x < min_num or x > max_num:
            return False
    return True


# 把前面两个子函数整合起来,生成的同时判断。
def split_num(num, n, min_num = 0, max_num = float('inf')):
    while True:
        split_list = random_split(num, n)
        if evaluate_random_split(split_list,min_num, max_num):
            break
    return split_list


if __name__ == "__main__":
    num = 1450
    n = 4
    l = split_num(num, n, 100, num//2)
    print(l)

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值