限定条件的随机数生成

限定条件:

  • 生成随机数的和为N。
  • 生成P组。
  • 每个随机数的取值范围是1-8。
def generate_images_of_page(img_num, page_num, sigma=1):
    list = []
    num = page_num #剩余Page数
    for i in range(0, page_num):
        if num != 1: #除了最后一个随机数,其余随机数的生成规则
            mu = int(img_num / num)
            #sigma = 4  #设定方差sigma为一个常数
            isnotpos = True
            while isnotpos: # 循环,当生成的随机数小于2大于8或者剩余总额小于2大于8时时重新生成随机数
                #a = random.normalvariate(mu, sigma)
                #a = random.randint(2, mu * 2 - 1) # 产生2-8之间的数
                a = random.randint(1, mu * 2 - 1) # 产生1-8之间的数
                if a > 8:
                    a = a % 8
                #if 2 <= a <= 8: # 产生2-8之间的数
                #    if (num - 1) * 2 <= (img_num - a) <= (num - 1) * 8:
                if 1 <= a <=8:  # 产生1-8之间的数
                    if (num - 1) * 1 <= (img_num - a) <= (num - 1) * 8:
                        isnotpos = False
            a = int(a)
            list.append(a)
            img_num = img_num - a # 计算剩余总张数
            num = num - 1 # 剩余p数

        else:
            a = img_num
            list.append(a)
    print(list, sum(list))

    return list

参考资料
python 生成n个随机数,其和为给定的数

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值