Условный оператор if...else. Основы работы с ветвлениями
Условный оператор if...else в Python
\nУсловный оператор if (и его расширения else, elif) позволяет выполнять разные блоки кода в зависимости от логического условия. Базовый синтаксис:
\nif условие:\n # действия если True\nelif другое_условие:\n # действия если первое False, а это True\nelse:\n # действия если все условия False
оператор case в python (оператор case (match) в python)
\nКлючевые правила:
\n- \n
- После условия обязательно ставится двоеточие. \n
- Тело условия выделяется отступом (обычно 4 пробела). \n
- elif может быть сколько угодно, else только один (опционально). \n
Цель: управление потоком программы на основе проверки значений переменных, результатов выражений или логических флагов.
\nПример простейшего if-else:
\nx = 10\nif x > 5:\n result = \"больше 5\"\nelse:\n result = \"меньше или равно 5\"\nprint(result)
Match case python (конструкция match-case в python)
\nбольше 5
операторы ветвления в языке python (условные операторы в python)
\nКак записать короткое условие в одну строку? (Тернарный оператор)
\nТернарный оператор имеет вид "значение_если_True if условие else значение_если_False". Подходит для простых присваиваний.
\nage = 20\nstatus = \"совершеннолетний\" if age >= 18 else \"несовершеннолетний\"
Return s s python (оператор return в python)
\nТипичная ошибка: попытка поместить в тернарный оператор сложные блоки с несколькими операторами. Рекомендуется использовать только для простых выражений.
\nКак проверить несколько условий подряд? (цепочка if-elif-else)
\nКогда нужно выбрать один из многих вариантов, используется последовательность if – elif – ... – else. Условия проверяются сверху вниз, выполняется только первый блок, чьё условие истинно.
\nscore = 85\nif score >= 90:\n grade = \"A\"\nelif score >= 75:\n grade = \"B\"\nelif score >= 60:\n grade = \"C\"\nelse:\n grade = \"F\"
оператор выбора в python (оператор выбора if в python)
\nТипичная ошибка: использование отдельных if вместо elif – тогда все условия проверяются независимо, и может выполниться более одного блока.
\nКак проверить несколько условий одновременно (логические И/ИЛИ)?
\nИспользуются операторы and, or, not. Условия можно комбинировать.
\nx = 7\nif x > 0 and x < 10:\n print(\"x однозначное положительное\")
Python пустая команда (пустая команда pass в python)
\nТипичная ошибка: путаница с приоритетом. "and" имеет более высокий приоритет, чем "or", поэтому без скобок "a or b and c" интерпретируется как "a or (b and c)". Рекомендуется явно расставлять скобки.
\nКак проверить вхождение элемента в коллекцию? (оператор in)
\nОператор in проверяет наличие элемента в списке, кортеже, строке, множестве или словаре (по ключам).
\nfruits = [\"яблоко\", \"банан\", \"груша\"]\nif \"банан\" in fruits:\n print(\"банан есть в списке\")
как на языке python записывается полное ветвление (полное ветвление в python)
\nТипичная ошибка: проверка наличия значения в словаре через in проверяет ключи, а не значения. Для проверки значений нужно использовать .values().
\nКак проверить, что переменная не равна None?
\nИдиоматичный способ – использовать if var is not None или просто if var: (если нужно также отсеять ложные значения 0, пустые строки и т.д.).
\ndata = get_data()\nif data is not None:\n process(data)
циклы в python примеры (примеры циклов в python)
\nТипичная ошибка: использование if data != None – это работает, но не соответствует стандарту PEP 8, рекомендуется is not.
\nКак реализовать вложенные условия?
\nОдин if может находиться внутри другого. Такая конструкция применяется, когда необходимо сначала проверить одно условие, и только если оно истинно, перейти к следующей проверке.
\nage = 25\nhas_license = True\nif age >= 18:\n if has_license:\n print(\"Можно водить автомобиль\")\n else:\n print(\"Нет прав\")\nelse:\n print(\"Слишком молод\")
программа с циклом while python (программа с циклом while на python)
\nТипичная ошибка: излишняя вложенность усложняет читаемость. Для неглубоких ветвлений лучше использовать and или вынести проверки в отдельные переменные.
\nКак использовать if внутри спискового включения (list comprehension)?
\nФильтрация элементов при построении списка: [выражение for элемент in коллекция if условие].
\nnumbers = [1, 2, 3, 4, 5, 6]\nevens = [n for n in numbers if n % 2 == 0]\nprint(evens)
For и while python в чем разница (разница между циклами for и while в python)
\n[2, 4, 6]\n
Типичная ошибка: попытка добавить else в фильтр – в списковых включениях else не поддерживается в части условия; для ветвления нужно использовать тернарный оператор в выражении.
\nРасширенные примеры условных операторов в Python
\n\nПример 1. Проверка високосного года
\nУсловие високосного года: делится на 4, но не на 100, либо делится на 400.
\nyear = 2024\nif (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):\n result = \"високосный\"\nelse:\n result = \"не високосный\"\nprint(f\"{year} - {result}\")\n2024 - високосный\n
Пояснение: используются логические операторы and и or для комбинации условий. Скобки явно задают порядок вычисления.
\n\nПример 2. Определение времени суток
\nПо текущему часу (0-23) выводится приветствие.
\nfrom datetime import datetime\nhour = datetime.now().hour\nif 6 <= hour < 12:\n greeting = \"Доброе утро\"\nelif 12 <= hour < 18:\n greeting = \"Добрый день\"\nelif 18 <= hour < 23:\n greeting = \"Добрый вечер\"\nelse:\n greeting = \"Доброй ночи\"\nprint(greeting)\n
(зависит от времени запуска)\n
Пояснение: конструкции elif позволяют последовательно проверять интервалы. Использование цепочек сравнения (6 <= hour < 12) - особенность Python.
\n\nПример 3. Проверка делимости числа
\nОпределяется, делится ли число на 3 и 5 одновременно, только на одно из них или ни на одно.
\nn = 15\nif n % 3 == 0 and n % 5 == 0:\n msg = \"делится на 3 и 5\"\nelif n % 3 == 0:\n msg = \"делится на 3\"\nelif n % 5 == 0:\n msg = \"делится на 5\"\nelse:\n msg = \"не делится ни на 3, ни на 5\"\nprint(msg)\n
делится на 3 и 5\n
Пояснение: важно, что первое условие охватывает самый специфичный случай. Если поменять порядок, может выполняться неверная ветка.
\n\nПример 4. Проверка наличия подстроки в строке (case-insensitive)
\nИспользуется метод .lower() для приведения к одному регистру.
\ntext = \"Python - лучший язык программирования\"\nkeyword = \"python\"\nif keyword.lower() in text.lower():\n print(\"Подстрока найдена\")\nelse:\n print(\"Подстрока не найдена\")\n
Подстрока найдена\n
Пояснение: прямое использование in регистрозависимо, поэтому применяется .lower() для обеих строк.
\n\nПример 5. Использование if с функцией any()
\nПроверка, выполняется ли хотя бы одно условие из списка.
\nuser = {\"role\": \"admin\", \"age\": 30}\nif any([user[\"role\"] == \"admin\", user[\"age\"] >= 18]):\n print(\"Доступ разрешен\")\nelse:\n print(\"Доступ запрещен\")\nДоступ разрешен\n
Пояснение: any() возвращает True, если хотя бы один элемент итерируемого объекта истинен. Подходит для динамического набора условий.
\n\nПример 6. Вложенный if с проверкой типов (isinstance)
\nОбработка данных в зависимости от их типа.
\nvalue = [1, 2, 3]\nif isinstance(value, int):\n print(\"Целое число\")\nelif isinstance(value, str):\n print(\"Строка\")\nelif isinstance(value, (list, tuple)):\n print(\"Коллекция\")\n if len(value) > 0:\n print(\"Коллекция не пуста\")\nelse:\n print(\"Другой тип\")\n
Коллекция\nКоллекция не пуста\n
Пояснение: вложенные условия позволяют детализировать поведение внутри одной ветки.
\n\nПример 7. Тернарный оператор внутри f-строки
\nКомпактное форматирование вывода.
\nage = 17\nprint(f\"Пользователь {'совершеннолетний' if age >= 18 else 'несовершеннолетний'}\")\nПользователь несовершеннолетний\n
Пояснение: тернарный оператор вставляется прямо в строку шаблона, что сокращает код.
\n\nПример 8. Использование and/or для присваивания (короткое замыкание)
\nИногда применяется трюк с or для выбора значения по умолчанию, но лучше использовать if.
\nname = user.get(\"name\", \"\")\ndefault_name = name or \"Гость\"\nprint(default_name)\n
Пояснение: если name пустая строка (ложное значение), то or вернёт \"Гость\". Однако этот подход не различает None и пустую строку, поэтому требуется осторожность.
\nРезультат (если name не пустое):
\n(зависит от данных)