在python中,我想计算一个还不存在的数字要减去多少,而这个数字只有在我知道要减去的数量后才会存在

在python中,我想计算一个还不存在的数字要减去多少,而这个数字只有在我知道要减去的数量后才会存在,python,algorithm,math,calculation,Python,Algorithm,Math,Calculation,如果我有一个数字1000(原始数字) 我想通过减去3个其他金额得到另一个数字(计算的数字) 我想从原始数字中提取的三个金额如下: MEPMI金额=(计算数字-169)除以13.8% MepPenAmount=(计算出的数值,但仅当大于120且仅为最小值120到最大值962之间的数值)然后将最小值和最大值之间的数值除以3% leviAmount=计算出的数字除以0.5% 计算数=原始数-MEPMIAMUNT-MepPenAmount-leviAmount 我刚才可以使用重复迭代和类似的增量数来计算

如果我有一个数字1000(原始数字)

我想通过减去3个其他金额得到另一个数字(计算的数字)

我想从原始数字中提取的三个金额如下:

MEPMI金额=(计算数字-169)除以13.8%

MepPenAmount=(计算出的数值,但仅当大于120且仅为最小值120到最大值962之间的数值)然后将最小值和最大值之间的数值除以3%

leviAmount=计算出的数字除以0.5%

计算数=原始数-MEPMIAMUNT-MepPenAmount-leviAmount

我刚才可以使用重复迭代和类似的增量数来计算:

*这不是实际的代码,只是给出一个想法,尽管几乎相同

calculated_number = original number - (original number / 1.138)
checked = calculated_number + MepPenAmount + MepMiAmount + leviAmount 

checked_calculated_numbers = []

 while checked != payment:
        # calculate a delta for the calculated_number 
        delta = make_float(abs(checked - payment))
        delta = max(delta, Decimal('0.01'))
    # let's check if we should add or subtract this delta
    if checked > payment:
        calculated_number -= delta
    else:
        calculated_number += delta

    #re calculate MepMiAmount from new checked number
    MepMiAmount = getMepMi(Args)
    # re calculate MepPenAmount with the checked number
    MepPenAmount = Decimal(0)
    MepPenAmount = calculate_MepPenAmount  (args)
    # recalculate leviAmount 
    leviAmount = calculate_leviAmount (args)

    checked_calculated_numbers.append(checked)

    checked = float(calculated_number  + MepPenAmount + MepMiAmount + leviAmount )

return { number}

我认为必须有一种更优雅的方法来实现这一点,而不是野蛮的前迭代

当我上学时,我们称之为“代数”。你可能想把代码放在一边,写下你想解的方程组。它可能需要一个迭代解,因为方程是非线性的,但是一旦你把方程写下来,它就应该清楚了。四个未知数需要四个方程。伪代码的第一行将计算出的数值设置为零。为什么您需要检查计算的数字?通常,将delta设置为支票和付款之间差值的一半,以形成一个二进制搜索,以实现收敛。Just mu Thinks:-)@paddy3118抱歉,应该计算一下\u number=original number-(original number/1.138)@duffymo是的,我正在使用替换方法,反复迭代,以找到一个与原始数+其他3个未知数相加的总和,这是通过使用增量来缩小或增加替换数来实现的。也许这并不清楚,因为我在函数调用中使用了其他等式,例如leviAmount=calculate_leviAmount(args),但本质上这只是从第一个假想数(替换数)计算结果,所以我没有看到在…中添加代码的相关性。。。。我只是想知道是否有更好或更好的方法来解决这个问题。方程组,特别是非线性方程组,不能保证有解。迭代解可能收敛,也可能不收敛,这取决于系统特性和初始解的猜测。你有解决办法吗?在你考虑更好或更好之前,先考虑一下这个问题。我上学时,我们称之为“代数”。你可能想把代码放在一边,写下你想解的方程组。它可能需要一个迭代解,因为方程是非线性的,但是一旦你把方程写下来,它就应该清楚了。四个未知数需要四个方程。伪代码的第一行将计算出的数值设置为零。为什么您需要检查计算的数字?通常,将delta设置为支票和付款之间差值的一半,以形成一个二进制搜索,以实现收敛。Just mu Thinks:-)@paddy3118抱歉,应该计算一下\u number=original number-(original number/1.138)@duffymo是的,我正在使用替换方法,反复迭代,以找到一个与原始数+其他3个未知数相加的总和,这是通过使用增量来缩小或增加替换数来实现的。也许这并不清楚,因为我在函数调用中使用了其他等式,例如leviAmount=calculate_leviAmount(args),但本质上这只是从第一个假想数(替换数)计算结果,所以我没有看到在…中添加代码的相关性。。。。我只是想知道是否有更好或更好的方法来解决这个问题。方程组,特别是非线性方程组,不能保证有解。迭代解可能收敛,也可能不收敛,这取决于系统特性和初始解的猜测。你有解决办法吗?在你考虑更好或更好之前,先考虑一下这个问题。