Python中的更改计算

时间:2017-01-05 14:28:45

标签: python

我使用以下代码计算Python的最小变化金额:

def change(am):
    totalcoins = []
    for coin in dstock:
        while coin[0] <= am and coin[1] > 0:
            totalcoins.append(coin[0])
            am = round(am - coin[0], 2)
            coin[1] = coin[1] - 1
    return totalcoins

dstock是从CSV文件创建的变量。这是dstock的印刷品:

[[1.0, 100], [0.5, 100], [0.2, 100], [0.1, 100], [0.05, 100], [0.02, 100], [0.01, 100]]
  

解释:[面额,库存水平] - 目前每个都有100个。

我已经想过如何更新库存水平以及如何计算更改,但是如果没有足够的库存来产生更改,我无法弄清楚如何产生错误。

示例:

Stock = [[1.0, 0], [0.5, 0], [0.2, 0], [0.1, 0], [0.05, 0], [0.02, 0], [0.01, 2]]

change = 0.03

如果股票&lt;更改 打印(错误:库存不足以产生变化)

2 个答案:

答案 0 :(得分:2)

没有额外的循环。

只有在有足够的变化时,才允许编辑以适应股票更新。

def change(am, dstock):
    totalcoins = []
    hstock=dstock[:] #make a copy of dstock
    for coin in hstock:
        while coin[0] <= am and coin[1] > 0:
            totalcoins.append(coin[0])
            am = round(am - coin[0], 2)
            coin[1] = coin[1] - 1
    if am>0:
        raise ValueError("not enough stock to produce change")
    else:
        dstock = hstock
        return totalcoins

dstock = [[1.0, 0], [0.5, 0], [0.2, 0], [0.1, 0], [0.05, 0], [0.02, 0], [0.01, 3]]


print change(0.03, dstock) #[0.01, 0.01, 0.01]
print dstock #[[1.0, 0], [0.5, 0], [0.2, 0], [0.1, 0], [0.05, 0], [0.02, 0], [0.01, 0]]

答案 1 :(得分:1)

你的问题很模糊,但我认为你问的是如何产生错误。如果没有,请详细说明

使用例外和条件:

if stock < stock_required_for_change:
    raise Exception("Not enough Stock to produce change")