我想知道如何将任何给定的整数划分为任何给定数量的变量,同时确保变量中值的总和不超过初始整数值。
例如,如果我只做以下操作,我想将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