Вся Россия

Задачи для собеседования на позицию Python-разработчика

KEDU
Автор статьи

Содержание

Дата публикации 16.08.2024
Главная картинка статьи Задачи для собеседования на позицию Python-разработчика
Источник фото freepik

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

1. Основные задачи по Python

Задачи на знание синтаксиса и базовых концепций

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

Примеры:

1. Реверс строки:

def reverse_string(s):

    return s[::-1]


# Пример использования

print(reverse_string("Hello"))  # "olleH"

2. Частота символов в строке:

def char_frequency(s):

    frequency = {}

    for char in s:

        if char in frequency:

            frequency[char] += 1

        else:

            frequency[char] = 1

    return frequency


# Пример использования

print(char_frequency("hello"))  # {'h': 1, 'e': 1, 'l': 2, 'o': 1}

Работа с коллекциями

Python предоставляет мощные инструменты для работы с коллекциями данных, такие как списки, множества и словари. Вопросы могут касаться создания, изменения и поиска данных в этих структурах.

Примеры:

  • Поиск второго наибольшего числа в списке:

def second_largest(numbers):

    first, second = float('-inf'), float('-inf')

    for number in numbers:

        if number > first:

            second = first

            first = number

        elif number > second and number != first:

            second = number

    return second

# Пример использования

print(second_largest([10, 5, 4, 3, -1]))  # 5

  • Объединение и сортировка двух списков:

def merge_and_sort(list1, list2):

    return sorted(list1 + list2)


# Пример использования

print(merge_and_sort([3, 1, 4], [5, 2]))  # [1, 2, 3, 4, 5]

2. Алгоритмы и структуры данных

Задачи на сортировку и поиск

Знание основных алгоритмов сортировки и поиска обязательно для любого разработчика. Кандидату могут предложить реализовать такие алгоритмы или объяснить их работу и сложность.

Курсы, выбранные нашей командой экспертов
Программа обучения
Академия АйТи
Дистанционная

Пентестер: этичный хакинг и анализ систем безопасности

220 часов
89 900 ₽
Программа обучения
CyberED

базовый трек Администратор безопасности F-401

136 часов
93 600 ₽
Программа обучения
Институт прикладной автоматизации и программирования
Очная

Веб-разработчик на языке Python

290 часов
115 000 ₽
Программа обучения
Школа Больших Данных/Школа прикладного бизнес-анализа
Дистанционная

DPREP: Подготовка данных для Data Mining на Python

32 часа
72 000 ₽
 

Задачи на работу с графами и деревьями

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

Примеры:

  • Поиск в глубину для графа:

def dfs(graph, start):

    visited, stack = set(), [start]

    while stack:

        vertex = stack.pop()

        if vertex not in visited:

            visited.add(vertex)

            stack.extend(graph[vertex] - visited)

    return visited

# Пример использования

graph = {'A': {'B', 'C'}, 'B': {'A', 'D', 'E'}, 'C': {'A', 'F'}, 'D': {'B'}, 'E': {'B', 'F'}, 'F': {'C', 'E'}}

print(dfs(graph, 'A'))  # {'A', 'B', 'C', 'D', 'E', 'F'}

3. Практические задачи

Реализация API

Для многих позиций Python-разработчиков важно умение создавать и взаимодействовать с API. Кандидату могут предложить реализовать простое REST API с использованием фреймворков, таких как Flask или Django.

Пример:

from flask import Flask, request, jsonify

app = Flask(__name__)

todos = []

@app.route('/todos', methods=['GET'])

def get_todos():

    return jsonify(todos)

@app.route('/todos', methods=['POST'])

def add_todo():

    todo = request.json.get('todo')

    todos.append(todo)

    return jsonify({'message': 'Todo added!'}), 201

if __name__ == '__main__':

    app.run(debug=True)

Обработка данных

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

Пример:

import pandas as pd

# Пример задачи: анализ данных о продажах

data = {

    'Product': ['A', 'B', 'C', 'A', 'B', 'C'],

    'Sales': [100, 150, 200, 300, 400, 500]

}

df = pd.DataFrame(data)

# Найти общие продажи по каждому продукту

total_sales = df.groupby('Product')['Sales'].sum()

print(total_sales)

Проверка на анаграмму

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

Решение:

def are_anagrams(str1, str2):

    return sorted(str1) == sorted(str2)

# Тестирование функции

print(are_anagrams('listen', 'silent'))  # True

print(are_anagrams('hello', 'world'))    # False

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

Напишите функцию для нахождения НОД двух чисел.

Решение:

def gcd(a, b):

    while b:

        a, b = b, a % b

    return a

# Тестирование функции

print(gcd(48, 18))  # 6

print(gcd(100, 25)) # 25

Проверка на палиндром

Напишите функцию, которая проверяет, является ли строка палиндромом. Палиндром — это строка, которая читается одинаково в обоих направлениях.

Решение:

def is_palindrome(s):

    s = s.replace(" ", "").lower()

    return s == s[::-1]

# Тестирование функции

print(is_palindrome('A man a plan a canal Panama'))  # True

print(is_palindrome('Hello'))                       # False

Фибоначчи

Напишите функцию, которая возвращает n-ое число Фибоначчи. Числа Фибоначчи определяются следующим образом: F(0) = 0, F(1) = 1, и F(n) = F(n-1) + F(n-2) для n > 1.

Решение:

