Найти в Дзене
Python | Lawru

Попробуй решить эти 5 интересных примеров

Попробуй решить эти 5 задач на Python – они прокачают твоё логическое мышление, внимание к деталям и помогут взглянуть на язык под новым углом. Вместо стандартных примеров вроде «разверни строку» или «посчитай сумму массива» – задачи, которые действительно интересно решать. Разберём пять уровней сложности: • Две задачи лёгкого уровня – потребуют внимательности и знания базового синтаксиса Python. • Две задачи среднего уровня – помогут закрепить работу со структурами данных и алгоритмами. • Одна сложная задача – вызов для тех, кто хочет испытать себя. Готов? Тогда приступим! В классе пропала коробка конфет. Есть список подозреваемых – их имена закодированы в виде строки. Детектив выяснил, что вор тот, чьё имя встречается дважды. Нужно написать функцию, которая вернёт имя виновного. Пример работы: Нужно сгенерировать пирамиду чисел. На i-й строке должно быть i чисел, каждое равно номеру строки. Пример работы: Вывод: У тебя есть список пользователей и их паролей. Нужно найти все пароли, к
Оглавление

Попробуй решить эти 5 задач на Python – они прокачают твоё логическое мышление, внимание к деталям и помогут взглянуть на язык под новым углом. Вместо стандартных примеров вроде «разверни строку» или «посчитай сумму массива» – задачи, которые действительно интересно решать.

Разберём пять уровней сложности:

Две задачи лёгкого уровня – потребуют внимательности и знания базового синтаксиса Python.

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

Одна сложная задача – вызов для тех, кто хочет испытать себя.

Готов? Тогда приступим!

Задача 1: Кто украл конфеты? (Лёгкий уровень)

В классе пропала коробка конфет. Есть список подозреваемых – их имена закодированы в виде строки. Детектив выяснил, что вор тот, чьё имя встречается дважды. Нужно написать функцию, которая вернёт имя виновного.

Пример работы:

-2

Задача 2: Числовая лестница (Лёгкий уровень)

Нужно сгенерировать пирамиду чисел. На i-й строке должно быть i чисел, каждое равно номеру строки.

Пример работы:

-3

Вывод:

-4

Задача 3: Секретный пароль (Средний уровень)

У тебя есть список пользователей и их паролей. Нужно найти все пароли, которые содержат не менее 3 цифр.

Пример работы:

-5

Задача 4: Самый длинный подотрезок (Средний уровень)

Дан список целых чисел. Нужно найти самый длинный подотрезок (непрерывную подпоследовательность), в котором все элементы различны.

Пример работы:

-6
-7

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

Задача 5: Оптимальный маршрут курьера (Сложный уровень)

У курьера есть несколько точек доставки. Он должен пройти по всем точкам и вернуться в начальную, выбрав кратчайший путь. Дано n точек с координатами (x, y). Нужно найти оптимальный маршрут.

Пример работы:

-8

Возможный оптимальный путь:

-9

Задача сложная, так как относится к NP-трудным проблемам. Реализация наивного перебора всех вариантов невозможна при большом числе точек, поэтому придётся использовать жадные алгоритмы или приближённые методы.

Решения и разбор задач

Давайте разберём каждую задачу и возможные подходы к их решению.

Задача 1: Кто украл конфеты?

Для нахождения повторяющегося имени удобно использовать словарь, где ключ — это имя, а значение — количество его появлений.

Решение:

-10

Функция проходит по списку имен и использует словарь для отслеживания встреченных значений. Как только обнаруживается повторение — имя сразу возвращается.

Частые ошибки:

• Использование set(), который не позволяет проверять порядок появления имен.

• Попытка сортировки списка перед поиском, что делает решение менее эффективным.

Задача 2: Числовая лестница

Построение лестницы чисел можно реализовать с помощью генерации строк.

Решение:

-11

Функция использует списковое включение для создания строк, а join() превращает список чисел в текст.

Частые ошибки:

• Использование print(i * i), что ведёт к математическим вычислениям вместо генерации строк.

• Пропуск пробелов между числами при формировании строки.

Задача 3: Секретный пароль

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

Решение через цикл:

-12

Эта функция проверяет количество цифр в каждом пароле, используя генераторное выражение внутри sum().

Частые ошибки:

• Проверка только первой цифры if any(c.isdigit() for c in pwd), что даёт неверные результаты.

• Использование len(re.findall("\d", pwd)), что делает код менее читаемым.

Задача 4: Самый длинный подотрезок

Оптимальное решение использует два указателя (left и right) и set для отслеживания уникальных чисел.

Решение:

-13

Алгоритм работы:

1. left и right обозначают границы текущего подотрезка.

2. Пока right встречает повторяющееся число, двигаем left и удаляем элементы из множества.

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

Частые ошибки:

• Попытка сортировки массива, что ломает порядок элементов.

• Использование Counter() из collections, что замедляет выполнение.

Задача 5: Оптимальный маршрут курьера

Эта задача известна как задача коммивояжёра. Оптимальное точное решение — метод перебора всех возможных маршрутов, но он неэффективен для больших n. Используем жадный алгоритм (выбираем ближайшую точку на каждом шаге).

Решение:

-14

Как это работает:

1. Используем permutations() для генерации всех возможных маршрутов.

2. Вычисляем расстояние каждого маршрута.

3. Выбираем маршрут с минимальной суммой расстояний.

Частые ошибки:

• Неправильное вычисление расстояния: не abs(x1 - x2) + abs(y1 - y2), а евклидова метрика.

• Отсутствие возврата в начальную точку, что делает маршрут некорректным.

Мы разобрали 5 интересных задач разного уровня сложности. Простые задачи помогли закрепить основы работы со строками и списками, а сложные — познакомили с алгоритмами оптимизации.

Что можно сделать дальше?

• Попробовать написать более оптимальные версии решений.

• Реализовать задачи без встроенных функций Python.

• Решать аналогичные задачи на платформах LeetCode, Codewars, Stepik.

Практика — лучший способ прокачать навыки программирования. Начни с этих задач и попробуй придумать свои! 🚀