Задача состоит в том, чтобы написать функцию для внесения изменений в сумму с использованием данного номинала монет (монеты = [200, 100, 50, 20, 10, 5, 2, 1]), учитывая монеты в карманенапример, карман [1,0,1,0,5,0,3,0] будет представлять 1x £ 2, 1x £ 0,50, 5x £ 0,10 и 3x £ 0,02.Если есть несколько способов оплаты, следует использовать тот, который использует наибольшее количество монет.Если невозможно оплатить точную сумму, должна быть выплачена минимальная возможная сумма и отмечено изменение.Выходные данные должны содержать список монет, подлежащих выплате, в том же формате, что и в кармане, с 9-м элементом, изменить.
Проблема: функция в настоящее время меняет «карман» для вывода оригинального кармана за вычетом оплаченного, что близко к желаемому ответу (в нем должно быть указано, какие монеты следует отдать).Поэтому я создал переменную original_pocket для хранения начальных значений 'pocket', прежде чем редактировать их, поэтому оттуда разница между original_pocket и pocket является желаемым результатом.Я не могу понять, почему original_pocket меняется, учитывая, что цикл for должен изменять только «pocket»?
def pay_with_coins(amount, pocket):
amount = amount*100 #puts amount in pennies
original_pocket = pocket
coins = [200, 100, 50, 20, 10, 5, 2, 1]
def value(list):
value = 0
for i in range(8):
value += list[i]*coins[i]
return value
pocket_val = value(pocket)
if pocket_val < amount:
return False
else: pass
for i in range(7,-1,-1):
take = min(amount//coins[i], pocket[i]) #how many of each coin type can be taken
amount = amount - coins[i]*take #set a new amount
pocket[i]= pocket[i]-take#take those coins out of pocket
print(pocket, "this is the pocket")
print(original_pocket, "original pocket")
output = [0 for i in range (9)]
for i in range(7):
output[i]= original_pocket[i]-pocket[i]
print (output) #I still need to account for change as output[8]
в настоящее время, используя тест:
pay_with_coins(0.05,[0,0,0,0,0,5,3,6])
вывод:
[0.0, 0.0, 0.0, 0.0, 0.0, 5.0, 3.0, 1.0] this is the pocket
[0.0, 0.0, 0.0, 0.0, 0.0, 5.0, 3.0, 1.0] original pocket
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0, 0]
, тогда как ожидаемый / желаемый результат должен быть:
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 5.0, 0, 0]