Ветвления: ромб принимает решение
Ветвление в алгоритмах: полная и неполная форма 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 (не). Вот как они работают:
| A | B | A and B | A 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.