Python: уроки, справочник и задачи

Задачи на условия Python с разбором решений

Раздел: Основы Python · Обновлено 31.10.2026

Задачи на условия Python помогают довести до автоматизма работу с if, elif и else: от проверки четности до поиска простых чисел и високосных лет. Ниже собраны упражнения с вводом данных через input(), готовым кодом и коротким пояснением логики. Если синтаксис ветвлений пока не освоен, сначала прочитайте теорию по условному оператору, а потом возвращайтесь к практике.

Условия Python, являются неотъемлемой частью как в Python так и практически в любом языке программирования. С помощью условий вы можете создавать различные сценарии в вашем приложении. Ниже представлен список практических задач для закрепления теоретических знаний.

Условия Python
Фото: Ben Schumin from Montgomery Village, Maryland, USA / CC BY-SA 2.0, Wikimedia Commons
Содержание статьи
  1. Задача 1: Проверка на четность числа
  2. Задача 2: Проверка квадратного уравнения на наличие корней
  3. Задача 3: Проверка возраста для входа на сайт
  4. Задача 4: Проверка треугольника на тип
  5. Задача 5: Проверка среднего арифметического чисел
  6. Задача 6: Проверка сезона по месяцу
  7. Задача 7: Проверка категории веса
  8. Задача 8: Проверка простоты числа
  9. Задача 9: Проверка четности числа
  10. Задача 10: Поиск максимального числа
  11. Задача 11: Проверка делимости числа
  12. Задача 12: Проверка возраста
  13. Задача 13: Поиск минимального числа
  14. Задача 14: Проверка года на високосность
  15. Задача 15: Подсчет количества гласных
  16. Задача 16: Определение четности числа
  17. Задача 17: Проверка типа символа
  18. Задача 18: Проверка простого числа
  19. Задача 19: Проверка палиндрома
  20. Задача 20: Подсчет четных и нечетных чисел в списке
  21. Задача 21: Поиск факториала числа
  22. Задача 22: Поиск наибольшего общего делителя (НОД)
  23. Задача 23: Вычисление среднего арифметического
  24. Задача 24: Поиск простых чисел в диапазоне
  25. Задача 25: Проверка совершенного числа
  26. Задача 26: Решето Эратосфена
  27. Задача 27: Вычисление числа Фибоначчи
  28. Задача 28: Поиск наибольшей общей последовательности
  29. Шпаргалка перед решением задач
  30. Дополнительные задачи для тренировки
  31. Частые вопросы

Задача 1: Проверка на четность числа

Необходимо написать программу, которая будет запрашивать у пользователя число и выводить сообщение о том, является ли данное число четным или нечетным.

Решение:

# Запрос ввода числа у пользователя
num = int(input("Введите целое число: "))
# Проверка на четность и вывод соответствующего сообщения
if num % 2 == 0:
    print(f"Число {num} является четным.")
else:
    print(f"Число {num} является нечетным.")

В данной программе мы сначала запрашиваем у пользователя ввод целого числа. Затем с помощью операции взятия остатка от деления (%) находим остаток при делении этого числа на 2. Если остаток равен 0, то число четное, иначе - нечетное. В зависимости от результата выводится соответствующее сообщение.

Задача 2: Проверка квадратного уравнения на наличие корней

Требуется написать программу, которая запрашивает у пользователя коэффициенты квадратного уравнения (a, b, c) и определяет количество и тип корней данного уравнения.

Решение:

import math
# Запрос ввода коэффициентов у пользователя
a = float(input("Введите коэффициент a: "))
b = float(input("Введите коэффициент b: "))
c = float(input("Введите коэффициент c: "))
# Вычисление дискриминанта
discriminant = b**2 - 4*a*c
# Проверка наличия корней
if discriminant > 0:
    x1 = (-b + math.sqrt(discriminant)) / (2*a)
    x2 = (-b - math.sqrt(discriminant)) / (2*a)
    print(f"Уравнение имеет два вещественных корня: x1 = {x1}, x2 = {x2}")
elif discriminant == 0:
    x = -b / (2*a)
    print(f"Уравнение имеет один вещественный корень: x = {x}")
else:
    print("Уравнение не имеет вещественных корней")

В этой программе мы сначала запрашиваем у пользователя ввод коэффициентов квадратного уравнения. Затем вычисляем дискриминант и проверяем его значение. В зависимости от результата выводится информация о количестве и типе корней уравнения.

