Практические задания на ветвления в Python: от простого к сложному
Основы ветвления в Python
Ветвления позволяют программе принимать решения в зависимости от условий. Главный инструмент - конструкция if-elif-else. Ниже представлен базовый шаблон, который используется в большинстве задач.
Как реализовать простейшее ветвление с проверкой одного условия?
number = int(input("Введите число: "))
if number > 0:
print("Число положительное")
else:
print("Число не положительное")Python ветвления задания (задания на ветвления в python)
Пользователь вводит число. Если оно больше нуля, выводится одно сообщение, иначе - другое. Отступы обязательны и задают блоки кода. Типичная ошибка - забыть двоеточие после if или else.
Проблема: при вводе нуля программа выводит "не положительное", хотя ноль - нейтральное число. Чтобы различать ноль, требуется добавить дополнительную ветвь.
Каким образом добавить несколько условий с помощью elif?
number = int(input("Введите число: "))
if number > 0:
result = "положительное"
elif number < 0:
result = "отрицательное"
else:
result = "ноль"
print(f"Число {result}")Ветвь elif позволяет проверить дополнительное условие, не углубляя вложенность. Условия проверяются по порядку, выполняется только первый подходящий блок.
Как использовать тернарный оператор для коротких условий?
age = 20
status = "совершеннолетний" if age >= 18 else "несовершеннолетний"
print(status)Тернарный оператор (условное выражение) возвращает одно из двух значений. Применяется, когда нужно присвоить значение или передать аргумент в функцию, избегая громоздкого блока if.
Каким образом реализовать выбор из множества вариантов в Python 3.10+?
command = input("Введите команду (start/stop/restart): ")
match command:
case "start":
print("Запуск...")
case "stop":
print("Остановка...")
case "restart":
print("Перезапуск...")
case _:
print("Неизвестная команда")Оператор match-case (структурное сопоставление) удобен для сравнения с константами или шаблонами. Ветка case _ аналогична else. Ошибки: забыть символ подчёркивания в универсальном шаблоне или неправильно согласовать отступы.
Как правильно использовать логические операторы and, or, not?
score = 85
if score >= 90 and score <= 100:
grade = "Отлично"
elif score >= 75 and score < 90:
grade = "Хорошо"
elif score >= 60 and score < 75:
grade = "Удовлетворительно"
else:
grade = "Неудовлетворительно"
print(grade)Логические связки позволяют объединять условия. Важно помнить о приоритете: not выполняется раньше and, а and раньше or. Для ясности используют скобки.
Распространённая ошибка - путать and с & (побитовое И) или использовать or вместо and для проверки диапазона: if 0 < x < 10 - это корректная запись цепного сравнения, не требующая and.
Расширенные примеры с пояснениями
Проверка високосного года
Условие високосности: год делится на 4, но не на 100, за исключением годов, делящихся на 400.
year = int(input("Год: "))
if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
print(f"{year} - високосный")
else:
print(f"{year} - невисокосный")Год: 2000 2000 - високосный Год: 1900 1900 - невисокосный
В решении используется комбинация логических операторов. Скобки группируют части условия, повышая читаемость.
Калькулятор с операциями через match-case
a = float(input("Введите первое число: "))
b = float(input("Введите второе число: "))
op = input("Операция (+, -, *, /): ")
match op:
case "+":
result = a + b
case "-":
result = a - b
case "*":
result = a * b
case "/":
if b == 0:
print("Деление на ноль невозможно")
else:
result = a / b
case _:
print("Неизвестная операция")
# Вывод, если result определён
if 'result' in locals():
print(f"Результат: {result}")Введите первое число: 10 Введите второе число: 0 Операция (+, -, *, /): / Деление на ноль невозможно
Вложенное ветвление внутри case обрабатывает деление на ноль. Использование locals() - один из способов проверить, была ли переменная присвоена, но лучше ввести флаг или присвоить result заранее.
Определение времени суток по часу
hour = int(input("Час (0-23): "))
if 6 <= hour < 12:
period = "утро"
elif 12 <= hour < 18:
period = "день"
elif 18 <= hour < 24:
period = "вечер"
else: # 0 <= hour < 6
period = "ночь"
print(f"Сейчас {period}")Час (0-23): 14 Сейчас день
Цепные сравнения (6 <= hour < 12) делают код компактнее. Границы заданы включительно с одной стороны, исключительно с другой.
Валидация пароля с несколькими условиями
password = input("Придумайте пароль: ")
if len(password) < 8:
print("Слишком короткий")
elif not any(char.isdigit() for char in password):
print("Добавьте хотя бы одну цифру")
elif not any(char.isupper() for char in password):
print("Нужна заглавная буква")
elif not any(char.islower() for char in password):
print("Нужна строчная буква")
else:
print("Пароль принят")Придумайте пароль: qwerty Слишком короткий Придумайте пароль: qwerty123 Добавьте хотя бы одну цифру (Ошибка в выводе - на самом деле цифра есть, но нет заглавной) (на самом деле условие про цифру не выполнится, т.к. оно после проверки длины; пароль qwerty123: цифра есть, a заглавной нет, поэтому выйдет сообщение о заглавной)
Каждый elif проверяет одно требование. Как только первое условие нарушено - цикл прерывается. Такой подход позволяет сообщать только о первой ошибке. Для показа всех ошибок нужен другой алгоритм.
Игра «Камень, ножницы, бумага» с использованием вложенных условий
import random
variants = ["камень", "ножницы", "бумага"]
player = input("Выберите (камень/ножницы/бумага): ").lower()
computer = random.choice(variants)
print(f"Компьютер выбрал: {computer}")
if player == computer:
print("Ничья")
elif (player == "камень" and computer == "ножницы") or \
(player == "ножницы" and computer == "бумага") or \
(player == "бумага" and computer == "камень"):
print("Вы победили!")
elif player in variants:
print("Вы проиграли")
else:
print("Некорректный ввод")Выберите (камень/ножницы/бумага): бумага Компьютер выбрал: камень Вы победили!
Обратная косая черта позволяет перенести длинное условие на следующую строку. Проверка корректности ввода вынесена в отдельный elif, чтобы не считать проигрышем неизвестное слово.