Помните, как вы первый раз пришли на новую работу? Заходите, а HR такой: "Если у тебя есть пропуск — иди налево к лифтам, если нет — топай направо к ресепшену". Вот это и есть условные операторы в программировании! Они дают твоему коду мозги, чтобы он мог решать, что делать, в зависимости от ситуации.
if и else в Python это как руль для машины. Без них твой код это просто тачка, которая едет только прямо и никуда не сворачивает. В этой статье я разберу if, else по косточкам: от самых простых случаев до всяких хитростей, которые юзают продвинутые кодеры.
Этот гайд подойдёт и тем, кто только начинает ковыряться в Python, и тем, кто уже что-то умеет, но хочет подтянуть знания или найти новые фишки для своих задач.
Видеоформат Часть 1:Что такое условные операторы в Python?
Условные операторы в Python — это как развилки на дороге: программа смотрит на условие и решает, куда ей дальше. Представьте, что вы пишете приложение для доставки еды. Если заказ сделан до десяти вечера — принимаем, а если уже ночь на дворе выводим: "Сори, кухня закрыта".
В Python для этого есть три главных слова:
if — проверяет, правда ли условие, и если да, то делает, что сказано.
else — срабатывает, когда в if всё ложь.
Кстати, в Python есть одна фишка, которая вначале бесила: отступы. Это не просто для красоты — они реально решают, какой код к какому if относится. В других языках для этого фигурные скобки используют, а тут пробелы. Помню, как я разок забыл отступ, и программа выдала такую дичь, что я час сидел и не мог разобраться.
if условие:
# Этот код выполнится, если условие истинно
passСинтаксис и базовый пример if-оператора
Начнем с простейшего примера. Допустим, вы создаете программу для банка, которая проверяет, может ли клиент снять деньги с карты:
balance = 1500
withdrawal = 1000
if balance >= withdrawal:
print("Операция разрешена. Выдаем деньги")
balance = balance - withdrawal
print(f"Остаток на счете: {balance}")В этом примере программа проверяет, достаточно ли денег на счете. Если условие balance >= withdrawal истинно, выполняется код в блоке с отступом.
Важный момент: Python использует концепцию "truthiness" и "falsiness". Некоторые значения считаются ложными даже без явного сравнения:
# Ложные значения (falsy)
if 0:
print("Не выполнится")
if "":
print("Пустая строка - тоже не выполнится")
if []:
print("Пустой список - не выполнится")
# Истинные значения (truthy)
if 1:
print("Выполнится!")
if "Привет":
print("Непустая строка - выполнится!")
if [1, 2, 3]:
print("Непустой список - выполнится!")If...Else: Двустороннее принятие решений
В реальной жизни у нас редко бывает только один вариант развития событий. Обычно есть план А и план Б. То же самое в программировании — часто нужно предусмотреть альтернативу.
Вернемся к примеру с банкоматом, но теперь добавим обработку случая, когда денег недостаточно:
balance = 500
withdrawal = 1000
if balance >= withdrawal:
print("Операция разрешена. Выдаем деньги")
balance = balance - withdrawal
else:
print("Недостаточно средств на счете")
print(f"Ваш баланс: {balance}, запрошенная сумма: {withdrawal}")Блок else выполняется только тогда, когда условие в if оказывается ложным. Это гарантирует, что программа обработает любую ситуацию.
Практический пример — проверка возраста для покупки алкоголя:
age = int(input("Введите ваш возраст: "))
if age >= 21:
print("Добро пожаловать! Вы можете совершить покупку")
else:
print("Извините, продажа алкоголя лицам младше 21 года запрещена")Вложенные If-операторы
Иногда логика программы требует проверки условий внутри других условий. Это как матрешка — условие внутри условия. Вложенные if Python позволяют создавать сложную логику.
Пример — система скидок в интернет-магазине:
customer_type = "premium"
order_amount = 150
is_birthday = True
if customer_type == "premium":
print("Клиент категории Premium")
if order_amount >= 100:
discount = 0.15 # 15% скидка
print("Применена скидка 15% за крупную покупку")
if is_birthday:
discount += 0.05 # дополнительная скидка в день рождения
print("Дополнительная скидка 5% в честь дня рождения!")
else:
discount = 0.10 # 10% скидка для премиум-клиентов
print("Применена скидка 10% для Premium-клиента")
else:
if order_amount >= 200:
discount = 0.05 # 5% скидка для крупных заказов
print("Применена скидка 5% за крупную покупку")
else:
discount = 0 # без скидки
print("Скидка не применяется")
final_amount = order_amount * (1 - discount)
print(f"К оплате: {final_amount:.2f} руб.")Однако будьте осторожны — слишком глубокая вложенность делает код сложным для понимания. Если вложенность превышает 3-4 уровня, стоит подумать о рефакторинге кода.
Логические операторы в условных конструкциях
Логические операторы Python позволяют объединять несколько условий в одном выражении. Это как составление сложных предложений в русском языке с союзами "и", "или", "не".
Оператор AND
Оператор and возвращает True только когда ОБА условия истинны:
username = "admin"
password = "secret123"
is_logged_in = False
if username == "admin" and password == "secret123":
is_logged_in = True
print("Добро пожаловать в систему!")
else:
print("Неверные учетные данные")Оператор OR
Оператор or возвращает True, если истинно ХОТЯ БЫ одно условие:
day = "Saturday"
is_holiday = True
if day == "Saturday" or day == "Sunday" or is_holiday:
print("Сегодня выходной!")
else:
print("Рабочий день")Оператор NOT
Оператор not инвертирует значение условия:
email = "user@example.com"
is_valid_email = "@" in email and "." in email
if not is_valid_email:
print("Введите корректный email адрес")
else:
print("Email принят")Короткозамкнутое вычисление (Short-circuit evaluation)
Python умен — он не проверяет второе условие, если результат уже ясен из первого. Это экономит время выполнения:
x = 0
y = 10
# Python не будет проверять y > 5, потому что x уже равно 0
if x > 0 and y > 5:
print("Оба условия истинны")
# Python не будет проверять второе условие, потому что первое уже истинно
if x == 0 or y > 100:
print("Хотя бы одно условие истинно")Однострочные If и тернарный оператор Python
Для простых условий Python предлагает компактный синтаксис. Тернарный оператор Python позволяет записать условие в одну строку:
# Обычная запись
age = 20
if age >= 18:
status = "adult"
else:
status = "minor"
# Тернарный оператор (однострочный if Python)
status = "adult" if age >= 18 else "minor"
print(status) # adultОднако не стоит злоупотреблять тернарными операторами. Если логика сложная, лучше использовать обычные if-else для читаемости кода.
Использование If с циклами и функциями
Условные операторы Python часто работают в связке с циклами и функциями, создавая мощные инструменты для обработки данных.
If с циклами
# Фильтрация списка email адресов
emails = ["user@example.com", "invalid-email", "admin@site.org", "", "test@domain.com"]
valid_emails = []
for email in emails:
if "@" in email and "." in email and len(email) > 5:
valid_emails.append(email)
else:
print(f"Пропущен некорректный email: {email}")
print("Валидные email адреса:", valid_emails)
# Поиск в списке с условием
products = [
{"name": "iPhone", "price": 80000, "category": "phones"},
{"name": "MacBook", "price": 150000, "category": "laptops"},
{"name": "Samsung Galaxy", "price": 60000, "category": "phones"}
]
print("Телефоны дешевле 70000:")
for product in products:
if product["category"] == "phones" and product["price"] < 70000:
print(f"- {product['name']}: {product['price']} руб.")If внутри функций
def grade_students(students_scores):
"""Функция для выставления оценок студентам"""
graded_students = []
for student, score in students_scores.items():
if score >= 90:
grade = "A"
status = "Отличник"
else:
if score >= 80:
grade = "B"
status = "Хорошист"
else:
if score >= 70:
grade = "C"
status = "Троечник"
else:
grade = "F"
status = "Требуется пересдача"
graded_students.append({
"name": student,
"score": score,
"grade": grade,
"status": status
})
return graded_students
# Использование функции
scores = {
"Анна": 95,
"Иван": 78,
"Мария": 88,
"Петр": 65
}
results = grade_students(scores)
for student in results:
print(f"{student['name']}: {student['score']} баллов - {student['grade']} ({student['status']})")Частые ошибки и как их избежать
За годы обучения программированию на Python я видел одни и те же ошибки у новичков. Вот самые распространенные из них:
1. Неправильные отступы
# НЕПРАВИЛЬНО
if 5 > 3:
print("Это вызовет ошибку IndentationError")
# ПРАВИЛЬНО
if 5 > 3:
print("Теперь все работает")2. Использование = вместо ==
# НЕПРАВИЛЬНО - присваивание вместо сравнения
x = 10
if x = 5: # SyntaxError!
print("Ошибка")
# ПРАВИЛЬНО
if x == 5:
print("Правильное сравнение")3. Сложные вложенные условия
# ПЛОХО - трудно читать и понимать
if user.is_authenticated():
if user.has_permission('read'):
if document.is_available():
if user.subscription.is_active():
if not document.is_private() or user.id == document.owner_id:
return document.content
# ЛУЧШЕ - используйте функции для разбиения логики
def can_access_document(user, document):
if not user.is_authenticated():
return False
if not user.has_permission('read'):
return False
if not document.is_available():
return False
if not user.subscription.is_active():
return False
if document.is_private() and user.id != document.owner_id:
return False
return True
if can_access_document(user, document):
return document.content4. Неправильное понимание truthy/falsy
# Потенциальная ошибка
items = []
if items: # Пустой список - falsy
print("У нас есть товары")
else:
print("Товаров нет") # Выполнится это
# Более явная проверка
if len(items) > 0:
print("У нас есть товары")
else:
print("Товаров нет")Заключение
if и else в Python — это как основа основ, без них ни один проект не взлетит. Мы прошлись по всему, что нужно знать про условные операторы: от простого if до всяких замороченных вложенных конструкций и хитрых тернарных операторов.
Вот что стоит заучить:
- Отступы — это святое в Python, не лажайте с пробелами.
- Юзайте and, or, not, чтобы склеивать условия.
- Не забывайте про штуки типа truthy и falsy — они реально выручают.
- Не закапывайтесь в кучу вложенных условий, а то код станет как лабиринт.
- Тернарный оператор — это как лайфхак для простых проверок.
Теперь пора засунуть руки в код! Напишите свою программку с if и else. Начните с чего-то лёгкого, типа проверки возраста для входа в клуб, а потом усложняйте. Я сам так учился — писал простенькие штуки, ломал их, психовал, но в итоге всё в голове уложилось.
Если вы только начинаете кодить, не зацикливайтесь только на условиях. Погрузитесь в циклы, функции, списки, словари — это всё база. А если хотите реально прокачаться в Python и стать профи, зацените интерактивный курс на JavaRush. Там куча задачек и проектов, которые прям вдалбливают материал.
А для тех, кто мечтает сделать кодинг своей профессией и быстро вырасти до миддла, гляньте Python-университет от JavaRush. Это прям убойная программа с менторами, которая за 12 месяцев превратит вас в полноценного специалиста.
Удачи в кодинге! Помните: без практики всё это — просто слова.
| Что еще почитать: |
|---|
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