Решение задачи Кастомизированные контейнеры с Яндекс Контест

Без пояснения   Просмотров: 2213


Вас попросили написать 2 класса, CustomList и CustomDict, оба эти класса имеют атрибут data, в котором хранится ссылка на список или словарь соответственно. В конструкторе класса передается список или словарь, также атрибут data можно изменять в процессе работы с классами, то есть:

my_list = CustomList([1, 2, 3])
my_list.data = [1, 2]
Оба эти класса имеют одни и те же свойства:

- size - размер списка или словаря,
- max_value - максимальный элемент списка или максимальный ключ словаря
- min_value - минимальный элемент списка или минимальный ключ словаря
и также печать экземпляров обоих классов должна возвращать строку в формате:

My CustomList data [1, 2, 3] (My CustomDict data {1:1, 2:2, 3:3})

Общие свойства и методы этих двух классов должны реализованы в классе CommonProperties, от которого
будут

наследоваться
будут наследоваться классы CustomList и CustomDict.

max_value и min_value для словаря нужно считать не только по ключам, но и по значениям. В случае, если вы пытаетесь сравнить несравнимые объекты, нужно попытаться посчитать max_value и min_value только по ключам, если и это невалидно, нужно выкинуть исключение TypeError. Для этого функционала
реализуйте

класс
реализуйте класс DictProperties, от которого будет наследоваться класс CustomDict.

Если же вы пытаетесь сравнить несравнимые для списка объекты (например, строки и числа), нужно выкинуть исключение TypeError.

Код

import sys


class CommonProperties():
    def __init__(self, data):
        self.data = data

    def __repr__(self):
        return f'My {self.__class__.__name__} data {self.data}'

    @property
    def size(self):
        return len(self.data)

    def find_min(self):
        return min(self.data)

    @property
    def min_value(self):
        return self.find_min()

    def find_max(self):
        return max(self.data)

    @property
    def max_value(self):
        return self.find_max()


class CustomList(CommonProperties):
    pass


class DictProperties(CommonProperties):
    def find_max(self):
        max_key = super().find_max()
        try:
            max_value = max(self.data.values())
            return max(max_key, max_value)
        except TypeError:
            return max_key

    def find_min(self):
        min_key = super().find_min()
        try:
            min_value = min(self.data.values())
            return min(min_key, min_value)
        except TypeError:
            return min_key


class CustomDict(DictProperties):
    pass
exec(sys.stdin.read())

         

Администратор Photo Автор: Администратор



Комментарии

Чтобы написать комментарии вам нужно войти в систему или зарегистрироваться



Заявка на расчет