是否有一个库可以将数字分成多个部分,但要确保所有部分都是四舍五入的数字?
例如,将100分成3将是33.33
,但我希望将其四舍五入,并确保总和也保持为100:
[34 33 33]
答案 0 :(得分:8)
您可以为此使用内置函数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]
答案 1 :(得分:2)
好吧,我认为这就是您想要的
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]
答案 2 :(得分:1)
假设您的输入是整数,则另一种方法可能是:
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)
答案 3 :(得分:0)
我认为您可以在没有库的情况下实现它。
1)如果将数字Form1.vb:4
除以3,则输出将为n
2)如果数字为[n/3, n/3, n/3]
,则输出为n = 3k + 1(k>=0)
3)否则,输出将为[(n/3)+1, n/3, n/3]