Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将一个整数拆分为不同变量中几乎相等的数?_Python_Python 3.x - Fatal编程技术网

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

Python 如何将一个整数拆分为不同变量中几乎相等的数?,python,python-3.x,Python,Python 3.x,我想知道如何将任意给定的整数分解成任意数量的变量,同时确保变量中的值的总和不超过初始整数值 例如,如果我只做以下操作,我想将5分为3个不同的变量: var1 = 5 / 3 var2 = 5 / 3 var3 = 5 / 3 我会得到每个值等于1.67(因为它是一种货币,所以四舍五入到小数点后2位)。然而,如果我做1.67*3,它等于5。我希望变量1和2为1.67,剩下的变量的剩余值为1.66 这有意义吗?这里有一个解决问题的通用函数。它将值转换为美分,并将其均匀地分配到nr_变量,剩余部分放

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

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

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


这有意义吗?

这里有一个解决问题的通用函数。它将
转换为
美分
,并将其均匀地分配到
nr_变量
,剩余部分放在第一个变量中,直到全部用完。函数返回一个值列表

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)
var1,var2,var3 = f(3,5)
并给出:

[1.67,1.67,1.66]

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

f(3,5)
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

你建议得到三个不同的数字与标题不符。要么你想得到最接近的再分配,剩余部分在可接受的近似范围内,要么你想得到相等的数量。你的建议对我来说没有意义。如果你打算在人与人之间分配同等数量的金钱,为什么你会对其中一个人产生偏见?如果您不寻求公平分配,请重新编写标题。问题明确指出这是货币,需要四舍五入到小数点后两位。所以这并不能回答这个问题。这个答案适用于“如何将一个值等分”。如果你不想考虑这个问题,就要求一个标题改写。题目是“我如何把一个整数在不同的变量中分割成相等的数量?”所以我不知道你从哪里得到的。问题还明确指出,所需的产出为1.67、1.67和1.66。标题与问题正文不符。无论如何,我认为我对标题的重新表述是正确的。如果你认为这会使问题变得不清楚,那么我建议在写答案之前请OP澄清。我认为这个问题提供了足够的信息来确定分数不能解决问题;因此,无论标题是否应该编辑,这仍然不是一个正确的答案。这适用于除1以下值之外的所有内容。我尝试了f(3,0.5),在f return[(base+1)/100]*rem+[base/100]*(nr_variables-rem)TypeError中得到了以下错误
:不能将序列乘以'float'类型的非int
固定为处理floatsnote,必须是有效的货币(不能有3个或更多的小数),谢谢,变量赋值是否适用于列表和字典
var1,var2,var3=f(3,5)
。我有一本字典,有些值是“是”,有些值是“否”。我尝试使用for循环遍历它,然后使用if v==“yes”语句访问值等于“yes”的键,然后将其用作f()的变量。