Найти в Дзене
От Джуна до Лида (IT Jobs)

Разбор интересной задачи с собеседования

Задача У нас есть цепочка символов. Нужно получить сумму. Например: sum (5)() Получаем 5 sum (10)(7)() Получаем 17 sum (10)(7)(-7)() Получаем 10 Решаем sum - вызываемый объект. Мы будем использовать функцию. В функцию sum() передается аргумент и эта функция возвращает новую функцию. Новая функция может быть вызвана без аргументов (как в примере 1) или с другими аргументами (примеры 2 и 3). Эта функция снова вернет новую функцию. Образуется цепочка. def sum (number): #Функция sum принимает на вход некое число return #Исходя из абзаца выше функция sum должна возвращать функцию. Все функции в Python являются объектами 1-го класса. Следовательно мы можем передавать функции как другие аргументы функции, вернуть функцию в другой функции и назначить функцию другой переменной. Определим эту функцию строчкой выше. Функция будет получать новое число: def sum (number): def new (number2=None): return Обратите внимание, что стандартное значение None, т.к. 2-го аргумента может и не быть (пример 1) Т
Оглавление

Задача

У нас есть цепочка символов. Нужно получить сумму.

Например:

sum (5)()

Получаем 5

sum (10)(7)()

Получаем 17

sum (10)(7)(-7)()

Получаем 10

Решаем

sum - вызываемый объект. Мы будем использовать функцию.

В функцию sum() передается аргумент и эта функция возвращает новую функцию. Новая функция может быть вызвана без аргументов (как в примере 1) или с другими аргументами (примеры 2 и 3). Эта функция снова вернет новую функцию. Образуется цепочка.

def sum (number): #Функция sum принимает на вход некое число
return #Исходя из абзаца выше функция sum должна возвращать функцию.

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

Определим эту функцию строчкой выше. Функция будет получать новое число:

def sum (number):
def new (number2=None):
return

Обратите внимание, что стандартное значение None, т.к. 2-го аргумента может и не быть (пример 1)

Теперь определим переменную result. В ней будет лежать общая сумма, которую нам и нужно получить. Также добавим условие, при котором если нет 2-го аргумента мы сразу получим ответ. Для этого значение result устанавливаем равным number:

def sum (number):
result = number
def new (number2=None):
if number2 is None:
return result

Если передается следующий аргумент, то добавляем еще одно условие. Суммируем result и number2:

def sum (number):
result = number
def new (number2=None):
if number2 is None:
return result
result+number2
return new
return new

Возникает проблема: переменная result определена в функции sum, а мы используем ее в функции new. Решается очень просто. Добавляем строчку

nonlocal result

после объявления функции new

Резюмируем

-2

Есть функция sum. В нее передается число 5. В переменную result сохраняется 5. Определяется функция new. New имеет доступ к переменной result. Когда вызывается функция new и 2-го аргумента нет, то выводится значение result. Если аргумент есть, то result будет равен сумме result и аргумента 2. Далее new вызывается снова и цикл запускается заново.

Предложенный нами способ решения не является единственно верным. Задачу можно решить и без использования if. Например, с помощью try и except или можно использовать словари. Делитесь в комментариях какие еще способы решения вы можете предложить.

Подписывайтесь на наш telegram канал где вы сможете найти актуальные вакансии для Python разработчиков любого уровня

#it #собеседование #hr #задача