Оберните результат вызова в list comprehension с abs: [abs(value) for value in foo(length)]. Исходная функция не меняется; порядок и количество элементов сохраняются.
Преобразовать отрицательные элементы результата функции без изменения её кода
Оберните результат вызова в list comprehension с abs: [abs(value) for value in foo(length)]. Исходная функция не меняется; порядок и количество элементов сохраняются.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо изменить способ использования функции foo, так чтобы все числа, которые она возвращает со знаком «‑», стали положительными. При этом саму функцию foo менять нельзя.
def foo(length: int = 10) -> list[int]:
is_minus = length < 0
return [i if not is_minus else -i for i in range(abs(length)) if i % 2 == 0]
Ваше решение должно обернуть вызов foo и скорректировать полученный список, не трогая реализацию функции.
Ответ
Оберните результат вызова в list comprehension с abs: [abs(value) for value in foo(length)]. Исходная функция не меняется; порядок и количество элементов сохраняются.
Вариант отдельной обёртки:
def positive_foo(length=10):
return [abs(value) for value in foo(length)]
positive_foo(-6) вернёт [0, 2, 4], а positive_foo(6) — тот же список. Ноль остаётся нулём: сделать его строго положительным означало бы уже изменить не только знак отрицательных значений. Возвращается новый список; сама foo продолжает работать по прежнему контракту.