Множественное ветвление. Урок 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. Количество ветвей должно быть как минимум четыре.

def

def inspection(day,month,year):
 if year%4 == 0:
    if month in [1,3,5,7,8,10,12]:
        if day in list(range(1,32)):
            print('В календаре есть такой день')
        else:
            print('Нет такого дня!')
 elif month in [4,6,9,11]:
     if day in list(range(1,31)):
         print('В календаре есть такой день') 

Почему, если выполнять код из

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

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. Раньше нажатием табуляции, сейчас в Ubuntu не работает. Поэтому отступы надо натыкивать пробелом.

>>> r = "no"
>>> n = 2
>>> if n == 1:
...    r = "yes"
... elif n == 2:
...    r = "super yes"
... 
>>> print(r)
super yes

Подскажите, почему такой код

Подскажите, почему такой код работает как надо:

while h != 1  or mi != 37 or s != 12:
    h2 = HH + h
    m2 = MM + mi
    s2 = SS + s
 
    if s2 > 59:
        ostatok_sec = s2 % 60
        m2 += 1
        s2 = ostatok_sec
 
    if s2 == 59:
        m2 += 1
        s2 = 0
    if m2 == 59:
        h2 += 1
        m2 = 0        
 
    if s == 59:
        s = 0
        mi += 1
    if mi == 59:
        mi = 0
        h += 1
 
    if m2 > 59:
        ostatok_m = m2 % 60
        h2 += 1
        m2 = ostatok_m
 
    tle_rec.compute(datetime(Y, m, d, h2, m2, s2))

А такой даже не завершается:

while h != 1  or mi != 37 or s != 12:
    h2 = HH + h
    m2 = MM + mi
    s2 = SS + s
 
    if s2 > 59:
        ostatok_sec = s2 % 60
        m2 += 1
        s2 = ostatok_sec
 
    elif s2 == 59:
        m2 += 1
        s2 = 0
 
    elif m2 == 59:
        h2 += 1
        m2 = 0        
 
    elif s == 59:
        s = 0
        mi += 1
 
    elif mi == 59:
        mi = 0
        h += 1
 
    else:
        ostatok_m = m2 % 60
        h2 += 1
        m2 = ostatok_m
 
    tle_rec.compute(datetime(Y, m, d, h2, m2, s2))

num1=50 num2=50 if

num1=50
num2=50
if num1>num2:
    num3=num1-num2
    print (num3)
elif num1<num2:
    num3=num1+num2
    print (num3)
else:num3=num1
print (num3)

print ("Подходит ли он

print ("Подходит ли он тебе?")
print ("Твой ли это мужчина, будуте ли вы счастливы? Попробуй разобраться")
print ("1.По каким признакам ты понимаешь,что много значишь для партнера?")
print ("a)Он ревнует, что ты слишком долго разговариваешь с другими мужчинами. " "б)Любимый пытается тебе стать ближе физически и духовно. " "в)Он делает подарки,говорит комплименты,признается в любви")
First_question = input("Выберите вариант ответа: ")
if First_question == str("а"):
    First_question =int(3)
elif First_question == str("б"):
    First_question =int(2)
else:
    First_question =int(1)
print ("2. Знаешь ли ты, что любимый мужчина особенно ценит в тебе?")
print ("а)Да, он часто говорит тебе об этом. " "б)Ему нравится, как ты выглядишь." "в)Можешь лишь догадываться. ")
Second_question = input("Выберите вариант ответа: ")
if Second_question == str("а"):
    Second_question =int(3)
elif Second_question  == str("б"):
    Second_question =int(2)
else:
    Second_question =int(1)
print ("Тебя попросили нарисовать сердце,но не красное. Какой цвет ты выберешь?")
print ("а) Синий-как символ неба и моря. " "б) солнечно желтый. " "в)Свежий зеленый. ")
Third_question = input ("Выберите вариант ответа: ")
if Third_question   == str("а"):
   Third_question  =int(1)
elif Third_question   == str("б"):
   Third_question   =int(3)
else:
    Third_question  =int(2)
print ("4.Известны ли тебе политичнские взгляды возлюбленного?")
print ("а)Да,конечно. И ты полностью поддерживаешь его точку зрения. " "б)Нет.Но наши мнения по многим вопросам очень часто совпадают. " "в)Да.И ты не понимаешь, как он может отдавать свой голос этой партии.")
Fourth_question = input ("Выберите вариант ответа: ")
if Fourth_question  == str("а"):
   Fourth_question  =int(2)
elif Fourth_question   == str("б"):
   Fourth_question  =int(3)
else:
   Fourth_question =int(1)
print ("Ради настоящей любви ты готова....")
print ("а)...сделать пластичнскую операцию,чтобы стать неотразимой. " "б)...вместе с любимым преодалеть любые преграды. " "в)...всем пожертвовать ради своего возлюбленного. ")
Fifth_question = input ("Выберите вариант ответа: ")
if Fifth_question== str("а"):
    Fifth_question  =int(3)
elif Fifth_question   == str("б"):
    Fifth_question =int(2)
else:
   Fifth_question=int(1)
print ("6.На твой взгляд, у кого из вас выше самооценка?")
print ("а)У него явно выше, чем у меня." "б)Каждый из нас чувствует себя неуверенным в своей области. Но при этом вы хорошо знаете свои сильные и слабые стороны. " "в)У вас у обоих нормальная, здоровая самооценка. ")
Sixth_question = input ("Выберите вариант ответа: ")
if Sixth_question == str("а"):
    Sixth_question=int(3)
elif Sixth_question  == str("б"):
    Sixth_question =int(1)
else:
   Sixth_question=int(2)
print ("7.Достаточно ли в вших отношениях личного пространства?")
print ("а)Да. У вас с партнером разные увлечения. И порой кажется, что у вас даже слишком много свободы. " "б)Да, время от времени вы предоставляете друг другу возможность побыть наедине или в кругу своих друзей. " "в)Вам так хорошо вместе, что не требуется личного пространства. ")
Seventh_question = input ("Выберите вариант ответа: ")
if Seventh_question == str("а"):
   Seventh_question =int(1)
elif Seventh_question  == str("б"):
    Seventh_question =int(2)
else:
  Seventh_question =int(3)
print ("8.Какие ассоциации у тебя вызывает слово ""скала" "?")
print ("а)Ты тут же представляешь своего партнера - он такой надежный! " "б)Что-то жестокое,холодное. " "в)Море, прибой, отпуск.")
Eighth_question = input ("Выберите вариант ответа: ")
if Eighth_question == str("а"):
   Eighth_question =int(3)
elif Eighth_question  == str("б"):
    Eighth_question =int(1)
else:
  Eighth_question =int(2)
R = int(First_question + Second_question+Third_question+Fourth_question+Fifth_question+Sixth_question+Seventh_question+Eighth_question)
print ("Твой результат: ")
print (R)
if 6<=R<=12:
 print ("Ваши отношения стоятся по принципу ""противоположности притягиваются"". Иногда вам бывает трудно друг с другом,но никогда не скучно. Старайся найти больше общих интересов. Но не стоит слишком сильно меняться для партнера.")
elif 13<=R<=18:
    print ("Поздравляем!Очевидно, ты нашла свою половинку - мужчину,который настолько похож на тебя,что в отношениях царит полное взаимопонимание и гармония. Открывайте друг в друге новые стороны, чтобы вносить изюминку в ваш союз")
else:
    print ("Со стороны кажется, что вы с любимым созданы друг для друга. Вопрос только: это действительно так или ты умело подстраваешься под партнера, чт

a = 57 b = 57 c = "no

a = 57
b = 57
c = "no result"
if a>b:
    c = a-b
elif a<b:
    c = a + b
else:
    c = a
 
print (c)

print ("Здравствуй анон,

print ("Здравствуй анон, ")
name=input("как тебя зовут? ")
age=int(input("а сколько тебе лет? "))
if age<15:
    print ("Уммм! да ты молодой соплячек!")
state=input("А откуда ты будешь? ")
print ("хех, анон,", name, " из ", state, " а пример решить слабо? сколько будет 10*3 и -", age, "(это твой возраст кстати)")
word=0
while word!=10*3-age:
    word=input()
    if word==10*3-age:
        print ("мда.. впечатляет твое незнание матиматики. Ну хоть с калькулятором попробуй")
    else:
        print ("Анон, да ты считать умеешь? молодец!")

при любом значении word выводит вариант из else

print ("Здравствуй анон,

print ("Здравствуй анон, ")
name=input("как тебя зовут? ")
age=int(input("а сколько тебе лет? "))
if age<15:
    print ("Уммм! да ты молодой соплячек!")
state=input("А откуда ты будешь? ")
print ("хех, анон,", name, " из ", state, " а пример решить слабо? сколько будет 10*3 и -", age, "(это твой возраст кстати)")
word=0
while word!=10*3-age:
    word=int(input()) #инпут возвращает строку (незабываем преобразовывать)
    if word==10*3-age:
        print ("мда.. впечатляет твое незнание матиматики. Ну хоть с калькулятором попробуй")
    else:
        print ("Анон, да ты считать умеешь? молодец!")

Ошибка в логике. Мой вариант

Ошибка в логике. Мой вариант для питона 2.6:

!/usr/bin/python
# -*- coding: utf8 -*-
 
print ("Здравствуй анон, ")
name=raw_input("как тебя зовут? ")
age=int(input("а сколько тебе лет? "))
if age<15:
    print ("Уммм! да ты молодой соплячек!")
state=raw_input("А откуда ты будешь? ")
print ("хех, анон %s, из %s, а пример решить слабо? сколько будет 10*3 и минус%g(это твой возраст кстати)" %(name, state, age))
word=int(raw_input())
while word!=10*3-age:
    print ("мда.. впечатляет твое незнание матиматики. Ну хоть с калькулятором попробуй")
    word=int(raw_input())
print ( " %s, да ты считать умеешь? молодец!" %(name))

и ещё ошибка была в word=input(), должно быть word=int(input())

А помогите, пожалуйста, найти

А помогите, пожалуйста, найти ошибку тут:

print ("Привет!")
name=raw_input("Как тебя зовут?")
age=int(input ("А лет тебе сколько?"))
while age!=39:
    print ("Не ври!")
    age=int(input())
print ("А скажи" ,name, "ти летняя, сколько будет 10*3-" ,age, ('твой возраст кстати'))
number=int(raw_input())
while number!=10*3-age:
    print ("Мда...хоть с калькулятором попробуй..")
    number=int(raw_input())
print ("Да ты умеешь считать! Молодец," ,name,)

В Python v3 нет функции

В Python v3 нет функции raw_input(), есть только input(), которая всегда возвращает строку.

В Python v2 функция raw_input() возвращает строку, а input() - целое число.

Поправьте, пожалуйста -

Поправьте, пожалуйста - "математики", уж больно глаза режет.

Помогите найти ошибку import

Помогите найти ошибку

import math
a = int(input("Введите значение a= "))
b = int(input("Введите значение b= "))
c = int(input("Введите значение c= "))
D = b ** 2 - 4 * a * c
print(D)
if D < 0:
  print("Корней нет")
elif D == 0:
  x = -b / 2 * a
  print (x)
else:
  x1 = (-b + math.sqrt(D)) / (2 * a)
  x2 = (-b - math.sqrt(D)) / (2 * a)
  print(x1)
  print(x2)

Целочисленное деление: elif D

Целочисленное деление:

elif D == 0:
  x = -b / 2 * a

не всегда приводит к правильным результатам.

По-моему, ее нет )

По-моему, ее нет )

Посмотрите пожалуйста мой

Посмотрите пожалуйста мой код. Я справился с заданием?

print ("Программа вычисления индекса массы тела. Будьте внимательны при вводе данных.")
a=input("Мой рост в метрах = ")
b=input("Мой вес в килограммах = ")
c=b/(a**2)
if c>=18 and c<=25:
    print("Нормальный диапазон веса")
elif c>=25 and c<=30:
    print("Избыточная масса тела")
elif c>=30 and c<=35:
    print("1 степень ожирения")
elif c>=35 and c<=40:
    print("2 степень ожирения")
elif c>40:
    print("3 степень ожирения")
elif c<18:
    print("Вам надо срочно поднять вес")
else:
    print("некорректные данные рост-вес. рост в метрах, вес в килограммах")

если в метрах

если в метрах то:
a=float(input("Мой рост в метрах= ")
b=float(input("Мой вес в килограммах= "))

Функция input() в Питоне 3-й

Функция input() в Питоне 3-й версии возвращает строку, а не число. Поэтому если вы вводите числа, например, 160 и 60, то они связываются с переменными a и b в виде "160" и "60".

Чтобы преобразовать строку к целому числу, надо воспользоваться функцией int(). Например, четвертая и пятая строчки вашей программе могут быть такими:

a = int(a)
b = int(b)

a = 5 b = 4 c = 2 d = 6 f =

a = 5
b = 4
c = 2
d = 6
f = 1
if a > b and b == d :
	print('good in if')
elif a > b and c < d:
	print('good in elif 1')
elif b > c and b > a :
	print('good elif 2')
elif d == c or a == b :
	print('not good elif 3')
elif a > b :
	x = a - f
else: 	
	a == b
print('a == b')
print ("You result")
input()

моя вторая задачка по этому уроку

a = 47 b = 14 if a > b : c =

a = 47
b = 14
if a > b :
	c = a - b
elif a < b :
	c = a + b
else: 	
	c = a
print ("You result")
print (c)
input()

вот как у меня получилось

>>> #Стипендия >>> a=40 >>>

>>> #Стипендия
>>> a=40
>>> a=4
>>> b=5
>>> c=4
>>> d=4
>>> if a==5 and b==5 and c==5 and d==5 :
	print("Ты отличник ,твоя стипендия 500 грн.")
elif a==4 or b==4 or c==4 or d==4:
	print("Ты хорошист,твоя стипендия 400 грн.")
elif a==3 or b==3 or c==3 or d==3:
	print("У тебя есть 3-ки и твоя стипендия 250 грн.")
else:
	print("Ты двоешник!Ни о какой стипендии и разговора не будет!")

Ты хорошист,твоя стипендия 400 грн.

мой пример 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() в этой программе?

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

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

Как вариант, можно

Как вариант, можно использовать такую концовку:

raw_input(‘Нажмите Enter’)

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

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

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

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

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

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

Извините но у всех я вижу

Извините
но у всех я вижу после "елсе" строка переходит ниже на 1 линию.
У меня не так,как вы это делаете?

нажмите Ctrl+N и в

нажмите Ctrl+N и в открывшимся окне пишите свой код.
Для запуска используйте кнопку "F5"