Ветвления: ромб принимает решение

Ветвление в алгоритмах: полная и неполная форма if-else, операторы сравнения, вложенные условия, логические and/or/not с таблицами истинности и задача о наибольшем из трёх чисел.

Линейные алгоритмы хороши, но жизнь редко идёт по прямой. «Если на улице мороз — надень шапку», «если пароль верный — впусти пользователя». Когда алгоритму нужно выбрать один из двух путей, на блок-схеме появляется ромб — фигура, которая принимает решения.

Как работает ветвление

Ветвление — это конструкция, в которой дальнейшие действия зависят от условия. Внутри ромба записан вопрос, на который можно ответить только «да» или «нет»: t < 0?, a == b?, x % 2 == 0?. Из ромба выходят две стрелки: по стрелке «да» исполнитель идёт, когда условие истинно, по стрелке «нет» — когда ложно.

Важно: при каждом исполнении алгоритма срабатывает только одна ветка. Вторая просто пропускается, как нехоженая тропинка.

Операторы сравнения

Внутри ромба условие записывают знаками сравнения. Их шесть:

ЗнакСмыслПример истинного условия
<меньше3 < 5
>больше9 > 2
<=меньше или равно5 <= 5
>=больше или равно7 >= 4
==равно6 == 6
!=не равно3 != 8

Запомни: одиночное = — присваивание, двойное == — сравнение. Путаница между ними — одна из самых частых ошибок новичков.

Полная форма: if — else

В полной форме ветвления у каждого исхода своё действие: если «да» — делаем одно, если «нет» — другое. Посмотри на живую схему. Введи сначала отрицательную температуру, потом положительную — и убедись, что исполнитель каждый раз проходит только одну из веток ромба:

t = int(input("Температура"))
if t < 0:
    print("Мороз, надень шапку")
else:
    print("Тепло, шапка не нужна")

Обрати внимание: после ромба обе ветки снова сходятся в одну точку и схема продолжается. Ветвление — это развилка с обязательной встречей: какой бы путь ни выбрал исполнитель, дальше он идёт по общей дороге к концу алгоритма.

Неполная форма: if без else

Иногда действие нужно только в одном случае, а в другом — ничего делать не надо. Тогда ветка «нет» из ромба идёт сразу к следующему блоку. Это неполная форма ветвления. Классический пример — модуль числа: если число отрицательное, сменим знак, а если нет — оставим как есть:

x = int(input("Введите число"))
if x < 0:
    x = -x
print(x)

Запусти схему с числом −7, а потом с числом 4. Во втором случае исполнитель «проскочит» мимо прямоугольника x = -x — ветка «да» осталась незадействованной.

Вложенные условия

А если вариантов не два, а три? Например, число может быть положительным, нулём или отрицательным. Тогда внутрь одной ветки помещают ещё один ромб — получается вложенное ветвление. Сначала спросим «x > 0?», и если ответ «нет», уточним вторым ромбом: «x == 0?»:

x = int(input("Введите число"))
if x > 0:
    print("Положительное")
else:
    if x == 0:
        print("Ноль")
    else:
        print("Отрицательное")

Прогони схему трижды — с числами 5, 0 и −5 — и проследи путь исполнителя в каждом случае. Два ромба дают три различных маршрута, три ромба дали бы четыре, и так далее.

Логические операторы and, or, not

В одном ромбе можно проверять составное условие, соединяя простые условия словами and (и), or (или) и not (не). Вот как они работают:

ABA and BA or B
истинаистинаистинаистина
истиналожьложьистина
ложьистиналожьистина
ложьложьложьложь

Коротко: and истинно, только когда истинны обе части; or — когда истинна хотя бы одна; not переворачивает значение. На схеме составное условие записывают в одном ромбе целиком — это часто короче, чем рисовать два вложенных:

if x > 0 and x % 2 == 0:
    print("Положительное чётное")

Задача: наибольшее из трёх чисел

Классика экзаменов. Чтобы найти максимум из трёх чисел, сравниваем по очереди. Если первое не меньше второго и третьего — оно и есть наибольшее; иначе выбираем большее из оставшихся двух. Прогони схему с разными тройками чисел:

a = int(input("a"))
b = int(input("b"))
c = int(input("c"))
if a >= b and a >= c:
    print("Наибольшее:", a)
else:
    if b >= c:
        print("Наибольшее:", b)
    else:
        print("Наибольшее:", c)

Обрати внимание на >=: знак «больше или равно» нужен, чтобы алгоритм корректно работал, когда числа равны. С обычным > на тройке одинаковых чисел можно было бы «провалиться» во все ветки.

Что мы узнали

  • Ветвление позволяет алгоритму выбирать путь в зависимости от условия.
  • На схеме условие рисуется ромбом с двумя выходами — «да» и «нет»; срабатывает всегда только одна ветка.
  • Условия записывают знаками < > <= >= == !=; одиночное = — присваивание, двойное == — сравнение.
  • Полная форма (if — else) задаёт действия для обоих исходов, неполная (if без else) — только для одного.
  • Для трёх и более вариантов используются вложенные условия.
  • Простые условия соединяются в составные через and, or и not.
Проверьте себя
1. Сколько веток ромба срабатывает при одном исполнении алгоритма?
AОбе сразу
BТолько одна
CЗависит от числа переменных
DНи одной
2. Чем отличается = от == ?
AНичем, это синонимы
B= это присваивание, == это сравнение
C= сравнение, == присваивание
D== работает только с числами
3. В чём разница полной и неполной формы ветвления?
AВ полной есть else с действием, в неполной ветка «нет» ничего не делает
BНеполная форма работает быстрее
CВ неполной форме два ромба
DПолная форма не использует ромб
4. Когда условие A and B истинно?
AКогда истинна хотя бы одна часть
BКогда истинны обе части
CКогда обе части ложны
DВсегда
5. Зачем в задаче о максимуме использовать >= , а не > ?
AТак короче писать
BЧтобы алгоритм работал и когда числа равны
CЗнак > вообще запрещён
DЧтобы программа работала быстрее
Поддержать проект