Факторинг ввода на перечисленные частоты - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь написать функцию, в которой она вычисляет минимально возможную доходность при обмене монет, например. Вы могли бы дать 0,70 с 0,50 + 0,20.

Это код, который я написал до сих пор:

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 float.

Я хочу перечислить выходное значение в формате, где значения [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 голосов
/ 14 ноября 2018

Этот код должен решить вашу проблему.Дайте мне знать, как это получилось

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]
...