Урок курса

Условная инструкция if и else

Python для новичков

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

Блок кода и отступы в Python

В большинстве языков программирования группы инструкций обозначаются фигурными скобками {}. Python устроен иначе: вместо скобок он использует отступы — пробелы в начале строки.

Группа инструкций, объединённых под одной управляющей конструкцией, называется блоком кода. Блок начинается строго после двоеточия в конце заголовочной строки и продолжается до тех пор, пока строки идут с одинаковым углублением. Как только отступ возвращается на предыдущий уровень — блок заканчивается.

Стандарт Python — 4 пробела на каждый уровень вложенности. Технически интерпретатор примет и 2 пробела, и даже один, но в реальных проектах отступ в 4 пробела — это договорённость всего сообщества, и отступать от неё не стоит.

Вот как это выглядит схематично:

заголовок_конструкции:      # двоеточие обязательно
    инструкция_1            # 4 пробела — это блок
    инструкция_2            # тот же отступ — тот же блок
инструкция_вне_блока        # отступ вернулся — блок закончился

Почему это важно понять до знакомства с if? Потому что Python буквально определяет структуру программы по отступам. Если отступ нарушен или непоследователен, интерпретатор выбросит IndentationError и не запустит код вообще. Самая распространённая причина такой ошибки — смешивание пробелов и символов табуляции в одном файле: визуально они выглядят одинаково, но для Python это разные символы.

# Правильно: все отступы — пробелы, 4 штуки
заголовок:
    инструкция_1
    инструкция_2

# Ошибка: первая строка — таб, вторая — пробелы
заголовок:
	инструкция_1      # символ табуляции
    инструкция_2     # 4 пробела
# IndentationError: inconsistent use of tabs and spaces

Практический совет: сразу настройте редактор так, чтобы клавиша Tab автоматически вставляла 4 пробела — тогда этот класс ошибок исчезнет сам по себе.

Концепция блока кода и отступов универсальна для всего Python: она работает одинаково в if, else, циклах for и while, определениях функций. Освоив этот механизм сейчас, вы сможете применять его во всех последующих конструкциях Python — циклах, функциях и других — без дополнительных объяснений.

Ветвление: инструкция if и ветвь else

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

Ветвление — это выбор одной из двух (или более) дорог. Программа вычисляет логическое условие, получает True или False, и в зависимости от результата идёт по одному пути или по другому. Оба пути не выполняются одновременно — программа всегда выбирает ровно один.

В Python базовое ветвление реализуется конструкцией if/else. Вот её синтаксис:

if условие:
    # этот блок выполняется, если условие == True
else:
    # этот блок выполняется, если условие == False

Разберём каждую часть.

Инструкция if открывает конструкцию. После ключевого слова if записывается логическое условие — любое выражение, результат которого True или False. Затем ставится двоеточие. Следующая строка должна начинаться с отступа: это и есть блок, который выполнится, если условие истинно.

Ветвь else — необязательная, но очень частая часть. Её пишут на том же уровне отступа, что и if (то есть без дополнительного углубления), затем двоеточие, и с отступом — блок для случая, когда условие ложно.

Важный момент: else не принимает условие. Он просто означает «во всех остальных случаях». Если условие if оказалось False — выполняется блок else, без каких-либо дополнительных проверок.

Краткая схема работы:

условие истинно (True)  →  выполняется блок if, блок else пропускается
условие ложно (False)   →  блок if пропускается, выполняется блок else

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

Здесь стоит обратить внимание: else не является самостоятельной конструкцией и не может стоять отдельно от if. Это всегда парная запись.

Написание блока if/else: пошаговая процедура и пример

Теперь, когда понятия блока, отступа и ветвления разобраны, можно перейти к самому написанию конструкции. Вот конкретная последовательность шагов, которой стоит придерживаться.

Шаг 1.

Пишем ключевое слово if, затем через пробел — логическое условие, и в самом конце строки ставим двоеточие:

if age >= 18:

Шаг 2. Нажимаем Enter и делаем отступ в 4 пробела. Пишем одну или несколько инструкций — это «истинная» ветвь:

if age >= 18:
    print('Совершеннолетний')

Шаг 3. Возвращаемся на уровень if (убираем отступ) и пишем else с двоеточием:

if age >= 18:
    print('Совершеннолетний')
else:

Шаг 4. Снова отступ 4 пробела — пишем «ложную» ветвь:

if age >= 18:
    print('Совершеннолетний')
else:
    print('Несовершеннолетний')

Шаг 5. Если после блока должен идти код, который выполняется при любом условии, возвращаемся на исходный уровень отступа — без дополнительных пробелов:

if age >= 18:
    print('Совершеннолетний')
else:
    print('Несовершеннолетний')
print('Проверка завершена')  # выполняется всегда

Теперь разберём полный пример целиком. Программа запрашивает возраст у пользователя и выводит разный ответ в зависимости от значения:

age = int(input('Возраст: '))
if age >= 18:
    print('Совершеннолетний')
