如何将一个整数拆分为不同变量中几乎相等的数量



我想知道如何将任何给定的整数划分为任何给定数量的变量,同时确保变量中值的总和不超过初始整数值。

例如,如果我只做以下操作,我想将5划分为3个不同的变量:

var1 = 5 / 3
var2 = 5 / 3
var3 = 5 / 3

我会得到每个值等于1.67(四舍五入到小数点后2位,因为它是一种货币(。然而,如果我做1.67*3,它等于5。我希望变量1和2是1.67,然后剩下的变量的剩余值是1.66。

这有道理吗?

这里有一个通用函数可以解决您的问题。它将value转换为cents,并将其平均分配为nr_variables,剩余部分放入第一个变量中,直到全部用完。函数返回一个值列表。

def f(nr_variables, value):
cents = value*100
base = cents//nr_variables
rem = int(cents%nr_variables)
return [(base+1)/100]*rem + [base/100]*(nr_variables-rem)

这可以这样使用:

f(3,5)

并给出:

[1.67,1.67,1.66]

如果你想像在问题中那样将列表分配给变量,你可以这样做:

var1,var2,var3 = f(3,5)

如果你不想在数字中失去精度,可以考虑使用分数:

from fractions import Fraction
var1 = Fraction(5, 3)
var2 = Fraction(5, 3)
var3 = Fraction(5, 3)
print(round(var1, 2))
print(round(var2, 2))
print(round(var3, 2))
print(var1 * 3)

结果:

1.67
1.67
1.67
5

最新更新