Напишите функцию make_equation
, которая по заданным коэффициентам строит строку, описывающую валидное с точки зрения Python выражение без использования оператора возведения в степень.
Многочлен второй степени с коэффициентами a, b и c, например, можно записать в виде:
((a)∗x+b)∗x+c
Примечание
Ваше решение должно содержать только функции.
В решении не должно быть вызовов требуемых функций, за исключением рекурсивных.
Трассировка вызова рекурсивной функции в обработке ответа не учитывается и показана для примера.
Пример
Ввод
result = make_equation(3, 2, 1)
Вывод
# Вызов make_equation(3, 2, 1)
# Вызов make_equation(3, 2)
# Вызов make_equation(3)
result = '((3) * x + 2) * x + 1'
Ввод
result = make_equation(3, 1, 5, 3)
Вывод
# Вызов make_equation(3, 1, 5, 3)
# Вызов make_equation(3, 1, 5)
# Вызов make_equation(3, 1)
# Вызов make_equation(3)
result = '(((3) * x + 1) * x + 5) * x + 3'
Решение
Если вы не на “ты” с рекурсией, советую прочитать сначала статью Рекурсия. Погружаемся и всплываем. Там изложены теоретические основы, которые обосновывают выбор метода решения этой задачи и немного структурируют знания о подходах проектирования рекурсивных задач.
Итак нам даны числа, мы должны заворачивать их в скобочки и приписывать к ним * x + если это не последнее число в последовательности.
Очевидным граничным условияем для нас является исчерпание списка чисел. То есть если у нас есть список только из одного элемента, то мы возвращаем число, в противном случае изымаем последний элемент списка и делаем рекурсивный вызов функции, завернутый в скобочки, к которому приписываем умножение на x, и прибавляем текущее последнее значение списка.
Для тех, что прочитал статью будет очевидно, что это метод “всплытия”, когда мы используем полученные данные только тогда, когда выходим из рекурсии.
Посмотреть код
Решение
def make_equation(*num):
if len(num) == 1:
return f'{num[0]}'
else:
return f'({make_equation(*num[:-1])}) * x + {num[-1]}'
Решение
я понял благодаря вашему объяснению: “Рекурсия. Погружаемся и всплываем” принцип решения задачи
ещё один сложный момент правильно подать данные в программу, то есть вместо
нужно использовать
важно поставить звёздочку
в обоих случаях class ‘tuple’, но длинна разная
не до конца понимаю принцип
надо вернуться назад, это уже объясняли)))
Нет, это не tuple в обоих случаях.
Допустим, a = [1, 2, 3]. Когда мы вызываем функцию и передаем туда просто переменную а, то функция на входе получает одну переменную класса list. Если же мы поставили перед именем списка звездочку, то в функцию передастся три переменных.
Это называется распаковка. Я хотел написать статейку на эту тему, но слишком мало материала в голову пришло, попробую сформулировать чуть позже.
вот вроде понятно, но до автоматизма ещё не дошло
напишите, пожалуйста!
Вы для меня мир открыли, когда в первый раз написали о распаковке
Я могу задать вопросы, возможно для вас это явные и простые вещи, но для меня нет
Очень буду ждать статью))
Скажите, пожлаййста, как правильно определить тип данных??
для меня очень не явно в данных задачах правильно определить это
IDE пишет что num = {tuple: 4} (3, 1, 5, 3)
Это очень хороший вопрос. Строго говоря ваша IDE права
даст нам
Но я предпочитаю говорить о том, что мы получим в конечном итоге, а не о промежуточных преобразованиях.
Обратите внимание на вызовы и на то, что получаем внутри функции. Именно это я имел в виду, когда говорил об эквивалентности вызовов и о том, что мы передаем в функцию.
сохранил как шпаргалку)))