Условие — программа принимает решение. Цикл — программа повторяет одно действие много раз. Это два механизма, которые превращают список команд в настоящую логику.
Программа должна вести себя по-разному в зависимости от ситуации. Когда ты открываешь Instagram — если ты залогинена, показывается лента. Если нет — экран входа. Это условие.
Аналогия: Турникет в метро. Если карта приложена и деньги есть — пропускает. Если нет — блокирует. Одно действие, два разных результата в зависимости от условия.
# if = "если"
# Проверяем условие. Если True — выполняем код внутри.
age = 25
if age >= 18:
print("Доступ разрешён")
# age >= 18 — это условие (25 >= 18 → True)
# Код с отступом — то, что выполнится если условие True
# else = "иначе" — что делать, если условие False
is_premium = False
if is_premium:
print("Смотри без рекламы")
else:
print("Смотри с рекламой")
# is_premium = False, значит выполнится 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
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. Что ты делаешь?
Ты не делаешь 100 разных действий. Ты делаешь одно действие (открыть и прочитать), но повторяешь его для каждого сообщения.
В коде — то же самое. Ты не пишешь 100 строк. Ты пишешь одну инструкцию и говоришь: "сделай это для каждого элемента".
# У тебя есть список сообщений
messages = ["Привет", "Как дела?", "Ты идёшь?"]
# Без цикла — пишешь вручную для каждого
print(messages[0]) # Привет
print(messages[1]) # Как дела?
print(messages[2]) # Ты идёшь?
# С циклом — одна инструкция, работает для всех
for msg in messages:
print(msg)
# Результат тот же, но если сообщений 1000 — цикл справится,
# а вручную ты 1000 строк не напишешь
# for = "для каждого"
# Берёт элементы из списка по одному и выполняет действие с каждым
friends = ["Аня", "Макс", "Дима"]
for friend in friends:
print(f"Привет, {friend}!")
# friend — временная переменная, меняется на каждом шаге:
# Шаг 1: friend = "Аня" → "Привет, Аня!"
# Шаг 2: friend = "Макс" → "Привет, Макс!"
# Шаг 3: friend = "Дима" → "Привет, Дима!"
# 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 = "пока"
# Повторяет действие, пока условие 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 = "стоп, выходим из цикла прямо сейчас"
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")
Задача 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)
Задача 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: функции. Научишься создавать свои действия и вызывать их по имени.