else:
    print('Несовершеннолетний')

Что здесь происходит по шагам:

  • input('Возраст: ') считывает строку с клавиатуры.
  • int(...) преобразует её в целое число и сохраняет в переменную age.
  • if age >= 18: — Python вычисляет условие. Если age равно, например, 20, результат True и выполняется print('Совершеннолетний').
  • Если age равно 15 — условие False, строка if пропускается, и выполняется print('Несовершеннолетний').

В любом случае выполняется ровно одна из двух строк с print — никогда обе одновременно.

Обратите внимание на деталь: int(input(...)) — это приведение типа, которое вы уже видели в предыдущих уроках. Здесь оно необходимо, потому что input() всегда возвращает строку, а сравнение >= 18 требует числа.

Критерий проверки: если запустить программу и ввести 17 — должно появиться Несовершеннолетний; если ввести 18 — Совершеннолетний. Если вывод соответствует ожидаемому, конструкция написана правильно.

Типичные ошибки при написании if/else

Когда конструкция if/else уже написана и понята в теории, на практике сразу встречаются две ошибки — они случаются чаще всего и обе приводят к тому, что код не запускается вообще.

Пропущенное двоеточие

После условия if и после слова else обязательно стоит двоеточие. Если его забыть — Python выбросит SyntaxError ещё до запуска программы.

# Ошибка: нет двоеточия после условия
age = 20
if age >= 18
    print('Совершеннолетний')
# SyntaxError: expected ':'
# Исправленный вариант
age = 20
if age >= 18:
    print('Совершеннолетний')
else:
    print('Несовершеннолетний')

Ошибка одинаково возникает и после if, и после else — двоеточие обязательно в обоих местах. Редакторы вроде VS Code или PyCharm обычно подчёркивают такую строку красным сразу, не дожидаясь запуска.

Неверный отступ в теле блока

Вторая ошибка — когда строки внутри блока if или else стоят не на том уровне. Python в этом случае выбрасывает IndentationError.

# Ошибка: тело if не сдвинуто
age = 20
if age >= 18:
print('Совершеннолетний')   # нет отступа
# IndentationError: expected an indented block
# Ошибка: непоследовательный отступ внутри блока
if age >= 18:
    print('Проверка пройдена')
  print('Совершеннолетний')   # 2 пробела вместо 4
# IndentationError: unindent does not match any outer indentation level

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

if age >= 18:
	print('Таб')       # символ Tab
    print('Пробелы')   # 4 пробела
# IndentationError: inconsistent use of tabs and spaces in indentation

Как читать сообщения об ошибках

Оба типа ошибок — SyntaxError и IndentationError — всегда указывают номер строки, где Python споткнулся. Это не всегда та строка, где ошибка допущена: например, если пропустить двоеточие в if, интерпретатор может указать на следующую строку. Поэтому при SyntaxError стоит смотреть на строку выше указанной — там обычно и живёт пропущенное двоеточие.

При IndentationError сообщение чуть точнее: Python называет конкретный тип проблемы — expected an indented block (блок вообще не начат), unindent does not match (отступ не совпадает ни с одним уровнем) или inconsistent use of tabs and spaces (смешаны символы). Ориентируясь на эти формулировки, можно сразу понять, что именно исправлять.

Задача 1

Посмотрите на код:

if temperature > 30:
    print('Жарко')
else:
    print('Не жарко')

Переменная temperature = 25. Что выведет программа?

Выберите один вариант
Без регистрации · результат не сохраняется

Задача 2

Какое из утверждений верно описывает ветвь else в Python?

Выберите один вариант
Без регистрации · результат не сохраняется

Задача 3

Посмотрите на код:

score = 55
if score >= 60:
    print('Зачёт')
print('Проверка завершена')

Что выведет программа? (блока else нет)

Выберите один вариант
Без регистрации · результат не сохраняется

Задача 4

Посмотрите на код:

password = input('Пароль: ')
if password == 'secret':
    print('Доступ разрешён')
else:
    print('Доступ запрещён')

Пользователь ввёл Secret (с заглавной буквы). Что выведет программа? Напишите только строку вывода.

Без регистрации · результат не сохраняется

Задача 5

Программист написал следующий код и получил ошибку. Найдите причину:

x = 10
if x > 5
 print('Больше пяти')
Выберите один вариант
Без регистрации · результат не сохраняется

Задача 6

Исправьте отступы в условии

В коде ниже допущена ошибка в оформлении блока if/else. Исправьте только отступы так, чтобы программа работала и печатала нужный результат в зависимости от значения n.

Если число делится на 3 без остатка, программа должна вывести Делится.
Иначе — Не делится.

Не меняйте саму логику проверки.

РешениеPython

Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.

Отправьте решение, чтобы увидеть результаты тестов.

Задачи к уроку

Все задачи курса →

Продолжить с сохранением прогресса

Перейдите к уроку в учебном кабинете.

Перейти к интерактивному уроку