Программы на Python с использованием if / elif / else: разбор типовых задач
Линейные программы
Линейной называют программу, все команды которой выполняются последовательно, ровно один раз, строго в порядке записи, без условий и повторов. Типичная структура линейной программы: ввод исходных данных → вычисления по формулам → вывод результата. Линейные программы применимы к задачам, где путь решения один и тот же независимо от конкретных значений исходных данных.
Пример линейной программы — перевод температуры из градусов Цельсия в градусы Фаренгейта по формуле F = C·9/5 + 32:
celsius = float(input("Введите температуру в градусах Цельсия: "))
fahrenheit = celsius * 9 / 5 + 32
print("Температура по Фаренгейту:", fahrenheit)
Такая программа выполнит ровно три действия для любых входных данных — считает число, вычислит по формуле, выведет результат — и это не зависит от того, какое именно число ввёл пользователь.
Когда линейной программы недостаточно
Многие задачи требуют разного хода решения в зависимости от исходных данных. Например, формула нахождения корней квадратного уравнения зависит от знака дискриминанта: при положительном дискриминанте — два корня, при нулевом — один, при отрицательном — действительных корней нет. Для таких задач необходима разветвляющаяся программа, в которой ход выполнения выбирается в зависимости от логического условия.
Оператор ветвления if / elif / else в Python
Базовый синтаксис условного оператора в Python:
age = int(input("Введите возраст: "))
if age < 7:
print("Дошкольник")
elif age < 18:
print("Школьник")
else:
print("Совершеннолетний")
Блок elif может повторяться сколько угодно раз (для проверки нескольких условий по очереди), а блок else — необязателен и всегда только один, в самом конце конструкции. Условия проверяются последовательно сверху вниз, и выполняется код только первого блока, условие которого оказалось истинным; все последующие проверки после этого пропускаются.
Операторы сравнения и логические операторы Python
Для построения условий используются операторы сравнения: == (равно), != (не равно), > (больше), < (меньше), >= (больше или равно), <= (меньше или равно), а также логические операторы and (И), or (ИЛИ), not (НЕ) для комбинирования нескольких условий в одно сложное.
| Оператор | Значение | Пример |
|---|---|---|
== | равно | x == 5 |
!= | не равно | x != 5 |
and | логическое И | x > 0 and x < 10 |
or | логическое ИЛИ | x < 0 or x > 100 |
not | логическое НЕ | not (x == 5) |
Пример 1: разветвляющаяся программа — решение квадратного уравнения
Задача. Написать программу, которая по введённым коэффициентам a, b, c (a≠0) находит и выводит корни уравнения ax²+bx+c=0, учитывая все возможные случаи значения дискриминанта.
Решение. Дискриминант вычисляется по формуле D=b²-4ac. Программа должна проверить знак D и в зависимости от него вывести либо два корня, либо один, либо сообщение об отсутствии действительных корней — это классическая структура ветвления с тремя взаимоисключающими случаями:
a = float(input("Введите коэффициент a: "))
b = float(input("Введите коэффициент b: "))
c = float(input("Введите коэффициент c: "))
d = b ** 2 — 4 * a * c
if d > 0:
x1 = (-b + d ** 0.5) / (2 * a)
x2 = (-b — d ** 0.5) / (2 * a)
print("Два корня:", x1, x2)
elif d == 0:
x = -b / (2 * a)
print("Один корень:", x)
else:
print("Действительных корней нет")
Проверим программу на конкретных данных. Дано: a=1, b=-5, c=6. Вычисление: D=(-5)²-4·1·6=25-24=1>0, значит два корня: x₁=(5+1)/2=3, x₂=(5-1)/2=2. Программа с такими входными данными выведет «Два корня: 3.0 2.0», что совпадает с ручным расчётом.
Пример 2: разветвляющаяся программа — классификация треугольника по сторонам
Задача. Даны длины трёх отрезков a, b, c. Определить, можно ли из них составить треугольник, и если можно — определить его тип (равносторонний, равнобедренный, разносторонний).
Решение. Треугольник существует тогда и только тогда, когда сумма длин любых двух сторон больше длины третьей (неравенство треугольника должно выполняться для всех трёх пар сторон одновременно, что реализуется через логическое И). Если треугольник существует, дополнительно проверяем совпадение длин сторон для классификации:
a = float(input("Введите сторону a: "))
b = float(input("Введите сторону b: "))
c = float(input("Введите сторону c: "))
if a + b > c and a + c > b and b + c > a:
if a == b == c:
print("Треугольник равносторонний")
elif a == b or b == c or a == c:
print("Треугольник равнобедренный")
else:
print("Треугольник разносторонний")
else:
print("Треугольник с такими сторонами не существует")
Здесь используется вложенное ветвление: внутренняя конструкция if…elif…else, определяющая тип треугольника, выполняется только тогда, когда внешнее условие (неравенство треугольника) истинно — это показывает, как более сложная логика строится из последовательных уровней проверки условий.
Проверим на данных a=3, b=3, c=3: неравенство треугольника выполняется (3+3>3 для всех пар), и a==b==c истинно, значит программа выведет «Треугольник равносторонний» — что верно, поскольку все три стороны равны.
Пример 3: проверка високосного года
Задача. Написать программу, которая определяет, является ли введённый год високосным. Год является високосным, если он делится на 4, но не делится на 100, либо если он делится на 400.
Решение. Условие включает комбинацию логических операций and и or: сначала проверяется «делится на 4 и не делится на 100» (это даёт истину для большинства високосных годов, кроме кратных 100), затем через or добавляется отдельное исключение — «делится на 400» (для годов вроде 2000, которые кратны 100, но всё равно високосные):
year = int(input("Введите год: "))
is_leap = (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)
if is_leap:
print("Год високосный")
else:
print("Год невисокосный")
Проверка. Для year=2024: 2024 % 4 == 0 (истина) и 2024 % 100 != 0 (истина, 2024 не кратен 100) — первая скобка истинна, значит вся конструкция истинна независимо от второй скобки: год високосный. Для year=1900: 1900 % 4 == 0 (истина), но 1900 % 100 != 0 — ложь (1900 кратен 100), поэтому первая скобка ложна; при этом 1900 % 400 == 0 тоже ложь (1900 не кратен 400), значит и вторая скобка ложна — год невисокосный. Для year=2000: первая скобка ложна (2000 кратен 100), но вторая скобка 2000 % 400 == 0 истинна — год високосный. Все три случая программа обработает верно благодаря корректной комбинации and и or.
Сравнение вложенного if и цепочки elif
Начинающие программисты часто не уверены, когда использовать вложенные конструкции if, а когда — плоскую цепочку elif. Общее правило: если проверяемые условия логически независимы друг от друга и относятся к разным аспектам задачи (как в примере 2 — сначала существование треугольника, потом его тип), уместно вложение; если же все условия — взаимоисключающие варианты одного и того же выбора (как оценка по баллам в диапазонах), правильнее использовать плоскую цепочку elif, что делает код короче и понятнее.
Типичные ошибки
Частая ошибка — использовать оператор присваивания = вместо оператора сравнения == внутри условия if, что в Python приводит к синтаксической ошибке (в отличие от некоторых языков, где это может незаметно скомпилироваться и сломать логику). Вторая ошибка — неверно комбинировать условия с and/or, например писать «if x > 0 or x < 10» вместо «if x > 0 and x < 10» для проверки принадлежности числа интервалу (0;10) — операция or в этом случае даёт истину практически для любого числа, а не только для чисел из интервала. Третья ошибка — забывать про порядок условий в цепочке elif: если условия для оценки записаны от меньшего порога к большему, а не наоборот, программа может отработать неверно, так как выполнится код первого истинного (а не самого точного) условия.
Краткий словарь терминов
Линейная программа — программа, все команды которой выполняются последовательно ровно один раз без условий.
Разветвляющаяся программа — программа, ход выполнения которой зависит от значений логических условий.
Оператор if — конструкция условного выполнения кода в Python.
Вложенное ветвление — конструкция if, помещённая внутрь тела другой конструкции if.
Дискриминант — величина D=b²-4ac, определяющая количество действительных корней квадратного уравнения.
Логический оператор — оператор (and, or, not) для комбинирования логических условий.
Заключение
Линейные программы решают задачи с единственным неизменным ходом вычислений, а разветвляющиеся программы, построенные на операторах if / elif / else, позволяют учитывать разные случаи и особые ситуации во входных данных — от знака дискриминанта до существования треугольника с заданными сторонами. Следующий шаг — циклические алгоритмы, которые позволяют многократно повторять действия и обрабатывать не один, а множество наборов данных без переписывания кода вручную для каждого случая.



