Приветствую, Хабр.
Переход от пассивного изучения синтаксиса языка программирования к его активному применению для решения практических задач является ключевым этапом в становлении любого разработчика. Освоив базовые конструкции Python, начинающий специалист неизбежно сталкивается с необходимостью закрепить теоретические знания и развить алгоритмическое мышление. Отсутствие структурированного набора задач с четко определенными условиями и тестовыми примерами может замедлить этот процесс и создать иллюзию пробелов в понимании фундаментальных концепций.
Данная статья призвана систематизировать этот переходный этап. В ней представлено 10 последовательно усложняющихся задач, охватывающих ключевые аспекты базового Python: от работы со строками и структурами данных до реализации простых алгоритмов. Каждая задача сопровождается подробным описанием, спецификацией входных и выходных данных, а также набором тестовых примеров для самостоятельной верификации решения.
Основная часть: 10 задач по Python
В этом разделе представлены задачи для самостоятельного решения. Рекомендуется не просто найти работающий код, а постараться понять его логику и рассмотреть возможные альтернативные подходы. Решения с подробными комментариями будут приведены в конце статьи.
Задача 1: Реверс строки
Описание
Необходимо реализовать функцию, которая принимает в качестве аргумента строку и возвращает её в обратном порядке. Это одна из классических задач, позволяющая проверить понимание основ работы с последовательностями.
Какие навыки проверяет
Работа со строками (string).
Использование срезов (slicing).
Основы определения функций.
Входные данные
s(str): Строка, которую необходимо развернуть. Длина строки может быть от 0 до N.
Выходные данные
(str): Новая строка, являющаяся обратной версией исходной.
Тестовые данные (Примеры)
-
Пример 1:
Вход:
"Hello, World!"Выход:
"!dlroW ,olleH"
-
Пример 2:
Вход:
"Python"Выход:
"nohtyP"
-
Пример 3 (краевой случай):
Вход:
""(пустая строка)Выход:
""
Задача 2: Поиск самого длинного слова
Описание
Требуется написать функцию, которая принимает строку, состоящую из слов, разделенных пробелами, и находит в ней самое длинное слово. Если в строке несколько слов имеют одинаковую максимальную длину, функция должна вернуть первое из них.
Какие навыки проверяет
Работа со строками: метод
split().Итерация по списку (цикл
for).Работа с условными операторами (
if).Хранение промежуточного результата в переменных.
Входные данные
sentence(str): Строка, содержащая от одного и более слов. Слова разделены одним пробелом.
Выходные данные
(str): Самое длинное слово в строке.
Тестовые данные (Примеры)
-
Пример 1:
Вход:
"Python это мощный и универсальный язык программирования"Выход:
"программирования"
-
Пример 2:
Вход:
"Веб-разработка требует знания разных технологий"Выход:
"Веб-разработка"
-
Пример 3 (несколько слов одинаковой длины):
Вход:
"три два раз"Выход:
"три"
Задача 3: Проверка на палиндром
Описание
Необходимо реализовать функцию, которая определяет, является ли переданная строка палиндромом. Палиндром — это строка, которая читается одинаково как слева направо, так и справа налево. При проверке следует игнорировать регистр символов и все небуквенно-цифровые символы (знаки препинания, пробелы и т.д.).
Какие навыки проверяет
Манипуляции со строками: приведение к одному регистру (
lower()), проверка символов (isalnum()).Создание новой строки или списка на основе итерации.
Сравнение строк, использование срезов.
Входные данные
s(str): Строка для проверки.
Выходные данные
(bool):
True, если строка является палиндромом, иFalseв противном случае.
Тестовые данные (Примеры)
-
Пример 1:
Вход:
"А роза упала на лапу Азора"Выход:
True
-
Пример 2:
Вход:
"race a car"Выход:
False
-
Пример 3 (сложный случай с пунктуацией):
Вход:
"A man, a plan, a canal: Panama"Выход:
True
Задача 4: Сумма элементов списка
Описание
Требуется написать функцию, которая вычисляет сумму числовых элементов в заданном списке. Список может содержать данные разных типов (числа, строки, булевы значения и т.д.), и функция должна корректно обрабатывать такие случаи, суммируя только элементы типа int и float.
Какие навыки проверяет
Итерация по списку.
Проверка типа данных с помощью
isinstance().Аккумулирование значения в переменной.
Работа со смешанными типами данных.
Входные данные
items(list): Список, содержащий элементы различных типов.
Выходные данные
(int или float): Сумма всех числовых элементов в списке. Если числовых элементов нет, функция должна вернуть 0.
Тестовые данные (Примеры)
-
Пример 1:
Вход:
[1, 2, 3, 4, 5]Выход:
15
-
Пример 2 (смешанные типы):
Вход:
[10, "hello", 20.5, True, None, 30]Выход:
60.5
-
Пример 3 (нет чисел):
Вход:
["a", "b", "c"]Выход:
0
-
Пример 4 (пустой список):
Вход:
[]Выход:
0
Задача 5: Удаление дубликатов из списка
Описание
Необходимо реализовать функцию, которая принимает на вход список и возвращает новый список, содержащий только уникальные элементы из исходного. Важным условием является сохранение первоначального порядка следования элементов.
Какие навыки проверяет
Итерация по списку.
Использование условных операторов.
Проверка на вхождение элемента в коллекцию (
in).Формирование нового списка.
(Для продвинутых): Понимание различий между
listиset(в контексте сохранения порядка).
Входные данные
items(list): Исходный список с возможными дубликатами.
Выходные данные
(list): Новый список с уникальными элементами, порядок которых соответствует их первому появлению в исходном списке.
Тестовые данные (Примеры)
-
Пример 1:
Вход:
[1, 2, 3, 2, 4, 1, 5]Выход:
[1, 2, 3, 4, 5]
-
Пример 2 (со строками):
Вход:
["apple", "banana", "apple", "orange", "banana", "grape"]Выход:
["apple", "banana", "orange", "grape"]
-
Пример 3 (без дубликатов):
Вход:
[10, 20, 30]Выход:
[10, 20, 30]
-
Пример 4 (пустой список):
Вход:
[]Выход:
[]
Задача 6: Частотный анализ слов в тексте
Описание
Требуется написать функцию, которая выполняет частотный анализ слов в переданном тексте. Функция должна возвращать словарь, где ключами являются уникальные слова из текста, а значениями — количество их повторений. Анализ должен быть нечувствителен к регистру, а знаки препинания следует игнорировать.
Какие навыки проверяет
Работа со словарями (создание, добавление и обновление пар ключ-значение).
Манипуляции со строками (
lower(),split(), удаление пунктуации).Итерация по списку слов.
Использование метода словаря
get()для безопасного доступа к значениям.
Входные данные
text(str): Строка с текстом для анализа.
Выходные данные
(dict): Словарь, в котором ключи — это слова в нижнем регистре, а значения — их частота встречаемости.
Тестовые данные (Примеры)
-
Пример 1:
Вход:
"Hello world hello"Выход:
{'hello': 2, 'world': 1}
-
Пример 2 (с разным регистром и пунктуацией):
Вход:
"The quick brown fox jumps over the lazy dog. The dog was lazy."Выход:
{'the': 3, 'quick': 1, 'brown': 1, 'fox': 1, 'jumps': 1, 'over': 1, 'lazy': 2, 'dog': 2, 'was': 1}
-
Пример 3 (пустая строка):
Вход:
""Выход:
{}
Задача 7: Генератор паролей
Описание
Необходимо создать функцию для генерации случайного пароля заданной длины. Пароль должен состоять из набора символов, включающего в себя строчные и прописные буквы латинского алфавита, цифры и специальные символы (!@#$%^&*()_+-=[]{}|;:,.<>/?).
Какие навыки проверяет
Использование модуля
random, в частности функцийrandom.choiceиrandom.shuffle.Работа со строковыми константами (например, из модуля
string).Формирование списка символов и его преобразование в строку (
join).Обработка пользовательского ввода и базовых граничных условий.
Входные данные
length(int): Требуемая длина пароля.
Выходные данные
(str): Случайно сгенерированный пароль. Если
lengthменьше или равно нулю, может возвращать пустую строку.
Тестовые данные (Примеры)
Примечание: поскольку результат работы функции случаен, ваш вывод будет отличаться от приведенных примеров. Главное — соответствие длины и набора символов.
-
Пример 1:
Вход:
8Возможный выход:
"aB5!d(K$"
-
Пример 2:
Вход:
12Возможный выход:
"z&9pQ_wE!sT3"
-
Пример 3 (граничный случай):
Вход:
4Возможный выход:
"R#t1"
Задача 8: Вычисление факториала
Описание
Требуется написать функцию, которая вычисляет факториал неотрицательного целого числа. Факториал числа n (обозначается как n!) — это произведение всех натуральных чисел от 1 до n включительно. По определению, факториал 0 (0!) равен 1.
Какие навыки проверяет
Использование циклов (
forилиwhile) для итеративных вычислений.(Для продвинутых): Реализация алгоритма с помощью рекурсии.
Обработка граничных случаев (0, 1) и некорректного ввода (отрицательные числа).
Входные данные
n(int): Неотрицательное целое число.
Выходные данные
(int): Значение факториала
n!. В случае передачи отрицательного числа, функция может возвращатьNoneили вызывать исключение.
Тестовые данные (Примеры)
-
Пример 1:
Вход:
5Выход:
120(потому что 1 * 2 * 3 * 4 * 5 = 120)
-
Пример 2:
Вход:
0Выход:
1
-
Пример 3:
Вход:
1Выход:
1
-
Пример 4 (некорректный ввод):
Вход:
-3Выход:
None(или соответствующее сообщение об ошибке)
Задача 9: Проверка на простое число
Описание
Необходимо реализовать функцию, которая проверяет, является ли переданное положительное целое число простым. Простое число — это натуральное число больше 1, у которого есть только два делителя: 1 и оно само.
Какие навыки проверяет
Логика построения циклов и условных операторов.
Использование оператора модуля (
%) для проверки делимости.Понимание и реализация математических алгоритмов.
Оптимизация (например, проверка делителей до квадратного корня из числа).
Обработка граничных случаев (0, 1, 2).
Входные данные
number(int): Положительное целое число для проверки.
Выходные данные
(bool):
True, если число простое, иFalseв противном случае.
Тестовые данные (Примеры)
-
Пример 1:
Вход:
11Выход:
True
-
Пример 2:
Вход:
10Выход:
False(делители: 1, 2, 5, 10)
-
Пример 3 (граничный случай):
Вход:
1Выход:
False
-
Пример 4 (граничный случай):
Вход:
2Выход:
True
Задача 10: Простой парсер URL
Описание
Требуется написать функцию, которая принимает на вход строку с URL-адресом и извлекает из нее доменное имя. Функция должна корректно обрабатывать URL с различными протоколами (http://, https://) и наличием или отсутствием префикса www..
Какие навыки проверяет
Продвинутая работа со строками: методы
split(),find(),replace().Понимание базовой структуры URL.
Логическое ветвление для обработки различных форматов входной строки.
Входные данные
url(str): Строка, содержащая URL-адрес.
Выходные данные
(str): Строка, содержащая только доменное имя (например,
example.com).
Тестовые данные (Примеры)
-
Пример 1:
Вход:
"https://www.poisk.com/search?q=python"Выход:
"poisk.com"
-
Пример 2:
Вход:
"http://habr.com/ru/articles/"Выход:
"habr.com"
-
Пример 3 (без протокола):
Вход:
"yandex.ru"Выход:
"yandex.ru"
-
Пример 4 (другой протокол и сложный путь):
Вход:
"ftp://files1server.net/folder/file.zip"Выход:
"files1server.net"
Заключение
Поздравляю всех, кто дошел до конца и вложил время в решение этих задач. Главный результат — это не просто работающий код, а полученный опыт в анализе проблемы и поиске ее решения. Программирование — это в первую очередь практика, и вы сделали важный шаг для ее закрепления.
Анонс новых статей, полезные материалы, а так же если в процессе решения возникнут сложности, обсудить их или задать вопрос по статье можно в моём Telegram-сообществе.
Ну и, конечно, делитесь своими вариантами решений прямо здесь, в комментариях. Успехов в кодинге
SystemSoft
из всех ваших 10 задач лишь 3 оказались сложными.
enamored_poc Автор
Я же написал, для новичков)