Задача 3: Проверка возраста для входа на сайт

Необходимо написать программу, которая запрашивает у пользователя его возраст и определяет, может ли он войти на сайт, допускающий посетителей только старше 18 лет.

Решение:

# Запрос ввода возраста у пользователя
age = int(input("Введите ваш возраст: "))
# Проверка возраста для входа на сайт
if age >= 18:
    print("Добро пожаловать! Вы можете войти на сайт.")
else:
    print("Извините, доступ к сайту разрешен только лицам старше 18 лет.")

В данной программе мы сначала запрашиваем у пользователя ввод своего возраста. Затем с помощью условного оператора проверяем, достиг ли пользователь 18-летнего возраста. В зависимости от результата выводится соответствующее сообщение о возможности входа на сайт.

Задача 4: Проверка треугольника на тип

Требуется написать программу, которая запрашивает у пользователя длины трех сторон треугольника и определяет его тип: равносторонний, равнобедренный, разносторонний или несуществующий.

Решение:

# Запрос ввода длин сторон у пользователя
side1 = float(input("Введите длину первой стороны треугольника: "))
side2 = float(input("Введите длину второй стороны треугольника: "))
side3 = float(input("Введите длину третьей стороны треугольника: "))
# Проверка типа треугольника
if side1 + side2 <= side3 or side1 + side3 <= side2 or side2 + side3 <= side1:
    print("Треугольник с такими сторонами не существует.")
elif side1 == side2 == side3:
    print("Это равносторонний треугольник.")
elif side1 == side2 or side1 == side3 or side2 == side3:
    print("Это равнобедренный треугольник.")
else:
    print("Это разносторонний треугольник.")

В данной программе мы сначала запрашиваем у пользователя ввод длин трех сторон треугольника. Затем с помощью условных операторов проверяем соответствие длин сторон определенным типам треугольников (равносторонний, равнобедренный или разносторонний). В зависимости от результата выводится информация о типе треугольника.

Задача 5: Проверка среднего арифметического чисел

Необходимо написать программу, которая запрашивает у пользователя три числа и определяет, больше ли среднее арифметическое из них заданного значения.

Решение:

# Запрос ввода трех чисел у пользователя
num1 = float(input("Введите первое число: "))
num2 = float(input("Введите второе число: "))
num3 = float(input("Введите третье число: "))
# Вычисление среднего арифметического
average = (num1 + num2 + num3) / 3
# Проверка среднего арифметического
check_num = float(input("Введите значение для проверки: "))
if average > check_num:
    print(f"Среднее арифметическое ({average}) больше заданного значения.")
else:
    print(f"Среднее арифметическое ({average}) меньше или равно заданному значению.")

В данной программе мы сначала запрашиваем у пользователя ввод трех чисел. Затем вычисляем их среднее арифметическое и запрашиваем у пользователя значение для проверки. С помощью условного оператора проверяем, больше ли среднее арифметическое заданного значения. В зависимости от результата выводится соответствующее сообщение.

Задача 6: Проверка сезона по месяцу

Требуется написать программу, которая запрашивает у пользователя номер месяца (от 1 до 12) и определяет соответствующий сезон.

Решение:

# Запрос ввода номера месяца у пользователя
month = int(input("Введите номер месяца (от 1 до 12): "))
# Проверка сезона по номеру месяца
if month in [12, 1, 2]:
    season = "зима"
elif month in [3, 4, 5]:
    season = "весна"
elif month in [6, 7, 8]:
    season = "лето"
elif month in [9, 10, 11]:
    season = "осень"
else:
    season = "неверный номер месяца"
print(f"Месяц с номером {month} соответствует сезону: {season}.")

В данной программе мы сначала запрашиваем у пользователя номер месяца. Затем с помощью условных операторов проверяем номер месяца и определяем соответствующий сезон (зима, весна, лето, осень). В случае некорректного ввода номера месяца выводится сообщение об ошибке.

Задача 7: Проверка категории веса

Необходимо написать программу, которая запрашивает у пользователя его вес и определяет категорию веса: недостаточный, нормальный, избыточный или ожирение.

Решение:

# Запрос ввода веса у пользователя
weight = float(input("Введите ваш вес в кг: "))
# Расчет индекса массы тела (ИМТ)
height = float(input("Введите ваш рост в метрах: "))
bmi = weight / (height ** 2)
# Проверка категории веса по ИМТ
if bmi < 18.5:
    category = "недостаточный вес"
