Множественное ветвление. Урок 6

Основы программирования на Python

Логика выполняющейся программы может быть сложнее, чем выбор одной из двух ветвей. Например, в зависимости от значения той или иной переменной, может выполняться одна из трех (или более) ветвей программы.
Как организовать такое множественное ветвление? Наверное, можно использовать несколько инструкций if: сначала проверяется условное выражение в первой инструкции if (если оно возвращает истину, то будет выполняться вложенный в нее блок кода), затем во второй инструкции if и т.д. Однако при таком подходе проверка последующих инструкций будет продолжаться даже тогда, когда первое условие было истинным, и блок кода при данной ветке был выполнен. Проверка последующих условий может оказаться бессмысленной.

Обычно такую проблему можно решить с помощью вложенных конструкций if-else. Однако при этом часто появляется проблема правильной трактовки кода: непонятно, к какому if относится else (хотя в Python такая путаница не возможна из-за обязательных отступов).

С другой стороны, в ряде языков программирования, в том числе и Python, предусмотрено специальное расширение инструкции if, позволяющее направить поток выполнения программы по одной из множества ветвей. Данная расширенная инструкция, помимо необязательной части else, содержит ряд ветвей elif (сокращение от "else if" - "еще если") и выглядит примерно так, как показано на блок-схеме. Частей elif может быть сколь угодно много (в пределах разумного, конечно).

Блок-схема множественного ветвления программы

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

Примеры скриптов с использованием инструкции if-elif-else на языке программирования Python:

x = -10
 
if x > 0:
     print (1)
elif x < 0:
     print (-1)
else:
     print (0)

result = "no result"
num1 = 3
 
if num1 == 0:
     result = 0
elif num1==1:
     result = 1
elif num1==2:
     result = 2
elif num1==3:
     result = 3
elif num1==4:
     result = 4
elif num1==5:
     result = 5
else:
     print ("Error")
 
print (result)

В какой момент прекратиться выполнение инструкции if-elif-else в примерах выше. При каком значении переменной могла сработать ветка else?

Практическая работа

1. Напишите программу по следующему описанию:
a. двум переменным присваиваются числовые значения;
b. если значение первой переменной больше второй, то найти разницу значений переменных (вычесть из первой вторую), результат связать с третьей переменной;
c. если первая переменная имеет меньшее значение, чем вторая, то третью переменную связать с результатом суммы значений двух первых переменных;
d. во всех остальных случаях, присвоить третьей переменной значение первой переменной;
e. вывести значение третьей переменной на экран.

2. Придумайте программу, в которой бы использовалась инструкция if-elif-else. Количество ветвей должно быть как минимум четыре.

мой пример if-elif-else

a = input(u"Хлеб = ")
b = input(u"Рис = ")
c = input(u"Масло = ")
d = input(u"Кол-во денег = ")
 
if a!=0 and b!=0 and c!=0 and a+b+c > 0 and a+b+c<d:
    d= d-(a+b+c)
    print (u"Остаток ="),d
elif a+b+c > 0 and a+b+c >d:
    d= (a+b+c)-d
    print (u"Не хватает ="),d
elif a<0 or b<0 or c<0:
    print (u"продукты не стоят отрицательных денег,введите реальные значения")
elif a==0 or b==0 or c==0:
    print (u"продукты не бесплатны,введите реальные значения")
else:
    print (u"Что-то не так")

При запуске на внештатном интерпритаторе вылезла крякозябра,пришлось погуглить наперед с кодировкой)

Задание 2

Пример моей программы:

a = input('a = ')
b = input('b = ')
if a*b > 0 and a!=b:
    c = a * b
    print c
elif a > 0 and b< 0 and a!=b:
    c = a - b;
    print c
elif a < 0 and b > 0 and a!=b:
    c = b - a
    print c
elif (a == b) and (a,b != 0, 0):
    c = a**b
    print c
else:
    print a, b

лишний and

elif a > 0 and b< 0 and a!=b:

Логика :) a больше 0 И b меньше 0 И a не равно b!!
Если одно положительное а другое отрицательно то они и так не равны)) если только не по модулю брать
P.S. а так код нравится)

Практическое задание

Python 2.7

a = input ('a = ')
b = input ('b = ')
if a > b:
	c = a - b
	print c
elif a < b:
	c = a + b
	print c
else:
	c = a
	print c
input()

input()

А для чего завершающее input() в этой программе?

чтобы окошко не закрылось, и

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

Объясните пожалуйста

У меня в данный момент python 3.2, и с момента урока "Множественное ветвление" у меня многое не получается. Например: при написании elif или else выдаёт ошибку. Не выдаёт такого результата как напримерах в уроках о циклах While, for и инструкции if. Я не понимаю в чём проблема. Заранее спасибо за ответ!

Может быть что-то с

Может быть что-то с отступами? Какую ошибку пишет интерпретатор?

Вот так оформляются отступы в интерактивном режиме и при сохранении файла.

отступы в python (if-elif-else)