繁体   English   中英

Python将数字拆分为四舍五入

[英]python split number into rounded numbers

是否有一个库可以将数字分成多个部分,但要确保所有部分都是四舍五入的数字?

例如,将100拆分为3将是33.33 ,但是我希望将其取整并确保总和也保持为100:

[34 33 33]

您可以为此使用内置函数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]

好吧,我想这就是你想要的

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]

假设您的输入是整数,则另一种方法可能是:

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)

我认为您可以在没有库的情况下实现它。

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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM