Задачи
Задача 1
Марина заботится о здоровом питании. Она попросила вас написать класс FoodInfo, экземпляры которого будут описывать пищевую ценность продуктов, а при сложении — возвращать новый экземпляр, описывающий суммарную пищевую ценность его составляющих. Интерфейс класса:
fi = FoodInfo(proteins, fats, carbohydrates)— инициализировать экземпляр заданным количеством белков, жиров и углеводов. Все три параметра определяются весом в граммах (целым числом).fi.get_proteins()— вернуть количество белков.fi.get_fats()` — вернуть количество жиров.
fi.get_carbohydrates()— вернуть количество углеводов.fi.get_kcalories()— рассчитать число килокалорий в пище по формуле (4 * белки + 9 * жиры + 4 * углеводы).fi_sum = fi1 + fi2— результат сложенияfi_sumдолжен быть новым объектомFoodInfo, описывающим суммарную пищевую ценность продуктов fi1 + fi2. fi1 и fi2 не должны измениться.
Пример 1
Ввод
Вывод
Пример 2
Ввод
Вывод
Пример 3
Ввод
Вывод
Задача 2
Напишите класс ReversedList, который будет при инициализации экземпляра принимать список и реализовывать доступ к элементам этого списка в обратном порядке.
rl = ReversedList(lst)— создание обратного списка.len(rl)— число элементов в обратном списке.rl[i]— доступ к элементам в обратном порядке.rl[0]— последний элемент первоначального списка,rl[1]— предпоследний и так далее.
Пример 1
Ввод
Вывод
Пример 2
Ввод
Вывод
Пример 3
Ввод
Вывод
Задача 3
Реализуйте класс SquareFunction, экземпляры которого при инициализации получают коэффициенты a, b, c. При вызове объекта как функции с аргументом x должно возвращаться значение выражения ax2 + bx + c.
Пример 1
Ввод
Вывод
Пример 2
Ввод
Вывод
Пример 3
Ввод
Вывод
Задача 4
Реализуйте класс Date, экземпляры которого при инициализации принимают месяц и день. При вычитании дат (d1 - d2) должно возвращаться число дней между d1 и d2. Число дней должно быть:
равно нулю, если
d1иd2— одна и та же датабольше нуля, если
d1позжеd2меньше нуля, если
d1раньшеd2
Считайте, что все даты указаны в пределах одного и того же не високосного года (в феврале 28 дней).
Пример 1
Ввод
Вывод
Пример 2
Ввод
Вывод
Задача 5
Определите класс Point. При инициализации экземпляру передаются координаты x и y. При сравнении двух экземпляров оператор == должен возвращать True, если координаты точек равны, и False — если нет. При сравнении оператором != должно возвращаться True, если координаты точек не равны, и False — если равны.
Пример 1
Ввод
Вывод
Пример 2
Ввод
Вывод
Пример 3
Ввод
Вывод
Задача 6
Периодически в некоторых задачах возникает надобность в разреженных массивах. Разреженный массив характеризуется тем, что подавляющее большинство значений в нём равны нулю, поэтому можно хранить только ненулевые значения. Это позволяет создавать разреженные массивы очень большого размера без лишних затрат памяти. Вам необходимо реализовать класс разреженного массива SparseArray.
arr = SparseArray()— создание пустого разреженного массива.arr[i] = value— записать значение в массив.arr[i]— прочитать значение из массива.
Пример 1
Ввод
Вывод
Пример 2
Ввод
Вывод
Пример 3
Ввод
Вывод
Задача 7
Реализуйте класс Polynomial для вычисления значений многочленов при заданных x, а также для сложения многочленов.
poly = Polynomial(coefficients)— создать новый многочлен с коэффициентамиcoefficients.coefficients[0]— свободный член,coefficients[1]— множитель приx1,coefficients[2]— множитель приx2, и так далее.y = poly(x)— вычислить значение многочлена в точкеx.y = c0 + c1 x1 + c2 x2 + ... + cn xnpoly_sum = poly1 + poly2— результат сложения двух многочленов должен быть экземляромPolynomialи содержать коэфициенты, которые получаются в результате сложения коэффициентовpoly1иpoly2при одинаковых степеняхx.
Пример 1
Ввод
Вывод
Пример 2
Ввод
Вывод
Пример 3
Ввод
Вывод
Задача 8
Программист Николай, изучая различные структуры данных, решил погрузиться в теорию очередей, построенных на базе списков Python. Напомним, что очередь – это такая структура данных, работа с которой определяется принципом FIFO (First In First Out). Наблюдать этот принцип можно у кассы в магазине. Если, конечно, никто не нарушает правила 😊 Николай предлагает Вам реализовать класс Queue, инкапсулирующий, то есть моделирующий работу, очередь. Однако, Николай не ищет легких путей и хочет усложнить Вам работу: очередь может быть инициализирована различным числом элементов. Например,
q = Queue(1, 2, 3, 4, 5)– создаёт очередь[1 -> 2 -> 3 -> 4 -> 5]q1 = Queue(1, 2, 3)– очередь[1 -> 2 -> 3]. Но всё же есть гарантия того, что для инициализации передается хотя бы один параметр. КлассQueueреализует следующие методы:append(*values)– добавляет несколько значений в конец очереди (как минимум одно).copy()– создаёт копию данной очереди, то есть возвращает новую очередь, полностью аналогичную исходной.pop()– вытаскивает и возвращает первый элемент очереди, при этом этот элемент из очереди удаляется. Если очередь пуста, то возвращает None.extend(queue)– расширяет данную очередь другой, то есть приклеивает вторую очередь к первой.next()– возвращает новую очередь, начинающуюся со второго элемента текущей.
Также требуется реализовать следующие операторы и встроенные функции:
queue1 + queue2– склейка очередей создаёт новую увеличенную очередь.queue1+ = queue2– расширяет первую очередь второй.queue1 == queue2– проверяет очереди на равенство всех элементов. ВозвращаетTrueилиFalse.queue >> N– создаёт новую очередь без первыхN(вышедших) элементов. В случае, когдаNпревышает количество элементов очереди, следует вернуть пустую очередь.str(queue)– приводит очередь к строке вида[q1 -> q2 -> q3 -> ... -> qn]. Пустая или ошибочная очередь – это[]next(queue)– аналогичное действие методуnext().
Пример 1
Ввод
Вывод