← НАЗАД К КУРСУ Этап 1 · Урок 5 из 8

Урок 1.4 — Python: условия и циклы

Условие — программа принимает решение. Цикл — программа повторяет одно действие много раз. Это два механизма, которые превращают список команд в настоящую логику.


Условия (if / else)

Что это и зачем

Программа должна вести себя по-разному в зависимости от ситуации. Когда ты открываешь Instagram — если ты залогинена, показывается лента. Если нет — экран входа. Это условие.

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

# if = "если"
# Проверяем условие. Если True — выполняем код внутри.

age = 25

if age >= 18:
    print("Доступ разрешён")
# age >= 18 — это условие (25 >= 18 → True)
# Код с отступом — то, что выполнится если условие True

if / else — если да / если нет

# else = "иначе" — что делать, если условие False

is_premium = False

if is_premium:
    print("Смотри без рекламы")
else:
    print("Смотри с рекламой")

# is_premium = False, значит выполнится else
# → "Смотри с рекламой"

if / elif / else — несколько вариантов

# elif = "else if" = "а если вот это?"
# Когда вариантов больше двух

followers = 5000

if followers >= 1000000:
    status = "Звезда"
elif followers >= 10000:
    status = "Блогер"
elif followers >= 1000:
    status = "Активный"
else:
    status = "Новичок"

print(f"Статус: {status}")
# followers = 5000, подходит третье условие (>= 1000)
# → "Статус: Активный"

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

Условие — это вопрос, на который ответ True или False:

a = 10
b = 20

a == b    # равно?           → False
a != b    # не равно?        → True
a > b     # больше?          → False
a < b     # меньше?          → True
a >= 10   # больше или равно? → True
a <= 5    # меньше или равно? → False

and, or, not — комбинирование условий

age = 25
has_ticket = True

# and = "и" — оба условия должны быть True
if age >= 18 and has_ticket:
    print("Проходи")
# 25 >= 18? True. has_ticket? True. Оба True → проходим.

# or = "или" — хотя бы одно условие True
is_vip = False
has_invite = True

if is_vip or has_invite:
    print("Добро пожаловать")
# is_vip? False. has_invite? True. Одно True → заходим.

# not = "не" — переворачивает True ↔ False
is_banned = False

if not is_banned:
    print("Можешь писать комментарии")
# not False → True → выполняется

Циклы

Что это и зачем

Цикл — это когда программа делает одно и то же действие много раз подряд, каждый раз с новыми данными.

Представь: у тебя 100 непрочитанных сообщений в Telegram. Что ты делаешь?

  1. Открыла сообщение → прочитала
  2. Открыла следующее → прочитала
  3. Открыла следующее → прочитала
  4. ...и так 100 раз

Ты не делаешь 100 разных действий. Ты делаешь одно действие (открыть и прочитать), но повторяешь его для каждого сообщения.

В коде — то же самое. Ты не пишешь 100 строк. Ты пишешь одну инструкцию и говоришь: "сделай это для каждого элемента".

# У тебя есть список сообщений
messages = ["Привет", "Как дела?", "Ты идёшь?"]

# Без цикла — пишешь вручную для каждого
print(messages[0])   # Привет
print(messages[1])   # Как дела?
print(messages[2])   # Ты идёшь?

# С циклом — одна инструкция, работает для всех
for msg in messages:
    print(msg)

# Результат тот же, но если сообщений 1000 — цикл справится,
# а вручную ты 1000 строк не напишешь

for — для каждого элемента сделай

# for = "для каждого"
# Берёт элементы из списка по одному и выполняет действие с каждым

friends = ["Аня", "Макс", "Дима"]

for friend in friends:
    print(f"Привет, {friend}!")

# friend — временная переменная, меняется на каждом шаге:
# Шаг 1: friend = "Аня"  → "Привет, Аня!"
# Шаг 2: friend = "Макс" → "Привет, Макс!"
# Шаг 3: friend = "Дима" → "Привет, Дима!"

for с числами — range()

# range(5) = числа от 0 до 4 (не включая 5)
# Когда нужно повторить действие определённое количество раз

for i in range(5):
    print(f"Сообщение #{i}")

# i меняется: 0, 1, 2, 3, 4
# → Сообщение #0
# → Сообщение #1
# → Сообщение #2
# → Сообщение #3
# → Сообщение #4

# range(1, 6) = от 1 до 5
for i in range(1, 6):
    print(f"День {i}")
# → День 1, День 2, День 3, День 4, День 5

while — пока условие верно, повторяй

# while = "пока"
# Повторяет действие, пока условие True

attempts = 3

while attempts > 0:
    print(f"Осталось попыток: {attempts}")
    attempts = attempts - 1

# Шаг 1: attempts=3, 3>0? True  → "Осталось попыток: 3", attempts стало 2
# Шаг 2: attempts=2, 2>0? True  → "Осталось попыток: 2", attempts стало 1
# Шаг 3: attempts=1, 1>0? True  → "Осталось попыток: 1", attempts стало 0
# Шаг 4: attempts=0, 0>0? False → стоп, выходим

Аналогия: Ввод пароля на телефоне. Телефон даёт попытки, пока (while) они не закончатся. Каждая неверная попытка — минус одна. Когда попытки = 0 — блокировка.


break — остановить цикл досрочно

# break = "стоп, выходим из цикла прямо сейчас"

messages = ["привет", "как дела", "стоп", "это не прочитается"]

for msg in messages:
    if msg == "стоп":
        print("Встретили стоп, прекращаем")
        break
    print(f"Читаем: {msg}")

