Code Generator | Python

Armor and GhostInArmor Classes in Python

This task involves creating two Python classes: Armor for managing armor parts and GhostInArmor, a subclass that adds a knight's name. Both classes feature methods for adding, displaying parts, and manipulating armor quantities effectively.


Empty image or helper icon

Prompt

Напишите два класса: Armor (Латы) и его наследник GhostInArmor (Призрак в латах).

Экземпляр класса Armor инициализируется с произвольным количеством аргументов – это кортежи (часть доспехов, количество), в том числе ни одного.

Класс имеет методы (ar – экземпляр класса):
– ar.add(key) – добавить часть, принимает аргумент – название добавляемой части, добавляется одна часть, если такая уже есть, и создается название с количеством 1, если нет;
 __repr__ – возвращает строковое представление, где латы – это кортежи имеющихся доспехов и их количества, упорядоченные по алфавиту, названия не повторяются:

Armor(<латы>)

Если лат нет, то возвращается строка:
Armor()

Экземпляр класса GhostInArmor принимает еще и именованный аргумент name – имя Рыцаря, по умолчанию Canterville.

Класс обеспечивает функциональность (gia – экземпляр класса):
– gia[key] – получить количество лат определенного вида по названию, если такой части нет, возвращает None;
– del gia[key] – удалить часть по названию;
– перебирать части в цикле, возвращаются названия частей;
– метод items() возвращает упорядоченный по алфавиту список кортежей (часть лат, количество);
– len(gia) – функция возвращает количество названий лат;
 __repr__ – переопределенный метод возвращает строку:

GhostInArmor(<латы>, name='<имя>')
если латы есть, иначе:

GhostInArmor(name='<имя>')

Пример
Ввод	Вывод
ar = Armor(("helmet", 1), ("glove", 2))
ar.add("bib")
print(ar)
print(Armor())
gia = GhostInArmor(("knee pad", 2), ("handlebar", 1), ("shoe", 1), name="Ghost")
print(gia)
Armor(('bib', 1), ('glove', 2), ('helmet', 1))
Armor()
GhostInArmor(('handlebar', 1), ('knee pad', 2), ('shoe', 1), name='Ghost')
Примечания
В файле, сдаваемом в тестирующую систему, не должно быть ничего кроме классов и, возможно, вспомогательных функций.

Answer

Описание задачегия классов Armor и GhostInArmor на Python

В данной задаче мы создадим два класса на языке Python: Armor, который управляет частями доспехов, и его наследник GhostInArmor, который расширяет функциональность, добавляя имя рыцаря. Каждый класс будет содержать необходимые методы и операции, как это описано в задаче.

Класс Armor

Описание

Класс Armor инициируется с кортежевыми аргументами, представляющими части доспехов и их количества. Он поддерживает методы добавления, представления в виде строки, а также возвращает количество уникальных частей.

Методы класса Armor

  • add: добавляет часть доспеха.
  • __repr__: возвращает строковое представление объекта.

Класс GhostInArmor

Описание

GhostInArmor наследует от Armor и добавляет именованный аргумент для имени рыцаря. Он предоставляет дополнительные функциональности для получения, удаления и перебора частей доспехов.

Методы класса GhostInArmor

  • getitem: позволяет получать количество доспеха по названию.
  • del: удаляет часть доспеха.
  • objects: перебирает и возвращает названия частей.
  • items: возвращает отсортированный список кортежей частей и их количества.
  • __repr__: возвращает строковое представление объекта.

Реализация классов

class Armor:
    def __init__(self, *args):
        """
        Инициализация класса Armor.

        :param args: произвольное количество кортежей с частями доспехов и их количеством
        """
        self.parts = {}
        for part, count in args:
            self.parts[part] = count

    def add(self, key):
        """
        Добавление части доспеха.

        :param key: название добавляемой части доспеха
        """
        if key in self.parts:
            self.parts[key] += 1  # Увеличиваем количество, если часть существует
        else:
            self.parts[key] = 1  # Инициализируем часть с количеством 1

    def __repr__(self):
        """
        Строковое представление объекта Armor.

        :return: строка с частями и их количеством
        """
        if not self.parts:
            return "Armor()"
        sorted_parts = sorted(self.parts.items())
        return "Armor(" + ', '.join(f"('{part}', {count})" for part, count in sorted_parts) + ")"


class GhostInArmor(Armor):
    def __init__(self, *args, name="Canterville"):
        """
        Инициализация класса GhostInArmor.

        :param args: произвольное количество кортежей с частями доспехов и их количеством
        :param name: имя рыцаря
        """
        super().__init__(*args)
        self.name = name

    def __getitem__(self, key):
        """
        Получение количества части доспеха по названию.

        :param key: название части доспеха
        :return: количество доспеха или None, если нет такой части
        """
        return self.parts.get(key, None)

    def __delitem__(self, key):
        """
        Удаление части доспеха.

        :param key: название части доспеха
        """
        if key in self.parts:
            del self.parts[key]

    def __iter__(self):
        """
        Перебор названий частей доспехов.

        :return: итератор по названиям частей доспехов
        """
        return iter(self.parts)

    def items(self):
        """
        Получение отсортированного списка кортежей (часть, количество).

        :return: отсортированный список кортежей
        """
        return sorted(self.parts.items())

    def __len__(self):
        """
        Получение количества уникальных частей доспехов.

        :return: количество уникальных частей
        """
        return len(self.parts)

    def __repr__(self):
        """
        Строковое представление объекта GhostInArmor.

        :return: строка с частями и именем рыцаря
        """
        if not self.parts:
            return f"GhostInArmor(name='{self.name}')"
        sorted_parts = sorted(self.parts.items())
        return "GhostInArmor(" + ', '.join(f"('{part}', {count})" for part, count in sorted_parts) + f", name='{self.name}')"


# Пример использования
if __name__ == "__main__":
    ar = Armor(("helmet", 1), ("glove", 2))
    ar.add("bib")
    print(ar)  # Armor(('bib', 1), ('glove', 2), ('helmet', 1))

    # Печать пустой доспехи
    print(Armor())  # Armor()

    gia = GhostInArmor(("knee pad", 2), ("handlebar", 1), ("shoe", 1), name="Ghost")
    print(gia)  # GhostInArmor(('handlebar', 1), ('knee pad', 2), ('shoe', 1), name='Ghost')

Заключение

В данном решении мы реализовали два класса с необходимыми методами, позволяющими управлять частями доспехов, а также расширили функциональность для класса-наследника. Эти классы идеально подходят для задач по управлению доспехами внутри игры или другой программной среды.

Create your Thread using our flexible tools, share it with friends and colleagues.

Your current query will become the main foundation for the thread, which you can expand with other tools presented on our platform. We will help you choose tools so that your thread is structured and logically built.

Description

This task involves creating two Python classes: Armor for managing armor parts and GhostInArmor, a subclass that adds a knight's name. Both classes feature methods for adding, displaying parts, and manipulating armor quantities effectively.