Форум сайта python.su
0
Всем доброго времени суток уважаемые форумчане!
Пытаюсь практиковаться, выполняя упражнения из “Практикум по алгоритмизации и программированию на Python”.
Там на странице 45 есть задача под номером 10:
Известна денежная сумма. Разменять её купюрами 500, 100, 10 и монетой
2 руб., если это возможно.
Додумался до следующего кола:
#Определение переменных summa = None k_500 = None ostatok_k_500 = None k_100 = None ostatok_k_100 = None k_10 = None ostatok_k_10 = None k_2 = None ostatok_k_2 = None summa = int(input('Введите сумму денег: ')) if summa >= 500: k_500 = summa // 500 #Количество купюр достоинством 500 ostatok_k_500 = summa % 500 #Сумма, оставшаяся от размена по 500 print('К ВЫДАЧЕ:') print('Количество купюр по 500 рублей: ',k_500) #print(ostatok_k_500) elif ostatok_k_500 < 500: k_100 = ostatok_k_500 // 100 #Количество купюр достоинством 100 ostatok_k_100 = ostatok_k_500 % 100 #Сумма, оставшаяся от размена по 100 print('Количество купюр по 100 рублей: ',k_100)
Офлайн
221
elif это сокращение от else if, подумайте над этим.
Замените elif на if. Подумайте почему так правильнее чем сейчас и озвучьте выводы.
Офлайн
0
Уважаемый JOHN_16, огромное Вам спасибо, что откликнулись на мое сообщение!
if - переводится как ЕСЛИ
elif - как ТАКЖЕ ЕСЛИ
если я ничего не путаю, то в конструкции из одних if будет выполняться первый оператор соответствующий условию, а остальные будут игнорироваться. Во всяком случае так утверждает Доусон.
То есть, если я сделаю из одних if, то, по идее, она должна себя вести именно так, как ведет у меня с elif.
Но, я сделал так, как Вы мне посоветовали, и все стало работать так, как должно.
Получается, мои представления об конструкции if-elif-else перевернуты…
Надо перечитать еще раз Доусона и посмотреть у Лутца…
Еще раз огромное Вам спасибо!
С уважением,
Илья
Офлайн
221
Вы что то путаетесь, надо перечитать учебный материал.
if A: 1 elif B: 2 else: 3
Офлайн
0
Спасибо Вам огромное!!! Теперь разобрался!!!!
Но программа работает только если ввести сумму большую 600 (рассчитанную на все условия, скажем 1622).
———————————
Введите сумму денег: 1622
К ВЫДАЧЕ:
Количество купюр по 500 рублей: 3
Количество купюр по 100 рублей: 1
Количество купюр по 10 рублей: 2
Остаток 2
Количество купюр по 2 рубля: 1
Остаток 0
———————————
Если я ввожу сумму к примеру 400, то она выдает мне ошибку:
———————————
Введите сумму денег: 400
Traceback (most recent call last):
File “E:\PYTHON\Практика\1111.py”, line 22, in <module>
k_100 = ostatok_k_500 // 100 #Количество купюр достоинством 100
TypeError: unsupported operand type(s) for //: ‘NoneType’ and ‘int’
>>>
——————————–
Вот код, который я навоял:
summa = None k_500 = None ostatok_k_500 = None k_100 = None ostatok_k_100 = None k_10 = None ostatok_k_10 = None k_2 = None ostatok_k_2 = None summa = int(input('Введите сумму денег: ')) if summa >= 500: k_500 = summa // 500 #Количество купюр достоинством 500 ostatok_k_500 = summa % 500 #Сумма, оставшаяся от размена по 500 print('К ВЫДАЧЕ:') print('Количество купюр по 500 рублей: ',k_500) if summa < 500 or ostatok_k_500 < 500: k_100 = ostatok_k_500 // 100 #Количество купюр достоинством 100 ostatok_k_100 = ostatok_k_500 % 100 #Сумма, оставшаяся от размена по 100 print('Количество купюр по 100 рублей: ',k_100) if summa < 100 or ostatok_k_100 > 0: k_10 = ostatok_k_100 // 10 #Количество купюр достоинством 10 ostatok_k_10 = ostatok_k_100 % 10 #Сумма, оставшаяся от размена по 10 print('Количество купюр по 10 рублей: ',k_10) print('Остаток',ostatok_k_10) if summa < 10 or ostatok_k_10 > 0: k_2 = ostatok_k_10 // 2 #Количество купюр достоинством 2 ostatok_k_2 = ostatok_k_10 % 2 #Сумма, оставшаяся от размена по 2 print('Количество купюр по 2 рубля: ',k_2) print('Остаток',ostatok_k_2)
Офлайн
186
В место:
summa = None k_500 = None ostatok_k_500 = None k_100 = None ostatok_k_100 = None k_10 = None ostatok_k_10 = None k_2 = None ostatok_k_2 = None
summa = k_500 = ostatok_k_500 = k_100 = ostatok_k_100 = k_10 = ostatok_k_10 = k_2 = ostatok_k_2 = 0
Офлайн
0
Уважаемый Rodegast, огромное спасибо за Ваше замечание, но желаемого результата все равно я не достиг. Теперь получается:
————————–
Введите сумму денег: 422
Количество купюр по 100 рублей: 0
>>>
————————–
Очень хочу узнать, почему программа не работает так, как должна.
Помогите пожалуйста разобраться.
Заранее благодарен всем за Вашу Помощь!
С уважением,
Илья
Офлайн
221
underground
я ожидал что вы до этого дойдете. У вас алгоритмически код написан не удачно. Вы функции уже изучили?
Офлайн
0
Да, функции прошел, разобрался. Простые Функции писал…
Чем больше думаю над этим кодом, тем больше убеждаюсь, что я чего-то или не допонимаю, или чего-то попросту не знаю…
Отредактировано underground (Июнь 6, 2017 14:28:10)
Офлайн
221
как вариант напишите функцию которая будет принимать некую сумму денег, а возвращать наибольшую купюру размена. Используйте ее в цикле, догадайтесь как. Используйте словарь, а не набор переменных для хранения количества номиналов разменных купюр.
Будем постепенно писать правильный код
Офлайн