Отступы — это синтаксис
Главная визуальная особенность Python: блоки кода выделяются не фигурными скобками, а отступами. Стандарт — 4 пробела. Все строки одного блока должны иметь одинаковый отступ:
age = 20
if age >= 18:
print("Совершеннолетний") # внутри блока if
print("Доступ разрешён") # тоже внутри
print("Эта строка выполнится всегда") # вне блока if
Отсутствие или лишний отступ — это IndentationError, одна из
самых частых ошибок новичков. Поэтому настройте редактор так, чтобы клавиша
Tab вставляла 4 пробела (в VS Code так по умолчанию).
Условие if / elif / else
Условный оператор выбирает ветку выполнения в зависимости от истинности выражения:
score = 75
if score >= 90:
grade = "Отлично"
elif score >= 70:
grade = "Хорошо"
elif score >= 50:
grade = "Удовлетворительно"
else:
grade = "Неуд"
print(f"Оценка: {grade}") # Оценка: Хорошо
if— первая проверка (обязательно).elif— дополнительные проверки (от нуля и больше).else— ветка «иначе», без условия (может отсутствовать).
Python проверяет условия сверху вниз и выполняет только первый подошедший блок. Поэтому порядок важен: частые случаи ставьте выше.
Вложенные условия
age = 25
has_ticket = True
if age >= 18:
if has_ticket:
print("Проход разрешён")
else:
print("Нужен билет")
else:
print("Только для взрослых")
Глубокие вложенности лучше избегать — их можно переписать через
and/or или ранний return в функциях.
Истинность значений
В условии можно указать не только bool — Python сам
преобразует значение. Ложными (falsy) считаются: 0,
0.0, "", None, пустые коллекции
([], {}). Всё остальное — истинно:
name = ""
if name:
print(f"Привет, {name}")
else:
print("Имя не задано") # выполнится это
Цикл for
Цикл for перебирает элементы любой последовательности
(строки, списка, диапазона):
# Перебор строки
for char in "Python":
print(char)
# P y t h o n (каждый символ с новой строки)
# Перебор списка
fruits = ["яблоко", "банан", "груша"]
for fruit in fruits:
print(fruit)
range() — диапазон чисел
Функция range() генерирует последовательность чисел. Идеальна
для цикла «N раз»:
for i in range(5): # 0, 1, 2, 3, 4
print(i)
for i in range(2, 6): # 2, 3, 4, 5 (старт, стоп)
print(i)
for i in range(0, 10, 2): # 0, 2, 4, 6, 8 (старт, стоп, шаг)
print(i)
enumerate() — индекс и значение
Часто нужен не только элемент, но и его номер. Вместо ручного счётчика
используйте enumerate():
fruits = ["яблоко", "банан", "груша"]
for index, fruit in enumerate(fruits):
print(f"{index + 1}. {fruit}")
# 1. яблоко
# 2. банан
# 3. груша
Цикл while
Цикл while повторяется, пока условие истинно. Используется,
когда заранее неизвестно, сколько итераций нужно:
count = 3
while count > 0:
print(f"Осталось: {count}")
count -= 1
print("Пуск!")
Опасность: если условие никогда не станет ложным, цикл зациклится навсегда. Поэтому всегда продумывайте, что меняет условие внутри цикла.
# Бесконечный цикл (так делать НЕ надо без break)
# while True:
# print("бесконечно")
break и continue
break— немедленно прерывает цикл.continue— пропускает оставшуюся часть итерации и переходит к следующей.
# Найти первое число, кратное 7
for n in range(1, 100):
if n % 7 == 0:
print(f"Нашли: {n}") # 7
break
# Пропустить нечётные
for n in range(5):
if n % 2 != 0:
continue
print(n) # 0, 2, 4
Цикл с else (редкая, но полезная фича)
У Python-цикла есть блок else, который выполняется, если цикл
завершился без break:
for n in range(2, 10):
if 10 % n == 0:
print(f"Делитель: {n}")
break
else:
print("Делителей нет") # не выполнится, т.к. был break
Вложенные циклы
Цикл внутри цикла — для двумерных структур (таблицы, матрицы):
# Таблица умножения
for i in range(1, 4):
for j in range(1, 4):
print(f"{i} x {j} = {i * j}", end=" ")
print() # переход на новую строку
Конструкция match / case (Python 3.10+)
match — это аналог switch в других языках. Удобен,
когда нужно сравнить значение с несколькими вариантами:
command = input("> ")
match command:
case "start":
print("Запускаем")
case "stop":
print("Останавливаем")
case "help":
print("Доступные команды: start, stop, help")
case _:
print("Неизвестная команда")
_ — это «wildcard», срабатывает, если ни один вариант не
подошёл (аналог else).
Сопоставление с образцом
match умеет не просто сравнивать значения, но и разбирать
структуру:
point = (3, 4)
match point:
case (0, 0):
print("Начало координат")
case (x, 0):
print(f"На оси X: {x}")
case (0, y):
print(f"На оси Y: {y}")
case (x, y):
print(f"Точка: ({x}, {y})")
Кейс из реального проекта: меню CLI-приложения
Типичный сценарий — главное меню программы, которое крутится в цикле и
реагирует на команды пользователя. Здесь сошлись while,
match и break:
tasks = []
while True:
print("\n--- Менеджер задач ---")
print("1. Добавить задачу")
print("2. Показать задачи")
print("3. Выйти")
choice = input("Выбор: ")
match choice:
case "1":
title = input("Название задачи: ")
tasks.append(title)
print(f"Добавлено: {title}")
case "2":
if not tasks:
print("Список пуст")
else:
for i, task in enumerate(tasks, start=1):
print(f"{i}. {task}")
case "3":
print("До свидания!")
break
case _:
print("Неизвестный выбор")
Это уже почти готовый скелет финального проекта курса — в главе 10 мы его доведём до ума.
Типичные ошибки
1. Забытый символ двоеточия
# if age > 18 # SyntaxError: expected ':'
if age > 18: # правильно
...
2. Отступ после двоеточия
if age > 18:
print("Совершеннолетний") # IndentationError
3. Зацикливание while
count = 5
while count > 0:
print(count)
# забыли count -= 1 — будет бесконечный цикл
Практика
- Напишите программу, которая по числу от 1 до 12 выводит название времени года.
- Посчитайте сумму всех чисел от 1 до 100 через
forиrange(). - Дано число. Выведите его цифры в обратном порядке через
whileи% 10. - Найдите все простые числа до 50 (с
breakво внутреннем цикле). - Напишите простое меню через
matchс командамиadd,list,exit.
Итог
Мы изучили управляющие конструкции Python: условный оператор
if/elif/else, циклы for (перебор и range)
и while, break/continue и современную
конструкцию match/case. Запомните: отступы в Python — это
синтаксис, двоеточие перед блоком обязательно. В следующей главе переходим к
первой структуре данных — спискам и кортежам.