Задачи
Задача 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 xn
poly_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
Ввод
Вывод