2015-01-08 6 views
0

Я хочу написать функцию, которая вычисляет изменение, которое машина должна предоставить клиенту. Функция получает стоимость продукта, сумму денег, которую дал клиент, и словарь, в котором есть деньги, которые у него есть в машине.Функция, которая вычисляет изменение

Функция должна предоставить наименьший набор монет и векселей и учитывать имеющиеся деньги.

Следует также избегать исхода каких-либо денежных средств; например, если у него есть 2 из 10 евро и 8 из 5 евро, он не должен использовать 2 из 10 евро в том же изменении.

Это мой словарь:

d = {0.01: 10, 
0.02: 5, 
0.05: 2, 
0.1: 10, 
0.2: 5, 
0.5: 2, 
1: 5, 
2: 5, 
5: 2, 
10: 4, 
20: 5, 
50: 1, 
100: 0, 
200: 0, 
500: 0, 
} 

и это мой код до сих пор:

def change(cost, given, d): 
last_change = 0 
change = given - cost #calculates how much we own the customer 
if change == 0: #if we don't own the customer anything 
    return change 
else: 
    if change in d and d[change] != 0: #if change is in the dictionary and its value is not 0 we can give it to the customer 
     return change 
    else: 
     euro = int(change) 
     cent = change - euro #calculates if we have to give any cents 
     if cent == 0: #if we only have to give bills 
      for item in d: 
       if item > last_change and item < change and d[item] != 0: #biggest bill we can give the customer 
        last_change = item 

Я не знаю, что делать дальше.

+1

Один совет - Дон» t представляют суммы в виде чисел с плавающей запятой - представляют их как целые числа, то есть евроценты в этом случае. – ErikR

ответ

0

Вот некоторые псевдо-код - есть некоторые детали, которые вы должны заполнить:

amount = ... the input amount ... 
    change = {} 
    for denomination in [500, 200, 100, 50, ...]: 
    if amount == 0: 
     break 
    n = ... number of coins of this denomination to use 
    change[denomination] = n   # store it 
    amount = amount - n*denomination # subtract from amount 
    # the dictionary change contains how to make the change 
+0

Я не понимаю, что «n = ... количество монет этого достоинства использовать» часть – Niennaz

+0

вот что вам нужно выяснить; заданные 'amount' и' denomination' и ваш словарь 'd', выяснить, что' n' должно быть - количество монет этого номинала, чтобы выдать как изменение – ErikR

1
from math import * 
dict1 = {0.01: 10, 
0.02: 5, 
0.05: 2, 
0.1: 10, 
0.2: 5, 
0.5: 2, 
1: 5, 
2: 5, 
5: 2, 
10: 4, 
20: 5, 
50: 1, 
100: 0, 
200: 0, 
500: 0, 
} 

def change(cost, given, dict1): 

    last_change = 0 
    change = given - cost 
    if change == 0: 
     print change 
    else: 
     if change in dict1 and dict1[change] != 0: 
     print change 
     else: 

     if change >= 500 and dict1[change] != 0: 
      a = floor(change/500) 
      print a, " --500 's" 
      change = change - (a * 500) 

     if change >= 200 and dict1[change] != 0: 
      b = floor(change/200) 
      print b, " --200 's" 
      change = change - (b * 200) 

     if change >= 100 and dict1[change] != 0: 
      c = floor(change/100) 
      print c, " --100 's" 
      change = change - (c * 100) 

     if change >= 50 and dict1[change] != 0: 
      d = floor(change/50) 
      print d, " --50 's" 
      change = change - (d * 50) 

     if change >= 20 and dict1[change] != 0: 
      e = floor(change/20) 
      print e, " --20 's" 
      change = change - (e * 20) 


     if change >= 10 and dict1[change] != 0: 
      f = floor(change/10) 
      print f, " --10 's" 
      change = change - (f * 20) 


     if change >= 5 and dict1[change] != 0: 
      g = floor(change/5) 
      print g, " --5 's" 
      change = change - (g * 5) 

     if change >= 2 and dict1[change] != 0: 
      h = floor(change/2) 
      print h, " --2 's" 
      change = change - (h * 2) 

     if change >= 1 and dict1[change] != 0: 
      i = floor(change/1) 
      print i, " --1 's" 
      change = change - (i * 1) 

     if change >= 0.5 and dict1[change] != 0: 
      j = floor(change/0.5) 
      print j, " --0.5 's" 
      change = change - (j * 0.5) 

     if change >= 0.2 and dict1[change] != 0: 
      k = floor(change/0.2) 
      print k, " --0.2 's" 
      change = change - (k * 0.2) 


        --------------------------- 
        --------------------------- 
        --------------------------- 
        --------------------------- 
      implement similar steps for 0.1,0.05,0.02,0.01 

Вывод будет выглядеть следующим образом:

1 - 500 's 
2 - 200 's 
2 - 100 's 
1 - 20 's 
Смежные вопросы