Python разделить число на округленные числа - PullRequest
0 голосов
/ 08 октября 2018

Существует ли библиотека, которая может разбить число на несколько частей, но при этом удостоверится, что все части являются округленными числами?

Например, разделение 100 на 3 будет 33.33, но мне бы этого хотелосьокруглить и убедиться, что общая сумма также равна 100:

[34 33 33]

Ответы [ 4 ]

0 голосов
/ 08 октября 2018

Для этого вы можете использовать встроенную функцию divmod.Поскольку вся эта функция является простой арифметикой, я использую имена переменных из одной буквы.

def parts(a, b):
    q, r = divmod(a, b)
    return [q + 1] * r + [q] * (b - r)

Возвращаемое значение - это список с большими частями в начале.

>>> parts(100, 3)
[34, 33, 33]

>>> parts(100, 7)
[15, 15, 14, 14, 14, 14, 14]
0 голосов
/ 08 октября 2018

Ну, я думаю, это то, что вы хотели

number=100
div=3
#find the dividend of the number in this case 33

dividend=int(number/div)
#makea a list to store the numbers

listofrequirednumbers=[dividend]*div
#find the numbers remaining from 100 ie 100-33*3=1 one 
#one number should be added to the list 

for i in range(number%div):
    listofrequirednumbers[i]+=1

print(listofrequirednumbers)

Вывод

[34, 33, 33]
0 голосов
/ 08 октября 2018

Предполагая, что ваши входные данные являются целыми числами, другой подход может быть следующим:

def divNum(num, parts):
    #Compute integer division
    p = num/parts

    #Check if there's a reminder
    if p*parts == num:
        #No reminder, return the integers as they are
        return [p]*parts
    else:
        #Compute how much is the reminder
        missing = num - p*parts                  
        return [p+1]*missing + [p]*(parts-missing)

Редактировать: как предполагалось, нет необходимости проверять, равен ли остаток нулю или нет, поэтому мой код может быть упрощен как:

def divNum(num, parts):
    p = num/parts
    missing = num - p*parts                  
    return [p+1]*missing + [p]*(parts-missing)
0 голосов
/ 08 октября 2018

Я думаю, что вы можете реализовать это без библиотек.

1) Если число n делится на 3, то результат будет [n/3, n/3, n/3]

2) Если числоn = 3k + 1(k>=0), тогда вывод будет [(n/3)+1, n/3, n/3]

3) В противном случае вывод будет [(n/3)+1, (n/3)+1, n/3]

...