python разделить число на несколько не равных частей

Как разделить число на несколько не равных частей?

Например:
есть 10, надо разделить на 5 частей.
выводится [4, 1.5, 2.25, 2, 0.25]


Ответы (3 шт):

Автор решения: Ильнур Курбангалеев

Вот быстрый набросок, думаю разберётесь, как допилить для ваших целей.

import random


def random_split_number(number, split_count=4, digits=2):
    copy_number = number
    split_number_list = []
    for i in range(split_count - 1):
        divider = random.randint(2, number // 2)
        copy_number = round(copy_number / divider, digits)
        split_number_list.append(copy_number)

    last_split_number = number - sum(split_number_list)
    split_number_list.append(last_split_number)
    return split_number_list


result = random_split_number(10)
print(result, sum(result))
→ Ссылка
Автор решения: insolor

Без рандома: делим число на две части в какой-то пропорции (не на равные части, иначе две последние части будут равными), вторую часть еще на две части, и так пока не получится нужное количество частей.

def split_number(number, parts: int):
    result = []
    for i in range(parts-1):
        part = number / 4
        number = number - part
        result.append(part)
    
    result.append(number)
    return result


print(split_number(100, 7))

Вывод:

[25.0, 18.75, 14.0625, 10.546875, 7.91015625, 5.9326171875, 17.7978515625]

Но при отделении 1/4 последняя часть получается довольно большой, есть вероятность что она совпадет с какой-то из предыдущих частей.

В идеале нужно подобрать коэффициент так, чтобы две последние части были не равны, и были меньше предыдущих частей. Например, что-то такое:

part = number * 0.45

Результат будет такой:

[45.0, 24.75, 13.6125, 7.4868749999999995, 4.11778125, 2.2647796875, 2.7680640624999997]
→ Ссылка
Автор решения: MBo
import random
def divide(value, parts):
    res = [random.random() for _ in range(parts)]
    coef = value / sum(res)
    return [x*coef for x in res]

print(divide(10, 4))
→ Ссылка