Практические задания по if-else в Python для разработчиков
Основные задачи на условные операторы if-else
Условные операторы if-else являются базовым инструментом для принятия решений в Python. Они позволяют выполнять разные блоки кода в зависимости от истинности условий. Существует несколько подходов к организации ветвления, каждый из которых имеет свои сильные стороны и ограничения. Далее рассмотрены основные методы с примерами и типичными ошибками.
Классический if-elif-else
Как обработать несколько взаимоисключающих условий?
Это самый читаемый и универсальный способ. Пример: определение категории возраста.
age = 25
if age < 13:
category = 'ребенок'
elif age < 18:
category = 'подросток'
elif age < 60:
category = 'взрослый'
else:
category = 'пенсионер'
print(category)алгоритм решения задачи python (алгоритм решения задачи на python)
взрослый
базовые задачи python (базовые задачи python)
Пояснение: условия проверяются последовательно сверху вниз. Первое истинное условие выполняется, остальные игнорируются.
Типичные ошибки:
- Неверный порядок: если поставить условие age < 60 перед age < 13, то для возраста 10 лет первым будет истинным age < 60, и категория станет 'взрослый'.
- Пропуск двоеточия после условия или блока else.
- Использование else с условием – конструкция else if в Python не существует, только elif.
Как избежать: всегда выстраивать условия от более строгих к менее строгим; использовать редактор с подсветкой синтаксиса.
Тернарный оператор (условное выражение)
Как выполнить простой выбор в одной строке?
Тернарный оператор имеет вид value_if_true if condition else value_if_false. Он идеален для простого присваивания, когда ветки короткие.
x = 10
result = 'положительное' if x > 0 else ('отрицательное' if x < 0 else 'ноль')
print(result)
задачи для обучения python (задачи для обучения python)
положительное
задачи на классы в python (задачи на классы в python)
Вложенные тернарные операторы допустимы, но снижают читаемость. Лучше использовать if-elif-else для более чем двух вариантов.
Ошибки:
- Попытка использовать тернарный оператор для сложной логики с побочными эффектами.
- Забывание else – синтаксическая ошибка.
Рекомендация: применять только для одной пары веток, избегая вложенности.
Структурное сопоставление match-case (Python 3.10+)
Как красиво обрабатывать несколько конкретных значений?
Оператор match-case сравнивает значение с шаблонами. Он удобен для замены множества elif при проверке равенства.
command = 'stop'
match command:
case 'start':
print('Запуск')
case 'stop':
print('Остановка')
case 'restart':
print('Перезапуск')
case _:
print('Неизвестная команда')множество python задачи (задачи на множества в python)
Остановка
задачи на модули python (задачи на модули в python)
Шаблоны могут включать объединение (|), захват переменных и распаковку.
Типичные ошибки:
- Синтаксис старой версии Python – код не запустится на версиях ниже 3.10.
- Забывание символа подчёркивания _ для default-ветки.
- Использование match-case для условий с операторами сравнения (>, <) – для этого нужен if внутри case.
Цель: улучшение читаемости при большом количестве проверок констант.
Словарь функций (dispatch dictionary)
Как организовать выбор действия без цепочки if-elif?
Вместо длинного if-elif можно использовать словарь, где ключи – возможные значения, а значения – функции (или лямбды).
def add(a, b): return a + b
def sub(a, b): return a - b
actions = {'+': add, '-': sub}
op = '+'
if op in actions:
result = actions[op](5, 3)
else:
result = None
print(result)задачи на операторы в python (задачи на операторы в python)
8
задачи на последовательности python (задачи на последовательности в python)
Этот подход легко расширяется и быстрее работает при большом количестве случаев.
Ошибки:
- Отсутствие проверки наличия ключа – вызовет KeyError.
- Сложность отладки, если функции содержат много кода.
Использование: когда число веток велико и меняется динамически.
Вложенные if-else
Как проверить несколько условий, когда одно зависит от другого?
Вложение if-else позволяет создавать иерархическую логику. Однако излишняя вложенность ухудшает читаемость.
num = 15
if num > 0:
if num % 2 == 0:
print('Положительное чётное')
else:
print('Положительное нечётное')
else:
print('Неположительное')задачи на списки python (задачи на списки в python)
Положительное нечётное
пробелы python задача (задача на пробелы в строке python)
В Python лучше избегать глубокой вложенности (более 2-3 уровней) – вместо этого можно объединить условия через and или вынести логику в отдельные функции.
Ошибки:
- Путаница в отступах – каждый уровень должен быть строго выровнен.
- Слишком много уровней вложенности затрудняет понимание.
Совет: использовать составные условия (and, or) или ранний выход из функции.
Использование all() и any() для нескольких условий
Как проверить, что все (или хотя бы одно) из нескольких условий истинны?
Функции all() и any() принимают итерируемый объект с булевыми значениями и возвращают True, если все (или хотя бы одно) True соответственно.
ages = [22, 25, 18, 30]
if all(age >= 18 for age in ages):
print('Все совершеннолетние')
if any(age > 60 for age in ages):
print('Есть пенсионер')задачи на if else python (задачи на условные операторы if-else в python)
Все совершеннолетние
Это эффективный способ проверки набора условий без циклов.
Ошибки:
- Передача пустой последовательности – all([]) возвращает True, any([]) False, что может быть неочевидно.
- Забывание генератора – нужно передать выражение генератора, а не результат сравнения.
Цель: компактная проверка большого числа условий.
Дополнительные примеры с if-else
Здесь приведены более сложные и редко встречающиеся в учебниках задачи, демонстрирующие различные аспекты использования условных операторов.
Определение високосного года
Год является високосным, если он делится на 400, или делится на 4, но не на 100. Реализация с if-else:
year = 2024
if (year % 400 == 0) or (year % 4 == 0 and year % 100 != 0):
print(f'{year} високосный')
else:
print(f'{year} не високосный')
2024 високосный
Решение квадратного уравнения
Вычисление корней ax^2+bx+c=0 с проверкой дискриминанта.
import math
a, b, c = 1, -3, 2
disc = b**2 - 4*a*c
if disc > 0:
x1 = (-b + math.sqrt(disc)) / (2*a)
x2 = (-b - math.sqrt(disc)) / (2*a)
print('Два корня:', x1, x2)
elif disc == 0:
x = -b / (2*a)
print('Один корень:', x)
else:
print('Нет действительных корней')
Два корня: 2.0 1.0
Фильтрация списка с несколькими условиями
Отбор чисел, которые делятся на 3 и больше 10.
numbers = [12, 9, 15, 7, 18, 3, 21]
filtered = [n for n in numbers if n % 3 == 0 and n > 10]
print(filtered)
[12, 15, 18, 21]
Проверка сложного пароля
Пароль должен содержать не менее 8 символов, хотя бы одну цифру и хотя бы одну заглавную букву.
password = 'Pass1234'
has_upper = any(c.isupper() for c in password)
has_digit = any(c.isdigit() for c in password)
if len(password) >= 8 and has_upper and has_digit:
print('Надёжный пароль')
else:
print('Слабый пароль')
Надёжный пароль
Генератор последовательности с условиями
Генератор, возвращающий 'Fizz' для чисел кратных 3, 'Buzz' для кратных 5, 'FizzBuzz' для кратных 15, иначе само число.
def fizzbuzz(n):
for i in range(1, n+1):
if i % 15 == 0:
yield 'FizzBuzz'
elif i % 3 == 0:
yield 'Fizz'
elif i % 5 == 0:
yield 'Buzz'
else:
yield i
list(fizzbuzz(16))
[1, 2, 'Fizz', 4, 'Buzz', 'Fizz', 7, 8, 'Fizz', 'Buzz', 11, 'Fizz', 13, 14, 'FizzBuzz', 16]