Форум сайта python.su
0
Уважаемый JOHN_16, Огромное СПАСИБО за Вашу помощь!!!
Вот что у меня получилось:
def razmen (summa): if summa % 500 == 0: kol_vo_kupyr = summa // 500 return kol_vo_kupyr if summa % 100 == 0: kol_vo_kupyr = summa // 100 return kol_vo_kupyr if summa % 10 == 0: kol_vo_kupyr = summa // 10 return kol_vo_kupyr if summa % 2 == 0: kol_vo_kupyr = summa // 2 return kol_vo_kupyr kupyri = {'k_500':0, 'k_100':0, 'k_10':0, 'k_2':0} dengi = int(input('Введите сумму денег:')) a = razmen(dengi) print (a)
Офлайн
221
давайте для начала напишем простой не потимизированный код, но рабочий код.
Читаем вашу функцию razmen. Если сумма делится без остатка на 500, то возвращаем целочисленное деление суммы на 500 (количество купюр) и тд. А что если сума это 1 ? Ни одно из условий не будет выполнено. ПРоблема. Зачем вам условие что делится без остатка? Мы можешь сумму 1002 для начала определить как 2 по 500 и остаток 2 ? Можем. Давайте перепешите эту функцию так что бы она отдавала информацию о том каким количеством купюр максимального достоинства можно уложить в заданную сумму? Догадаетесь как надо оформить return?
Далее - весь ваш код выглядит остаточно повторяющимся - а если добавить сюда купюры 1000 и 5000 достоинством, вспомнить что еще есть монеты номиналами 5 и 1 рубль, и в перспективе появятся 2000 и 200 (я про рубли РФ) то ваша функцию разрастется еще больше, при этом основные действияостанутся теми же. В педагогических целях (да и более приближенный к реальной жизни случай) я рекомендую вам переписать логику - пусть внутри функции будет цикл по сортированным в обратном порядке номиналам купюрам. ПРи первом истинном результате деления - возвращать полученный результат.
Далее. ПОлученный вариант ранее складываем в словарь. ПРи этом от изначальной суммы нужно отнять ту сумму на которую был проиведен размен. ТАким образом делая это в цикле мы получим что либо сумму полностью разменены и итоговая сумма равна 0 либо чт омы не можем (по условию задачи, например 11) полностью произвести размен денег - и можно в таком случае возбудить исключение (ошибку). Даю подсказку что в цикле for тоже есть блок else но немного другого назначения - почитайте о нем, это вам поможет.
Перепишите код и посмотрим что у вас получится
Офлайн
0
Уважаемый JOHN_16!
Я безмерно благодарен Вам за Вашу помощь, за то, что Вы тратите столько времени на меня!
Хочу показать Вам, что у меня получилось, следуя Вашим рекомендациям:
Сначала я написал линейный код, который, по-моему, работает так, как должен:
summa = int(input('Введите сумму: ')) if summa >= 500: kol_vo_kupyr = summa // 500 ostatok = summa % 500 summa = ostatok print('Количество купюр по 500 рублей - ', kol_vo_kupyr) if summa >= 100: kol_vo_kupyr = summa // 100 ostatok = summa % 100 summa = ostatok print('Количество купюр по 100 рублей - ', kol_vo_kupyr) if summa >= 10: kol_vo_kupyr = summa // 10 ostatok = summa % 10 summa = ostatok print('Количество купюр по 10 рублей - ', kol_vo_kupyr) if summa >= 5: kol_vo_kupyr = summa // 5 ostatok = summa % 5 summa = ostatok print('Количество купюр по 5 рублей - ', kol_vo_kupyr) if summa >= 1: kol_vo_kupyr = summa // 1 ostatok = summa % 1 summa = ostatok print('Количество купюр по 1 рублю - ', kol_vo_kupyr)
def razmen (summa): kupyri = [5000, 1000, 500, 100, 10, 5, 1] while summa !=0: for i in kupyri: if summa >= i: kol_vo_kupyr = summa // i summa_v_kupyrah = kol_vo_kupyr * i ostatok = summa % i summa -= summa_v_kupyrah print('Количество купюр достоинством',i,'рублей ---',kol_vo_kupyr) dengi = int(input('Введите сумму денег: ')) a = razmen(dengi) print (a)
Офлайн
221
остаток действительно нужно упразднить - так как вы его нигде более не использовали.
В целом нормально, если не считать что вы ничего в функции не возвращаете, а в коде присваиваете этот результат переменной a, значение которой ожидаемо всегда будет None
Офлайн
0
Спасибо Вам огромное!!!
Удачи Вам во всем!!!
Офлайн