限定条件:

  • 生成随机数的和为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个随机数,其和为给定的数

更多推荐

限定条件的随机数生成