elif 18.5 <= bmi < 25:
    category = "нормальный вес"
elif 25 <= bmi < 30:
    category = "избыточный вес"
else:
    category = "ожирение"
print(f"Ваш индекс массы тела: {bmi:.2f}, это соответствует категории: {category}.")

В данной программе мы сначала запрашиваем у пользователя его вес и рост для расчета индекса массы тела (ИМТ). Затем с помощью условных операторов проверяем значение ИМТ и определяем категорию веса (недостаточный, нормальный, избыточный или ожирение) в зависимости от результата.

Задача 8: Проверка простоты числа

Требуется написать программу, которая запрашивает у пользователя число и определяет, является ли это число простым.

Решение:

# Запрос ввода числа у пользователя
num = int(input("Введите целое число больше 1: "))
# Проверка числа на простоту
is_prime = True
if num <= 1:
    is_prime = False
else:
    for i in range(2, int(num**0.5) + 1):
        if num % i == 0:
            is_prime = False
            break
if is_prime:
    print(f"Число {num} является простым.")
else:
    print(f"Число {num} не является простым.")

В данной программе мы сначала запрашиваем у пользователя ввод целого числа больше 1. Затем с помощью цикла проверяем число на простоту. Если число делится нацело на какое-либо число от 2 до квадратного корня из этого числа, то оно не является простым. В зависимости от результата выводится соответствующее сообщение.

Задача 9: Проверка четности числа

Необходимо написать программу, которая запрашивает у пользователя число и определяет, является ли это число четным или нечетным.

Решение:

# Запрос ввода числа у пользователя
number = int(input("Введите целое число: "))
# Проверка четности числа
if number % 2 == 0:
    print(f"Число {number} - четное.")
else:
    print(f"Число {number} - нечетное.")

В данной программе мы сначала запрашиваем у пользователя ввод целого числа. Затем с помощью условного оператора проверяем остаток от деления числа на 2. Если остаток равен нулю, то число четное, иначе - нечетное. В зависимости от результата выводится соответствующее сообщение.

Задача 10: Поиск максимального числа

Требуется написать программу, которая запрашивает у пользователя три числа и определяет наибольшее из них.

Решение:

# Запрос ввода трех чисел у пользователя
num1 = float(input("Введите первое число: "))
num2 = float(input("Введите второе число: "))
num3 = float(input("Введите третье число: "))
# Поиск максимального числа
max_num = max(num1, num2, num3)
print(f"Наибольшее число: {max_num}.")

В данной программе мы сначала запрашиваем у пользователя ввод трех чисел. Затем с помощью функции max() находим наибольшее из них и выводим результат.

Задача 11: Проверка делимости числа

Необходимо написать программу, которая запрашивает у пользователя число и проверяет, делится ли оно на 5 и/или на 7.

Решение:

# Запрос ввода числа у пользователя
number = int(input("Введите целое число: "))
# Проверка делимости на 5 и/или на 7
if number % 5 == 0 and number % 7 == 0:
    print(f"Число {number} делится одновременно на 5 и на 7.")
elif number % 5 == 0:
    print(f"Число {number} делится на 5, но не делится на 7.")
elif number % 7 == 0:
    print(f"Число {number} делится на 7, но не делится на 5.")
else:
    print(f"Число {number} не делится ни на 5, ни на 7 без остатка.")

В данной программе мы сначала запрашиваем у пользователя ввод целого числа. Затем с помощью условных операторов проверяем делится ли число на 5 и/или на 7. В зависимости от результата выводится соответствующее сообщение.

Задача 12: Проверка возраста

Требуется написать программу, которая запрашивает у пользователя его возраст и определяет, в какую возрастную категорию он попадает: дети (0-12 лет), подростки (13-19 лет), взрослые (20+ лет).

Решение:

# Запрос ввода возраста у пользователя
age = int(input("Введите ваш возраст: "))
# Проверка возрастной категории
if age < 0:
    category = "не определена, возраст не может быть отрицательным"
elif age <= 12:
    category = "дети"
elif age <= 19:
    category = "подростки"
else:
    category = "взрослые"
print(f"Ваш возраст {age} лет, вы относитесь к категории: {category}.")

В данной программе мы сначала запрашиваем у пользователя его возраст. Затем с помощью условных операторов проверяем возраст и определяем соответствующую возрастную категорию (дети, подростки, взрослые). В случае некорректного ввода возраста выводится сообщение об ошибке.

Задача 13: Поиск минимального числа

Требуется написать программу, которая запрашивает у пользователя три числа и определяет наименьшее из них.

Решение:

# Запрос ввода трех чисел у пользователя
num1 = float(input("Введите первое число: "))
num2 = float(input("Введите второе число: "))
num3 = float(input("Введите третье число: "))
# Поиск минимального числа
min_num = min(num1, num2, num3)
print(f"Наименьшее число: {min_num}.")

В данной программе мы сначала запрашиваем у пользователя ввод трех чисел. Затем с помощью функции min() находим наименьшее из них и выводим результат.

Задача 14: Проверка года на високосность

Необходимо написать программу, которая запрашивает у пользователя год и определяет, является ли этот год високосным.

Решение:

# Запрос ввода года у пользователя
year = int(input("Введите год: "))
# Проверка на високосность
if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
    print(f"Год {year} - високосный.")
else:
    print(f"Год {year} - не високосный.")

В данной программе мы сначала запрашиваем у пользователя ввод года. Затем с помощью условных операторов проверяем год на високосность по следующим критериям: если год делится на 4, но не делится на 100, или год делится на 400, то он високосный; в противном случае - не високосный.

Задача 15: Подсчет количества гласных

Необходимо написать программу, которая запрашивает у пользователя строку и подсчитывает количество гласных букв (a, e, i, o, u) в этой строке.

Решение:

# Запрос ввода строки у пользователя
input_str = input("Введите строку: ").lower()  # Преобразование строки к нижнему регистру для учета всех возможных вариантов гласных
# Подсчет количества гласных
vowels = 'aeiou'
count = 0
for char in input_str:
    if char in vowels:
        count += 1
print(f"Количество гласных букв в строке: {count}.")

В данной программе мы сначала запрашиваем у пользователя ввод строки. Затем мы преобразуем строку к нижнему регистру для учета всех возможных вариантов гласных. Далее мы проходим по каждому символу в строке и проверяем, является ли он гласной буквой. Если да, увеличиваем счетчик. В конце выводим количество найденных гласных.

Задача 16: Определение четности числа

Требуется написать программу, которая запрашивает у пользователя число и определяет, является ли оно четным или нечетным.

Решение:

# Запрос ввода числа у пользователя
number = int(input("Введите целое число: "))
# Проверка на четность
if number % 2 == 0:
    print(f"Число {number} - четное.")
else:
    print(f"Число {number} - нечетное.")

В данной программе мы сначала запрашиваем у пользователя ввод числа. Затем с помощью условного оператора проверяем, делится ли число на 2 без остатка. Если да, то число четное, иначе - нечетное.

Задача 17: Проверка типа символа

Требуется написать программу, которая запрашивает у пользователя символ и определяет, к какому типу он относится: буква, цифра или специальный символ.

Решение:

# Запрос ввода символа у пользователя
symbol = input("Введите символ: ")
# Проверка типа символа
if symbol.isalpha():
    print("Это буква.")
elif symbol.isdigit():
    print("Это цифра.")
else:
    print("Это специальный символ.")

В данной программе мы сначала запрашиваем у пользователя ввод символа. Затем с помощью методов isalpha() и isdigit() проверяем, к какому типу относится введенный символ: буква, цифра или специальный символ.

Задача 18: Проверка простого числа

Необходимо написать программу, которая запрашивает у пользователя число и определяет, является ли оно простым.

Решение:

# Запрос ввода числа у пользователя
number = int(input("Введите целое число: "))
# Проверка на простоту
if number > 1:
    for i in range(2, int(number**0.5) + 1):
        if (number % i) == 0:
            print(f"Число {number} - не является простым.")
            break
    else:
        print(f"Число {number} - является простым.")
else:
    print(f"Число {number} - не является простым.")

В данной программе мы сначала запрашиваем у пользователя ввод числа. Затем мы проверяем, делится ли число нацело на какое-либо число от 2 до квадратного корня из этого числа. Если делится, то число не является простым, в противном случае - простое.

Задача 19: Проверка палиндрома

Необходимо написать программу, которая запрашивает у пользователя слово или фразу и определяет, является ли она палиндромом (читается одинаково как с начала, так и с конца).

Решение:

