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

Содержание статьи
- Задача 1: Проверка на четность числа
- Задача 2: Проверка квадратного уравнения на наличие корней
- Задача 3: Проверка возраста для входа на сайт
- Задача 4: Проверка треугольника на тип
- Задача 5: Проверка среднего арифметического чисел
- Задача 6: Проверка сезона по месяцу
- Задача 7: Проверка категории веса
- Задача 8: Проверка простоты числа
- Задача 9: Проверка четности числа
- Задача 10: Поиск максимального числа
- Задача 11: Проверка делимости числа
- Задача 12: Проверка возраста
- Задача 13: Поиск минимального числа
- Задача 14: Проверка года на високосность
- Задача 15: Подсчет количества гласных
- Задача 16: Определение четности числа
- Задача 17: Проверка типа символа
- Задача 18: Проверка простого числа
- Задача 19: Проверка палиндрома
- Задача 20: Подсчет четных и нечетных чисел в списке
- Задача 21: Поиск факториала числа
- Задача 22: Поиск наибольшего общего делителя (НОД)
- Задача 23: Вычисление среднего арифметического
- Задача 24: Поиск простых чисел в диапазоне
- Задача 25: Проверка совершенного числа
- Задача 26: Решето Эратосфена
- Задача 27: Вычисление числа Фибоначчи
- Задача 28: Поиск наибольшей общей последовательности
- Шпаргалка перед решением задач
- Дополнительные задачи для тренировки
- Частые вопросы
Задача 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.