Инвентарь показывает игроку «Алмаз x3». Отладочная консоль должна показывать другое: строку, по которой предмет можно создать заново. Одной записи на всё не хватает.
__str__ — для игрока, __repr__ — для разработчика: по нему видно, как объект создать. Печать списка идёт через __repr__, а не через __str__ — последняя строка тестов ровно про это.
Структура программы
Отправляется целая программа. Ниже — то, что в ней должно быть объявлено: имена классов, их родители и сигнатуры методов. Имена менять нельзя, проверки обращаются именно к ним.
class Item:
def __init__(self, name, amount):
self.name = name
self.amount = amount
def __str__(self):
return f"{self.name} x{self.amount}"
# TODO: __repr__ -> Item('Алмаз', 3)
class ToolItem(Item):
def __init__(self, name, durability):
super().__init__(name, 1)
self.durability = durability
def __str__(self):
return f"{self.name} ({self.durability}%)"
# TODO: __repr__ -> ToolItem('Кирка', 87)
Как проверяется
Проверяющая программа дописывает к твоему коду блок проверок и выполняет всё вместе. Задача засчитывается, если ни одна проверка не сработала и программа ничего не напечатала — отладочную печать перед отправкой убери.
Примеры проверок
#!requires Item: __str__, __repr__
#!requires ToolItem: __str__, __repr__
# подготовка
bag = [Item("Алмаз", 3), ToolItem("Кирка", 87)]
# проверка
assert str(bag[0]) == "Алмаз x3"
#!requires Item: __str__, __repr__
#!requires ToolItem: __str__, __repr__
# подготовка
bag = [Item("Алмаз", 3), ToolItem("Кирка", 87)]
# проверка
assert str(bag[1]) == "Кирка (87%)"
Строки #!requires — служебные: по ним система убеждается, что классы и методы действительно объявлены, а не подставлены обходным путём.
Вопрос: print(bag) печатает не то же самое, что print(bag[0]). Почему?
---
| № | Входные данные | Выходные данные |
|
1
|
#!requires Item: __str__, __repr__
#!requires ToolItem: __str__, __repr__
# подготовка
bag = [Item("Алмаз", 3), ToolItem("Кирка", 87)]
# проверка
assert str(bag[0]) == "Алмаз x3"
|
|
|
2
|
#!requires Item: __str__, __repr__
#!requires ToolItem: __str__, __repr__
# подготовка
bag = [Item("Алмаз", 3), ToolItem("Кирка", 87)]
# проверка
assert str(bag[1]) == "Кирка (87%)"
|
|