# Запрос ввода слова или фразы у пользователя
word = input("Введите слово или фразу: ").lower()  # Приводим к нижнему регистру для учета регистра символов
# Убираем пробелы из введенной строки
word = word.replace(" ", "")
# Проверка на палиндром
if word == word[::-1]:
    print(f"Слово или фраза '{word}' - палиндром.")
else:
    print(f"Слово или фраза '{word}' - не является палиндромом.")

В данной программе мы сначала запрашиваем у пользователя ввод слова или фразы. Затем мы удаляем пробелы из введенной строки и сравниваем ее с обратной строкой. Если слово или фраза читается одинаково в обоих направлениях, то они являются палиндромом.

Задача 20: Подсчет четных и нечетных чисел в списке

Требуется написать программу, которая запрашивает у пользователя список чисел и подсчитывает количество четных и нечетных чисел в этом списке.

Решение:

# Запрос ввода списка чисел у пользователя
numbers = input("Введите числа через пробел: ")
number_list = numbers.split()
# Подсчет четных и нечетных чисел
even_count = 0
odd_count = 0
for number in number_list:
    if int(number) % 2 == 0:
        even_count += 1
    else:
        odd_count += 1
print(f"Количество четных чисел: {even_count}")
print(f"Количество нечетных чисел: {odd_count}")

В данной программе мы сначала запрашиваем у пользователя ввод списка чисел. Затем мы разбиваем строку на список чисел и проходим по каждому числу в списке, проверяя, является ли оно четным или нечетным. Мы подсчитываем количество четных и нечетных чисел и выводим результат.

Задача 21: Поиск факториала числа

Необходимо написать программу, которая запрашивает у пользователя число и вычисляет его факториал.

Решение:

# Запрос ввода числа у пользователя
number = int(input("Введите целое положительное число: "))
# Вычисление факториала
factorial = 1
if number < 0:
    print("Факториал отрицательного числа не существует.")
elif number == 0:
    print("Факториал 0 равен 1.")
else:
    for i in range(1, number + 1):
        factorial *= i
    print(f"Факториал числа {number} равен {factorial}.")

В данной программе мы сначала запрашиваем у пользователя ввод числа. Затем мы проверяем, является ли число положительным, отрицательным или нулем, и вычисляем его факториал соответственно.

Задача 22: Поиск наибольшего общего делителя (НОД)

Требуется написать программу, которая запрашивает у пользователя два числа и находит их наибольший общий делитель.

Решение:

# Запрос ввода двух чисел у пользователя
num1 = int(input("Введите первое число: "))
num2 = int(input("Введите второе число: "))
# Нахождение наибольшего общего делителя
def gcd(a, b):
    while b:
        a, b = b, a % b
    return a
gcd_result = gcd(num1, num2)
print(f"Наибольший общий делитель чисел {num1} и {num2}: {gcd_result}")

В данной программе мы сначала запрашиваем у пользователя ввод двух чисел. Затем мы используем алгоритм Евклида для нахождения наибольшего общего делителя (НОД) этих двух чисел и выводим результат.

Задача 23: Вычисление среднего арифметического

Требуется написать программу, которая запрашивает у пользователя список чисел и вычисляет их среднее арифметическое.

Решение:

# Запрос ввода списка чисел у пользователя
numbers = input("Введите числа через пробел: ")
number_list = numbers.split()
# Вычисление среднего арифметического
total = 0
count = 0
for number in number_list:
    total += float(number)
    count += 1
if count == 0:
    print("Список пуст.")
else:
    average = total / count
    print(f"Среднее арифметическое чисел: {average}")

В данной программе мы сначала запрашиваем у пользователя ввод списка чисел. Затем мы вычисляем их сумму и количество, после чего находим среднее арифметическое и выводим результат.

Задача 24: Поиск простых чисел в диапазоне

Необходимо написать программу, которая запрашивает у пользователя верхнюю границу диапазона и выводит все простые числа в этом диапазоне.

Решение:

# Запрос ввода верхней границы диапазона у пользователя
upper_limit = int(input("Введите верхнюю границу диапазона: "))
# Поиск простых чисел в диапазоне
prime_numbers = []
for num in range(2, upper_limit + 1):
    is_prime = True
    for i in range(2, int(num**0.5) + 1):
        if num % i == 0:
            is_prime = False
            break
    if is_prime and num > 1:
        prime_numbers.append(num)
print(f"Простые числа до {upper_limit}: {prime_numbers}")

