Найти - Пользователи
Полная версия: Ветвление if - elif - else
Начало » Python для новичков » Ветвление if - elif - else
1 2
underground
Всем доброго времени суток уважаемые форумчане!
Пытаюсь практиковаться, выполняя упражнения из “Практикум по алгоритмизации и программированию на 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)

Если ввести сумму большую 500, скажем 600, то остаток в 100 почему-то не проходит в следующую ветку elif.
Помогите пожалуйста разобраться, что я не так делаю…

Заранее всем благодарен и признателен за Вашу помощь!
С уважением,
Илья
JOHN_16
elif это сокращение от else if, подумайте над этим.
Замените elif на if. Подумайте почему так правильнее чем сейчас и озвучьте выводы.
underground
Уважаемый JOHN_16, огромное Вам спасибо, что откликнулись на мое сообщение!

if - переводится как ЕСЛИ
elif - как ТАКЖЕ ЕСЛИ

если я ничего не путаю, то в конструкции из одних if будет выполняться первый оператор соответствующий условию, а остальные будут игнорироваться. Во всяком случае так утверждает Доусон.
То есть, если я сделаю из одних if, то, по идее, она должна себя вести именно так, как ведет у меня с elif.
Но, я сделал так, как Вы мне посоветовали, и все стало работать так, как должно.
Получается, мои представления об конструкции if-elif-else перевернуты…
Надо перечитать еще раз Доусона и посмотреть у Лутца…

Еще раз огромное Вам спасибо!

С уважением,
Илья
JOHN_16
Вы что то путаетесь, надо перечитать учебный материал.
 if A:
   1
elif B:
   2
else:
   3
  • Если условие А истинно, то выполнится 1.
    Если А не истинно, то если B истинно, то выполнится 2
    Если А не истинно, то если B не истинно, то выполнится 3
внутри такой конструкции elif может встречаться многократно
underground
Спасибо Вам огромное!!! Теперь разобрался!!!!
Но программа работает только если ввести сумму большую 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)
Rodegast
В место:
 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
underground
Уважаемый Rodegast, огромное спасибо за Ваше замечание, но желаемого результата все равно я не достиг. Теперь получается:
————————–
Введите сумму денег: 422
Количество купюр по 100 рублей: 0
>>>
————————–
Очень хочу узнать, почему программа не работает так, как должна.
Помогите пожалуйста разобраться.
Заранее благодарен всем за Вашу Помощь!

С уважением,
Илья
JOHN_16
underground
я ожидал что вы до этого дойдете. У вас алгоритмически код написан не удачно. Вы функции уже изучили?
underground
Да, функции прошел, разобрался. Простые Функции писал…
Чем больше думаю над этим кодом, тем больше убеждаюсь, что я чего-то или не допонимаю, или чего-то попросту не знаю…
JOHN_16
как вариант напишите функцию которая будет принимать некую сумму денег, а возвращать наибольшую купюру размена. Используйте ее в цикле, догадайтесь как. Используйте словарь, а не набор переменных для хранения количества номиналов разменных купюр.
Будем постепенно писать правильный код
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB