Поддержка как положительных, так и отрицательных параметров функции

Для отрицательной границы задайте шаг −1, сохранив исключение самой границы. Тогда foo(-10) вернёт [0, -2, -4, -6, -8].

Короткий ответ

Что ответить на собеседовании

Для отрицательной границы задайте шаг −1, сохранив исключение самой границы. Тогда foo(-10) вернёт [0, -2, -4, -6, -8].

Подробный разбор

Ответ с пояснениями

Условие

Сейчас реализованная функция корректно работает только при положительном значении аргумента length. Требуется изменить её так, чтобы она правильно справлялась и с отрицательными значениями length.


def foo(length: int = 10) -> list[int]:
    return [i for i in range(length) if i % 2 == 0]

Ответ

Для отрицательной границы задайте шаг −1, сохранив исключение самой границы. Тогда foo(-10) вернёт [0, -2, -4, -6, -8].

Уточним естественный симметричный контракт: перечисляются чётные числа от нуля в направлении length, не включая length.

def foo(length: int = 10) -> list[int]:
    step = 1 if length >= 0 else -1
    return [value for value in range(0, length, step) if value % 2 == 0]

Для положительного значения поведение сохраняется, для нуля возвращается пустой список. Более короткая эквивалентная запись — list(range(0, length, 2 if length >= 0 else -2)). Если отрицательное число должно означать только количество положительных элементов, это другой контракт; из исходной реализации такое значение автоматически не следует.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее