Использование% и // для поиска делителей

Я работаю над небольшим заданием. Задача состоит в том, чтобы запрограммировать калькулятор для банкомата. Базовая версия может выдавать следующий вывод:

Initial amount ($): 348
$100
$100
$100
$20
$20
$5
$2
$1

Вот моя попытка:

#Pseudocode:
"""
Ask user for amount
For each demonination in [100, 50, 20, 10, 5, 2, 1]:
    Integer-divide amount by demonination
    Subtract demonination from amount to leave residual
    If residual // demonination > 1, add 1 to the count of this note, and repeat
    Otherwise go to the next denomination
"""


def find_denom(amount):
    number_of_notes = 0
    banknotes = [100, 50, 20, 10, 5, 2]
    for note in banknotes:
        residual = (amount // note)
        if residual // note > 1:
            number_of_notes += 1
    return residual, number_of_notes

amount = int(input("Enter initial amount ($): "))
residual, number_of_notes = find_denom(amount)

Если я введу 348 в качестве начальной суммы, я получу следующие значения переменных: amount=348, number_of_notes=3, что соответствует количеству банкнот в 100 долларов amount, а также residual=174,

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

2 ответа

Решение

В других, чтобы достичь того, что вы хотите, используйте эту функцию можно использовать

def find_denom(amount):
    banknotes = [100, 50, 20, 10, 5, 2, 1]
    for note in banknotes:
        counter = 0 # reassign zero to counter for every loop
        if note <= amount:
            number_of_notes = amount // note  # get the number of each note in amount
            amount = amount % note  # assign the remaining amount to amount
            while counter < number_of_notes: # check it the number of counter has exceeded the number of notes 
                print('$'+str(note)) #convert note to str and concatenate $ with it and display the note
                counter += 1

amount = int(input("Enter initial amount ($): "))
find_denom(amount)

Переменная, которую вы называете residual не остаток, это счет этой записки. Чтобы получить остаток, умножьте примечание на количество и вычтите это из суммы. Вы также можете получить этот же номер, используя % оператор модуля.

Вы должны найти первую банкноту, которая меньше суммы, а затем выполнить расчет.

def find_denom(amount):
    banknotes = [100, 50, 20, 10, 5, 2]
    for note in banknotes:
        if note <= amount:
            number_of_notes = amount // note
            residual = amount % note
            return residual, number_of_notes
    return amount, 0
Другие вопросы по тегам