Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 5, 2017 13:21:47

underground
Зарегистрирован: 2015-12-17
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Ветвление if - elif - else

Всем доброго времени суток уважаемые форумчане!
Пытаюсь практиковаться, выполняя упражнения из “Практикум по алгоритмизации и программированию на 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.
Помогите пожалуйста разобраться, что я не так делаю…

Заранее всем благодарен и признателен за Вашу помощь!
С уважением,
Илья

Офлайн

#2 Июнь 5, 2017 13:33:02

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Ветвление if - elif - else

elif это сокращение от else if, подумайте над этим.
Замените elif на if. Подумайте почему так правильнее чем сейчас и озвучьте выводы.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Июнь 5, 2017 16:00:30

underground
Зарегистрирован: 2015-12-17
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Ветвление if - elif - else

Уважаемый JOHN_16, огромное Вам спасибо, что откликнулись на мое сообщение!

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

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

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

С уважением,
Илья

Офлайн

#4 Июнь 5, 2017 17:19:56

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Ветвление if - elif - else

Вы что то путаетесь, надо перечитать учебный материал.

 if A:
   1
elif B:
   2
else:
   3
  • Если условие А истинно, то выполнится 1.
    Если А не истинно, то если B истинно, то выполнится 2
    Если А не истинно, то если B не истинно, то выполнится 3
внутри такой конструкции elif может встречаться многократно



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#5 Июнь 5, 2017 17:36:50

underground
Зарегистрирован: 2015-12-17
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Ветвление if - elif - else

Спасибо Вам огромное!!! Теперь разобрался!!!!
Но программа работает только если ввести сумму большую 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)

Офлайн

#6 Июнь 5, 2017 18:39:54

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2840
Репутация: +  186  -
Профиль   Отправить e-mail  

Ветвление if - elif - else

В место:

 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



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#7 Июнь 6, 2017 07:04:35

underground
Зарегистрирован: 2015-12-17
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Ветвление if - elif - else

Уважаемый Rodegast, огромное спасибо за Ваше замечание, но желаемого результата все равно я не достиг. Теперь получается:
————————–
Введите сумму денег: 422
Количество купюр по 100 рублей: 0
>>>
————————–
Очень хочу узнать, почему программа не работает так, как должна.
Помогите пожалуйста разобраться.
Заранее благодарен всем за Вашу Помощь!

С уважением,
Илья

Офлайн

#8 Июнь 6, 2017 10:39:10

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Ветвление if - elif - else

underground
я ожидал что вы до этого дойдете. У вас алгоритмически код написан не удачно. Вы функции уже изучили?



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#9 Июнь 6, 2017 13:09:56

underground
Зарегистрирован: 2015-12-17
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Ветвление if - elif - else

Да, функции прошел, разобрался. Простые Функции писал…
Чем больше думаю над этим кодом, тем больше убеждаюсь, что я чего-то или не допонимаю, или чего-то попросту не знаю…

Отредактировано underground (Июнь 6, 2017 14:28:10)

Офлайн

#10 Июнь 6, 2017 20:00:42

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Ветвление if - elif - else

как вариант напишите функцию которая будет принимать некую сумму денег, а возвращать наибольшую купюру размена. Используйте ее в цикле, догадайтесь как. Используйте словарь, а не набор переменных для хранения количества номиналов разменных купюр.
Будем постепенно писать правильный код



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version