В данной программе мы сначала запрашиваем у пользователя ввод верхней границы диапазона. Затем мы проходим по всем числам в диапазоне и проверяем, является ли каждое из них простым. Простые числа добавляются в список и выводятся на экран.

Задача 25: Проверка совершенного числа

Требуется написать программу, которая запрашивает у пользователя число и определяет, является ли оно совершенным числом (число, равное сумме всех своих делителей, кроме самого числа).

Решение:

# Запрос ввода числа у пользователя
number = int(input("Введите целое положительное число: "))
# Проверка на совершенное число
def is_perfect_number(num):
    divisors_sum = sum([i for i in range(1, num) if num % i == 0])
    return divisors_sum == num
if number <= 0:
    print("Число должно быть целым положительным.")
elif is_perfect_number(number):
    print(f"Число {number} - совершенное число.")
else:
    print(f"Число {number} - не является совершенным числом.")

В данной программе мы сначала запрашиваем у пользователя ввод числа. Затем мы определяем функцию для проверки, является ли число совершенным, и применяем эту функцию к введенному числу.

Задача 26: Решето Эратосфена

Необходимо написать программу, которая находит все простые числа до заданного числа с использованием метода решета Эратосфена.

Решение:

# Функция для поиска всех простых чисел до заданного числа
def sieve_of_eratosthenes(n):
    primes = []
    is_prime = [True] * (n + 1)
    is_prime[0], is_prime[1] = False, False
    for p in range(2, n + 1):
        if is_prime[p]:
            primes.append(p)
            for i in range(p*p, n+1, p):
                is_prime[i] = False
    return primes
# Запрос ввода верхней границы диапазона у пользователя
upper_limit = int(input("Введите верхнюю границу диапазона: "))
# Получение всех простых чисел до заданного числа
prime_numbers = sieve_of_eratosthenes(upper_limit)
print(f"Простые числа до {upper_limit}: {prime_numbers}")

В данной программе мы используем метод решета Эратосфена для поиска всех простых чисел до заданного числа. Мы создаем список булевых значений для каждого числа до верхней границы и последовательно отмечаем составные числа. В конце мы получаем список всех простых чисел до заданного числа и выводим его.

Задача 27: Вычисление числа Фибоначчи

Требуется написать программу, которая запрашивает у пользователя число n и вычисляет n-ное число Фибоначчи.

Решение:

# Функция для вычисления n-ного числа Фибоначчи
def fibonacci(n):
    if n <= 0:
        return "Число должно быть целым положительным."
    elif n == 1:
        return 0
    elif n == 2:
        return 1
    else:
        a, b = 0, 1
        for _ in range(2, n):
            a, b = b, a + b
        return b
# Запрос ввода числа у пользователя
num = int(input("Введите номер числа Фибоначчи: "))
# Вычисление n-ного числа Фибоначчи
result = fibonacci(num)
print(f"{num}-ное число Фибоначчи: {result}")

В данной программе мы используем функцию для вычисления n-ного числа Фибоначчи. Мы получаем от пользователя номер числа в последовательности и затем вычисляем соответствующее число с помощью алгоритма Фибоначчи.

Задача 28: Поиск наибольшей общей последовательности

Необходимо написать программу, которая находит наибольшую общую последовательность (НОП) двух строк.

Решение:

def longest_common_subsequence(str1, str2):
    m = len(str1)
    n = len(str2)
    dp = [[0] * (n + 1) for _ in range(m + 1)]
    for i in range(1, m + 1):
        for j in range(1, n + 1):
            if str1[i - 1] == str2[j - 1]:
                dp[i][j] = dp[i - 1][j - 1] + 1
            else:
                dp[i][j] = max(dp[i - 1][j], dp[i][j - 1])
    # Reconstruction of the longest common subsequence
    result = ""
    i, j = m, n
    while i > 0 and j > 0:
        if str1[i - 1] == str2[j - 1]:
            result = str1[i - 1] + result
            i -= 1
            j -= 1
        elif dp[i - 1][j] > dp[i][j - 1]:
            i -= 1
        else:
            j -= 1
    return result
# Запрос ввода двух строк у пользователя
string1 = input("Введите первую строку: ")
string2 = input("Введите вторую строку: ")
# Нахождение наибольшей общей последовательности
lcs = longest_common_subsequence(string1, string2)
print(f"Наибольшая общая последовательность: {lcs}")

В данной программе мы используем динамическое программирование для нахождения наибольшей общей подпоследовательности двух строк. Мы запрашиваем у пользователя две строки и затем находим и выводим их наибольшую общую последовательность.

