将输入分解为列出的频率

时间:2018-11-14 01:29:48

标签: python list binary counter calculator

我正在尝试编写一个函数,该函数计算某个值(例如,您可以用0.50 + 0.20给出0.70。

这是我到目前为止编写的代码:

def pay_with_coins( amount ):
amount = float()
numberof200 = 2.00
numberof100 = 1.00
numberof050 = 0.50
numberof020 = 0.20
numberof010 = 0.10
numberof005 = 0.05
numberof002 = 0.02
numberof001 = 0.01
change = []
no200counter = amount.count(numberof200)
no100counter = amount.count(numberof100)
no050counter = amount.count(numberof050)
no020counter = amount.count(numberof020)
no010counter = amount.count(numberof010)
no005counter = amount.count(numberof005)
no002counter = amount.count(numberof002)
no001counter = amount.count(numberof001)
numberofchange = no200counter + no100counter + no050counter + no020counter + no010counter + no005counter + no002counter + no001counter

if no200counter > 0: +1
elif no100counter > 0: +1
elif no050counter > 0: +1
elif no020counter > 0: +1
elif no010counter > 0: +1
elif no005counter > 0: +1
elif no002counter > 0: +1
elif no001counter > 0: +1

change.append(numberofchange)
return list(change)

我尝试使用if语句在代码中进行的操作是检查它是否可以将下一个最大的更改值计入我们的金额中,然后在列表中的索引处添加一个应该最终返回的索引,然后移动当当前值不能再计入我们的金额时,将其添加到下一个可用的最大更改值(我在下面给出的示例中对此进行了更好的说明)。

我遇到的一个问题是我的控制台显示“ float”对象没有属性“ count”,但是我想确保该数量是2dp浮动。

我想以[2.00,1.00,0.50,0.20,0.10,0.05,0.02,0.01]的格式列出输出值,并且每个元素根据其中的多少而增加。因此,没有输入的输出应为[0,0,0,0,0,0,0,0]。

如果要找到对以上示例(0.70)的更改,我希望输出为:

[0,0,1,1,0,0,0,0]

另一个示例是找到5.18的更改。输出应为:

[2,1,0,0,1,1,1,1]

我要列出最终输出的方式类似于二进制转换,有点,但如果需要,每个“位”可以超过1。

如您所见,我对如何编写代码有了一个想法,但我只是在努力将其实际组合在一起。请帮忙吗?

1 个答案:

答案 0 :(得分:1)

此代码应该可以解决您的问题。让我知道如何解决

def pay_with_coins( amount ):
    allCoins = [2.00, 1.00, 0.50, 0.20, 0.10, 0.05, 0.02, 0.01]

    change = []
    for coin in allCoins:
        # Find out how many maximum coins can fit into the amount. Ex for amount 5 a max of 2 coins of value 2 can fit
        n = (int)(amount / coin)
        change.append(n)
        # Substract the value of amount for which change is generated. 
        # Ex - for amount 5, and coin 2, $4 change will be generated and balance left will be $1
        amount = round(amount - (n * coin), 2)     # Rounding to 2 decimals

    return change

print(pay_with_coins(5.18))
Output - > [2, 1, 0, 0, 1, 1, 1, 1]