Задачи на Python: примеры для подготовки к собеседованию

Раздел: Карьера -> Подготовка к экзаменам

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

Основные типы заданий и подходы

Как проверить, является ли строка палиндромом?

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


import re

def is_palindrome(s):
    cleaned = re.sub(r'[^a-zA-Zа-яА-Я]', '', s).lower()
    return cleaned == cleaned[::-1]

яндекс задания python (задания от яндекса по python)

Такой подход работает за O(n) по времени и O(n) по памяти. Подходит для большинства строк.

Вариант с ручным циклом:


def is_palindrome_cyclic(s):
    s = ''.join(c.lower() for c in s if c.isalpha())
    i, j = 0, len(s)-1
    while i < j:
        if s[i] != s[j]:
            return False
        i += 1
        j -= 1
    return True

Python разработчик тестовые задания (примеры тестовых заданий python)

Этот вариант не создаёт новую строку целиком, но в Python строка всё равно копируется при join. Подходит для обучения, но уступает срезу.

Типичная ошибка - не учитывать регистр или пунктуацию. Если используется s == s[::-1] без очистки, 'A man a plan a canal Panama' вернёт False. Также возможна проблема с unicode символами, например, с буквой 'ё' - lower() срабатывает корректно, но в старых версиях Python 2 мог быть нюанс. Рекомендуется использовать casefold() для строгого сравнения.

Как найти второй по величине элемент в списке?

Оптимальное решение с однократным проходом:


def second_max(numbers):
    if len(numbers) < 2:
        return None
    first = second = float('-inf')
    for n in numbers:
        if n > first:
            second = first
            first = n
        elif n > second and n != first:
            second = n
    return second if second != float('-inf') else None

егэ python задачи (задачи егэ по python)

Этот алгоритм работает за O(n) и использует O(1) памяти. Подходит для больших списков.

Вариант с сортировкой:


def second_max_sort(numbers):
    if len(numbers) < 2:
        return None
    unique = list(set(numbers))
    if len(unique) < 2:
        return None
    unique.sort()
    return unique[-2]

программы python егэ (программы для егэ по python)

Простота, но сложность O(n log n). Применяется, если сортировка не критична, а код должен быть коротким.

Ошибка - не учитывать дубликаты. Если список [3,3,3], второй максимум должен быть None, а не 3. Вариант с set решает эту проблему. В однопроходном алгоритме проверка n != first обязательна.

Как реализовать класс банковского счёта с методами пополнения и снятия?

Эффективное решение:


class BankAccount:
    def __init__(self, owner, balance=0):
        self.owner = owner
        self._balance = balance

    def deposit(self, amount):
        if amount <= 0:
            raise ValueError("Сумма должна быть положительной")
        self._balance += amount
        return self._balance

    def withdraw(self, amount):
        if amount <= 0:
            raise ValueError("Сумма должна быть положительной")
        if amount > self._balance:
            raise ValueError("Недостаточно средств")
        self._balance -= amount
        return self._balance

    @property
    def balance(self):
        return self._balance

решу егэ python (решение заданий егэ по python)

Инкапсуляция через защищённый атрибут и property. Исключения для обработки ошибок.

Вариант с использованием __slots__:


class BankAccountSlots:
    __slots__ = ('owner', '_balance')
    # ... методы те же

Python тестовое (тестовое задание python)

Экономит память при большом количестве объектов. Подходит для высоконагруженных систем.

Частая ошибка - не проверять отрицательные суммы или снятие больше баланса. Без валидации программа упадёт с непонятной ошибкой. Также забывают про наследование - в реальных проектах удобно создать базовый класс Account.

Как прочитать CSV файл и вычислить среднее значение столбца?

Стандартный модуль csv без внешних библиотек:


import csv

def average_column(filename, column):
    total = 0
    count = 0
    with open(filename, newline='') as f:
        reader = csv.DictReader(f)
        for row in reader:
            try:
                total += float(row[column])
                count += 1
            except (ValueError, KeyError):
                continue
    return total / count if count else None

задачи огэ python (задачи огэ по python)

Используется DictReader для безопасного доступа по имени столбца. Обрабатываются пропуски и нечисловые значения.

Вариант с Pandas:


import pandas as pd

def average_pandas(filename, column):
    df = pd.read_csv(filename)
    return df[column].mean()

Кратко, но требует установки библиотеки. Подходит, если в проекте уже используется pandas.

Ошибка - не обрабатывать пустые строки или строки с заголовками. Если в столбце есть нечисловые значения, mean() выдаст NaN. В первом варианте try-except игнорирует такие строки, что может исказить результат.

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

- егэ информатика 19 задание python (19 задание егэ по информатике на python)
- программирование python задание 18 (задание 18 по программированию на python)

Дополнительные примеры и расширенные техники

Палиндром с учётом всех символов Unicode

Пример

import unicodedata

def is_palindrome_unicode(s):
    def normalize(ch):
        nfkd = unicodedata.normalize('NFKD', ch)
        return nfkd.encode('ascii', 'ignore').decode('ascii').lower()
    cleaned = ''.join(c for c in s if c.isalnum() or unicodedata.category(c) == 'Lo')
    processed = ''.join(map(normalize, cleaned))
    return processed == processed[::-1]
print(is_palindrome_unicode('A man, a plan, a canal: Panama'))  # True
print(is_palindrome_unicode('Éma, à ma? É!'))  # True (после нормализации 'e')

Этот код нормализует символы, удаляя диакритические знаки, что позволяет корректно сравнивать строки с разными акцентами. Используется для интернациональных данных.

Генератор чисел Фибоначчи с мемоизацией

Пример

def fibonacci_memo():
    cache = {0: 0, 1: 1}
    def fib(n):
        if n not in cache:
            cache[n] = fib(n-1) + fib(n-2)
        return cache[n]
    return fib

fib = fibonacci_memo()
[fib(i) for i in range(10)]
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

Мемоизация снижает сложность с экспоненциальной до линейной. Подходит для рекурсивных алгоритмов, где есть повторяющиеся вызовы.

Сортировка списка словарей по нескольким ключам

Пример

users = [
    {'name': 'Alice', 'age': 30},
    {'name': 'Bob', 'age': 25},
    {'name': 'Alice', 'age': 20}
]
sorted_users = sorted(users, key=lambda x: (x['name'], -x['age']))
[{'name': 'Alice', 'age': 30}, {'name': 'Alice', 'age': 20}, {'name': 'Bob', 'age': 25}]

Сортировка по имени по возрастанию, а затем по возрасту по убыванию (используется минус). Часто встречается в задачах на агрегацию данных.

Декоратор для замера времени выполнения функции

Пример

import time

def timer(func):
    def wrapper(*args, **kwargs):
        start = time.perf_counter()
        result = func(*args, **kwargs)
        elapsed = time.perf_counter() - start
        print(f"{func.__name__} выполнилась за {elapsed:.6f} сек")
        return result
    return wrapper

@timer
def compute():
    sum(i**2 for i in range(10**6))

compute()
compute выполнилась за 0.042394 сек

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

Итератор по чётным числам с помощью класса

Пример

class EvenIterator:
    def __init__(self, numbers):
        self.numbers = numbers
        self.index = 0
    def __iter__(self):
        return self
    def __next__(self):
        while self.index < len(self.numbers):
            value = self.numbers[self.index]
            self.index += 1
            if value % 2 == 0:
                return value
        raise StopIteration

list(EvenIterator([1,2,3,4,5,6]))
[2, 4, 6]

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

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

Примеры тестовых заданий Python - comments

En
Python разработчик тестовые задания (python)