Шпаргалка перед решением задач

Почти все задачи ниже строятся из нескольких одинаковых кирпичиков: операторов сравнения, логических связок и цепочки elif. Таблица поможет быстро вспомнить, что чем записывается.

ЗаписьЧто проверяетПример
==, !=Равенство и неравенствоx % 2 == 0
<, <=, >, >=Больше, меньшеage >= 18
and, or, notОбъединение условийx > 0 and x % 5 == 0
a < x < bПопадание в интервал18.5 <= bmi < 25
inВхождение в наборmonth in (12, 1, 2)
A if cond else BВыбор значения в одну строку"чет" if n % 2 == 0 else "нечет"

Порядок веток имеет значение: Python выполняет первую ветку, условие которой оказалось истинным, и дальше не смотрит. Поэтому более узкие условия ставят выше широких. Если веток много и все они сравнивают одно значение с константами, вместо длинной цепочки elif удобно применить оператор match case.

n = 7
parity = "четное" if n % 2 == 0 else "нечетное"
print(parity)  # нечетное

Дополнительные задачи для тренировки

Эти упражнения чуть сложнее базовых: в них нужно продумать порядок проверок и обработать некорректный ввод.

Задача 29: Четверть координатной плоскости

Пользователь вводит координаты точки x и y. Программа сообщает, в какой четверти лежит точка, или что она находится на оси.

Решение:

x = float(input("x = "))
y = float(input("y = "))

if x == 0 or y == 0:
    print("Точка лежит на оси")
elif x > 0 and y > 0:
    print("I четверть")
elif x < 0 and y > 0:
    print("II четверть")
elif x < 0:
    print("III четверть")
else:
    print("IV четверть")

Проверка на ось стоит первой: иначе точка (0, 5) попала бы в ветку else. В третьей ветке достаточно x < 0, потому что положительный y уже отсеян выше.

Задача 30: Калькулятор с защитой от деления на ноль

Программа получает два числа и знак операции, выводит результат или понятное сообщение об ошибке.

Решение:

a = float(input("Первое число: "))
op = input("Операция (+ - * /): ").strip()
b = float(input("Второе число: "))

if op == "/" and b == 0:
    print("На ноль делить нельзя")
elif op == "+":
    print(a + b)
elif op == "-":
    print(a - b)
elif op == "*":
    print(a * b)
elif op == "/":
    print(a / b)
else:
    print("Неизвестная операция:", op)

Опасный случай вынесен в первую ветку, поэтому деление ниже выполняется только с ненулевым делителем.

Задача 31: Стоимость доставки по весу

До 1 кг доставка стоит 300 рублей, от 1 до 5 кг 500 рублей, от 5 до 20 кг 900 рублей. Посылки тяжелее 20 кг и вес меньше или равный нулю не принимаются.

Решение:

weight = float(input("Вес посылки, кг: "))

if weight <= 0 or weight > 20:
    print("Посылка не принимается")
elif weight < 1:
    print("Доставка: 300 руб.")
elif weight < 5:
    print("Доставка: 500 руб.")
else:
    print("Доставка: 900 руб.")

Каждая следующая ветка проверяет только верхнюю границу: нижнюю уже гарантируют ветки выше.

Частые вопросы

Ответы на вопросы, которые чаще всего возникают при решении задач на ветвления.

Чем elif отличается от нескольких if подряд?

В цепочке if/elif выполняется не больше одной ветки: после первого истинного условия остальные пропускаются. Несколько отдельных if проверяются независимо, и сработать могут все сразу. Для взаимоисключающих вариантов (оценка, сезон, категория веса) нужен elif.

Почему программа падает с ValueError после ввода?

int(input()) выбрасывает ValueError, если пользователь ввел буквы или дробное число. Для учебных задач это допустимо, а в настоящей программе ввод оборачивают в try/except или проверяют строку методом isdigit().

Можно ли сравнивать дробные числа через ==?

Лучше не делать этого с результатами вычислений: 0.1 + 0.2 == 0.3 дает False из-за погрешности float. Для таких проверок используют math.isclose(a, b).

Как записать условие в одну строку?

Для выбора значения подходит тернарный оператор: result = "да" if x > 0 else "нет". Вкладывать такие выражения друг в друга не стоит, читать их тяжело. Чтобы прервать цикл по условию, применяют операторы break и continue.