Подборка задач с решениями - 18
- Категория: Python
- Дата публикации: 2022-01-12
- Опубликовано на сайте: Stepik
Подборка беспощадных заданий от Института биоинформатики (Python курсы на Stepik).
Задача 1:
Вам дано описание наследования классов в формате JSON. Описание представляет из себя массив JSON-объектов, которые соответствуют классам. У каждого JSON-объекта есть поле name, которое содержит имя класса, и поле parents, которое содержит список имен прямых предков.
Пример: [{"name": "A", "parents": []}, {"name": "B", "parents": ["A", "C"]}, {"name": "C", "parents": ["A"]}]
Эквивалент на Python:
Гарантируется, что никакой класс не наследуется от себя явно или косвенно, и что никакой класс не наследуется явно от одного класса более одного раза.
Для каждого класса вычислите предком скольких классов он является и выведите эту информацию в следующем формате.
<имя класса> : <количество потомков>
Выводить классы следует в лексикографическом порядке.
Решение:
Все решения теперь можно найти в сообществе Как войти в IT
Задача 2:
Вам дано описание наследования классов в следующем формате. <имя класса 1> : <имя класса 2> <имя класса 3> ... <имя класса k> Это означает, что класс 1 отнаследован от класса 2, класса 3, и т. д.
Или эквивалентно записи:
Класс A является прямым предком класса B, если B отнаследован от A:
Класс A является предком класса B, если:
- A = B;
- A - прямой предок B
- существует такой класс C, что C - прямой предок B и A - предок C
Например:
A -- предок С
Вам необходимо отвечать на запросы, является ли один класс предком другого класса
Решение:
Все решения теперь можно найти в сообществе Как войти в IT
Задача 3:
Реализуйте структуру данных, представляющую собой расширенную структуру стек. Необходимо поддерживать добавление элемента на вершину стека, удаление с вершины стека, и необходимо поддерживать операции сложения, вычитания, умножения и целочисленного деления.
Операция сложения на стеке определяется следующим образом. Со стека снимается верхний элемент (top1), затем снимается следующий верхний элемент (top2), и затем как результат операции сложения на вершину стека кладется элемент, равный top1 + top2.
Аналогичным образом определяются операции вычитания (top1 - top2), умножения (top1 * top2) и целочисленного деления (top1 // top2).
Реализуйте эту структуру данных как класс ExtendedStack, отнаследовав его от стандартного класса list.
Требуемая структура класса:
Решение:
Все решения теперь можно найти в сообществе Как войти в IT
Задача 4:
Одно из применений множественного наследование – расширение функциональности класса каким-то заранее определенным способом. Например, если нам понадобится логировать какую-то информацию при обращении к методам класса.
Рассмотрим класс Loggable:
У него есть ровно один метод log, который позволяет выводить в лог (в данном случае в stdout) какое-то сообщение, добавляя при этом текущее время. Реализуйте класс LoggableList, отнаследовав его от классов list и Loggable таким образом, чтобы при добавлении элемента в список посредством метода append в лог отправлялось сообщение, состоящее из только что добавленного элемента.
Решение:
Все решения теперь можно найти в сообществе Как войти в IT
Задача 5:
Реализуйте программу, которая будет эмулировать работу с пространствами имен. Необходимо реализовать поддержку создания пространств имен и добавление в них переменных.
В данной задаче у каждого пространства имен есть уникальный текстовый идентификатор – его имя.
Вашей программе на вход подаются следующие запросы:
-
create
– создать новое пространство имен с именем внутри пространства -
add
– добавить в пространство переменную -
get
– получить имя пространства, из которого будет взята переменная при запросе из пространства , или None, если такого пространства не существует
Решение:
Все решения теперь можно найти в сообществе Как войти в IT
Задача 6:
Реализуйте программу, которая будет вычислять количество различных объектов в списке. Два объекта a и b считаются различными, если a is b равно False.
Вашей программе доступна переменная с названием objects, которая ссылается на список, содержащий не более 100 объектов. Выведите количество различных объектов в этом списке.
Решение:
Все решения теперь можно найти в сообществе Как войти в IT
Задача 7:
Вам дается последовательность целых чисел и вам нужно ее обработать и вывести на экран сумму первой пятерки чисел из этой последовательности, затем сумму второй пятерки, и т. д.
Но последовательность не дается вам сразу целиком. С течением времени к вам поступают её последовательные части. Например, сначала первые три элемента, потом следующие шесть, потом следующие два и т. д.
Реализуйте класс Buffer, который будет накапливать в себе элементы последовательности и выводить сумму пятерок последовательных элементов по мере их накопления.
Одним из требований к классу является то, что он не должен хранить в себе больше элементов, чем ему действительно необходимо, т. е. он не должен хранить элементы, которые уже вошли в пятерку, для которой была выведена сумма.
Класс должен иметь следующий вид
Решение:
Все решения теперь можно найти в сообществе Как войти в IT
Задача 8:
Реализуйте класс MoneyBox, для работы с виртуальной копилкой.
Каждая копилка имеет ограниченную вместимость, которая выражается целым числом – количеством монет, которые можно положить в копилку. Класс должен поддерживать информацию о количестве монет в копилке, предоставлять возможность добавлять монеты в копилку и узнавать, можно ли добавить в копилку ещё какое-то количество монет, не превышая ее вместимость.
Класс должен иметь следующий вид
При создании копилки, число монет в ней равно 0.
Решение:
Все решения теперь можно найти в сообществе Как войти в IT
Задача 9:
Вам дано описание наследования классов исключений в следующем формате. <имя исключения 1> : <имя исключения 2> <имя исключения 3> ... <имя исключения k> Это означает, что исключение 1 наследуется от исключения 2, исключения 3, и т. д.
Или эквивалентно записи:
class Error1(Error2, Error3 ... ErrorK):
Антон написал код, который выглядит следующим образом.
Костя посмотрел на этот код и указал Антону на то, что некоторые исключения можно не ловить, так как ранее в коде будет пойман их предок. Но Антон не помнит какие исключения наследуются от каких. Помогите ему выйти из неловкого положения и напишите программу, которая будет определять обработку каких исключений можно удалить из кода. Важное примечание: В отличие от предыдущей задачи, типы исключений не созданы. Создавать классы исключений также не требуется Мы просим вас промоделировать этот процесс, и понять какие из исключений можно и не ловить, потому что мы уже ранее где-то поймали их предка.
Решение:
Все решения теперь можно найти в сообществе Как войти в IT
Задача 10:
Реализуйте класс PositiveList, отнаследовав его от класса list, для хранения положительных целых чисел. Также реализуйте новое исключение NonPositiveError.
В классе PositiveList переопределите метод append(self, x) таким образом, чтобы при попытке добавить неположительное целое число бросалось исключение NonPositiveError и число не добавлялось, а при попытке добавить положительное целое число, число добавлялось бы как в стандартный list.
В данной задаче гарантируется, что в качестве аргумента x метода append всегда будет передаваться целое число.
Решение:
Все решения теперь можно найти в сообществе Как войти в IT
Задача 11:
Это упрощенный вариант классической сложной задачи об островах. Здесь матрица состоит из 5х5 элементов, однако решение подойдет для массива любого размера - в том числе прямоугольного.
Вводится двумерный список размерностью 5 х 5 элементов, состоящий из нулей и, в некоторых позициях, единиц (см. пример ввода ниже). Требуется проверить, не касаются ли единицы друг друга по горизонтали, вертикали и диагонали. То есть, вокруг каждой единицы должны быть нули. Если проверка проходит вывести ДА, иначе - НЕТ.
Решение:
Все решения теперь можно найти в сообществе Как войти в IT