def fibonacci(n):

    if n

        return 0

    elif n == 1:

        return 1

    else:

        a, b = 0, 1

        for _ in range(2, n + 1):

            a, b = b, a + b

        return b

# Тестирование функции

print(fibonacci(10))  # 55

print(fibonacci(15))  # 610

Сортировка слиянием (Merge Sort)

Напишите функцию, которая сортирует список чисел с помощью алгоритма сортировки слиянием.

Решение:

def merge_sort(arr):

    if len(arr) > 1:

        mid = len(arr) // 2

        left_half = arr[:mid]

        right_half = arr[mid:]


        merge_sort(left_half)

        merge_sort(right_half)


        i = j = k = 0


        while i

            if left_half[i]

                arr[k] = left_half[i]

                i += 1

            else:

                arr[k] = right_half[j]

                j += 1

            k += 1


        while i

            arr[k] = left_half[i]

            i += 1

            k += 1


        while j

            arr[k] = right_half[j]

            j += 1

            k += 1

# Тестирование функции

arr = [38, 27, 43, 3, 9, 82, 10]

merge_sort(arr)

print(arr)  # [3, 9, 10, 27, 38, 43, 82]

Факториал числа

Напишите функцию, которая вычисляет факториал числа.

Решение:

def factorial(n):

    if n == 0:

        return 1

    else:

        return n * factorial(n - 1)

# Тестирование функции

print(factorial(5))  # 120

print(factorial(7))  # 5040

Обратная строка

Напишите функцию, которая принимает строку и возвращает её в обратном порядке.

Решение:

def reverse_string(s):

    return s[::-1]

# Тестирование функции

print(reverse_string('hello'))  # 'olleh'

print(reverse_string('Python')) # 'nohtyP'

Уникальные элементы списка

Напишите функцию, которая принимает список и возвращает список только с уникальными элементами.

Решение:

def unique_elements(lst):

    return list(set(lst))

# Тестирование функции

print(unique_elements([1, 2, 2, 3, 4, 4, 5]))  # [1, 2, 3, 4, 5]

print(unique_elements([1, 1, 1, 1]))           # [1]

Наибольший элемент списка

Напишите функцию, которая возвращает наибольший элемент в списке.

Решение:

def max_element(lst):

    return max(lst)

# Тестирование функции

print(max_element([1, 2, 3, 4, 5]))  # 5

print(max_element([-10, -20, -30]))  # -10

Объединение двух словарей

Напишите функцию, которая объединяет два словаря. Если ключи совпадают, сложите их значения.

Решение:

def merge_dicts(dict1, dict2):

    merged = dict1.copy()

    for key, value in dict2.items():

        if key in merged:

            merged[key] += value

        else:

            merged[key] = value

    return merged

# Тестирование функции

dict1 = {'a': 1, 'b': 2}

dict2 = {'b': 3, 'c': 4}

print(merge_dicts(dict1, dict2))  # {'a': 1, 'b': 5, 'c': 4}

Поиск второго по величине элемента

Напишите функцию, которая возвращает второй по величине элемент в списке.

Решение:

def second_largest(lst):

    unique_lst = list(set(lst))

    unique_lst.sort()

    return unique_lst[-2]

# Тестирование функции

print(second_largest([1, 2, 3, 4, 5]))  # 4

print(second_largest([10, 20, 20, 30])) # 20

Нахождение пересечения двух списков

Напишите функцию, которая возвращает пересечение двух списков.

Решение:

def intersection(lst1, lst2):

    return list(set(lst1) & set(lst2))

# Тестирование функции

print(intersection([1, 2, 3, 4], [3, 4, 5, 6]))  # [3, 4]

print(intersection(['a', 'b', 'c'], ['c', 'd', 'e']))  # ['c']

Удаление дубликатов из списка

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

Решение:

def remove_duplicates(lst):

    seen = set()

    result = []

    for item in lst:

        if item not in seen:

            seen.add(item)

            result.append(item)

    return result

# Тестирование функции

print(remove_duplicates([1, 2, 2, 3, 4, 4, 5]))  # [1, 2, 3, 4, 5]

print(remove_duplicates(['a', 'b', 'a', 'c', 'b']))  # ['a', 'b', 'c']

Поиск всех уникальных подстрок

Напишите функцию, которая находит все уникальные подстроки заданной строки длиной n.

Решение:

def unique_substrings(s, n):

    return {s[i:i+n] for i in range(len(s) - n + 1)}

# Тестирование функции

print(unique_substrings('hello', 2))  # {'he', 'el', 'll', 'lo'}

print(unique_substrings('abcabc', 3)) # {'abc', 'bca', 'cab'}

Заключение

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


Вопрос — ответ
Что должен знать разработчик Python?

Что такое техническое собеседование для разработчика?

На какие вопросы стоит заранее продумать ответы при подготовке к собеседованию?

Какая часть собеседования самая важная?
Комментарии
Всего
2
2024-07-18T12:21:00+05:00
Мне всегда было сложно отвечать на вопросы про алгоритмы во время собеседований. Теперь я понимаю, что стоит уделить больше внимания этому аспекту и потренироваться в решении различных задач.
2024-07-10T12:21:16+05:00
Очень полезная статья! Я обычно готовлюсь к собеседованию, решая задачи на платформах типа LeetCode, но здесь нашёл несколько интересных подходов к подготовке.
Читайте также
Все статьи