# → Читаем: привет
# → Читаем: как дела
# → Встретили стоп, прекращаем
# "это не прочитается" — до него цикл не дошёл

Условия + циклы вместе

Это основа логики любой программы:

# Проверяем список пользователей и решаем, кому дать доступ

users = [
    {"name": "Аня", "age": 22, "is_premium": True},
    {"name": "Макс", "age": 16, "is_premium": False},
    {"name": "Дима", "age": 30, "is_premium": False},
    {"name": "Лена", "age": 14, "is_premium": True},
]

for user in users:
    if user["age"] >= 18:
        if user["is_premium"]:
            print(f"{user['name']} — полный доступ")
        else:
            print(f"{user['name']} — базовый доступ")
    else:
        print(f"{user['name']} — доступ запрещён (возраст)")

# → Аня — полный доступ
# → Макс — доступ запрещён (возраст)
# → Дима — базовый доступ
# → Лена — доступ запрещён (возраст)

Отступы — это важно

В Python отступ (4 пробела) — это часть языка. Отступ показывает, какой код находится внутри if, for, while:

# Правильно — print внутри if (есть отступ)
if True:
    print("Я внутри условия")

# Неправильно — ошибка!
if True:
print("Нет отступа — Python не поймёт")
# → IndentationError

Практика

Создай файл logic.py:

# Система уведомлений
notifications = [
    {"type": "like", "from": "Аня"},
    {"type": "comment", "from": "Макс"},
    {"type": "follow", "from": "Дима"},
    {"type": "like", "from": "Лена"},
    {"type": "message", "from": "Аня"},
]

for notif in notifications:
    if notif["type"] == "like":
        print(f"Лайк от {notif['from']}")
    elif notif["type"] == "comment":
        print(f"Комментарий от {notif['from']}")
    elif notif["type"] == "follow":
        print(f"Подписка от {notif['from']}")
    elif notif["type"] == "message":
        print(f"Сообщение от {notif['from']}")

Запусти: python3 logic.py


Задачки на закрепление

Задача 1: Что выведет этот код?

x = 15

if x > 20:
    print("A")
elif x > 10:
    print("B")
elif x > 5:
    print("C")
else:
    print("D")
Ответ `B` — потому что 15 > 20 нет, но 15 > 10 да. Python останавливается на первом подходящем условии и не проверяет остальные.

Задача 2: Напиши цикл, который выведет числа от 1 до 5.

Ответ
for i in range(1, 6):
    print(i)
`range(1, 6)` — от 1 до 5 (6 не включается).

Задача 3: Есть список оценок. Посчитай, сколько из них больше или равны 4.

grades = [5, 3, 4, 2, 5, 4, 3, 5]
Ответ
grades = [5, 3, 4, 2, 5, 4, 3, 5]
count = 0

for grade in grades:
    if grade >= 4:
        count = count + 1

print(f"Хороших оценок: {count}")
# → Хороших оценок: 5

Задача 4: Что делает этот код? Объясни словами.

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

for n in numbers:
    if n % 2 == 0:
        print(n)
Ответ Выводит только чётные числа: 2, 4, 6, 8, 10. `n % 2` — остаток от деления на 2. Если остаток 0 — число чётное.

Задача 5: Напиши код, который проходит по списку и останавливается, когда встречает "exit".

commands = ["start", "run", "exit", "stop"]
Ответ
commands = ["start", "run", "exit", "stop"]

for cmd in commands:
    if cmd == "exit":
        print("Выходим!")
        break
    print(f"Выполняю: {cmd}")

# → Выполняю: start
# → Выполняю: run
# → Выходим!

Глоссарий

Термин Что значит
if / elif / else Конструкция для принятия решений: «если — иначе если — иначе»
Условие Выражение, которое даёт True или False и определяет, какой код выполнится
Сравнение (==, !=, <, >) Операторы, которые сравнивают два значения и возвращают True или False
Логические операторы (and, or, not) Слова для объединения нескольких условий: «и», «или», «не»
Цикл for Цикл, который проходит по каждому элементу списка или другой коллекции
Цикл while Цикл, который повторяется, пока условие остаётся True
range() Функция, которая создаёт последовательность чисел для цикла for
break Команда, которая немедленно останавливает цикл
continue Команда, которая пропускает текущий шаг цикла и переходит к следующему
Итерация Один проход (повторение) внутри цикла
Вложенный цикл Цикл внутри другого цикла — внутренний выполняется полностью на каждом шаге внешнего
Индекс Порядковый номер элемента в списке, начинается с 0
enumerate() Функция, которая при переборе списка даёт и индекс, и значение одновременно

Главное

1. if / elif / else — программа выбирает, что делать, в зависимости от условия.
2. Условие — это выражение, которое равно True или False.
3. Сравнения (==, !=, <, >) и логические операторы (and, or, not) — строительные блоки условий.
4. Цикл for — перебирает элементы коллекции один за другим.
5. Цикл while — повторяет код, пока условие истинно (осторожно с бесконечными циклами!).
6. range() — генерирует числа для for: range(5) → 0, 1, 2, 3, 4.
7. break останавливает цикл, continue пропускает текущий шаг.
8. enumerate() — удобный способ получить и индекс, и значение в цикле.
9. Циклы можно вкладывать друг в друга — внутренний крутится полностью на каждом шаге внешнего.

Что дальше?

В следующем уроке — Python: функции. Научишься создавать свои действия и вызывать их по имени.

← ПРЕДЫДУЩИЙ СЛЕДУЮЩИЙ →