Приветствую, Хабр.

Переход от пассивного изучения синтаксиса языка программирования к его активному применению для решения практических задач является ключевым этапом в становлении любого разработчика. Освоив базовые конструкции 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-сообществе.

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

Комментарии (2)


  1. SystemSoft
    24.10.2025 16:30

    из всех ваших 10 задач лишь 3 оказались сложными.


    1. enamored_poc Автор
      24.10.2025 16:30

      Я же написал, для новичков)