Наступает вечер, и в мире появляются первые существа. Корова бродит и молчит, зомби рычит, крипер подкрадывается беззвучно. Отладочная строка на каждый тик пишется одна и та же — менять её ты не собираешься.
tick() написан один раз в базовом классе и вызывает move() и sound(). Наследники переопределяют только своё, а строка получается разной сама.
Структура программы
Отправляется целая программа. Ниже — то, что в ней должно быть объявлено: имена классов, их родители и сигнатуры методов. Имена менять нельзя, проверки обращаются именно к ним.
class Mob:
def __init__(self, name):
self.name = name
def move(self):
return f"{self.name} бродит"
def sound(self):
return f"{self.name} молчит"
def tick(self): # менять нельзя
return f"{self.move()}, {self.sound()}"
class Hostile(Mob):
# TODO: sound() -> "<имя> рычит"
pass
class Creeper(Hostile):
# TODO: move() -> "<имя> подкрадывается"
pass
Как проверяется
Проверяющая программа дописывает к твоему коду блок проверок и выполняет всё вместе. Задача засчитывается, если ни одна проверка не сработала и программа ничего не напечатала — отладочную печать перед отправкой убери.
Примеры проверок
#!requires Mob: move, sound, tick
#!requires Hostile: sound
#!requires Creeper: move
# подготовка
creeper = Creeper("Крипер")
# проверка
assert creeper.move() == "Крипер подкрадывается"
#!requires Mob: move, sound, tick
#!requires Hostile: sound
#!requires Creeper: move
# подготовка
creeper = Creeper("Крипер")
creeper.move() == 'Крипер подкрадывается'
# проверка
assert creeper.sound() == "Крипер рычит"
Строки #!requires — служебные: по ним система убеждается, что классы и методы действительно объявлены, а не подставлены обходным путём.
Вопрос: в Creeper нет метода sound(). Откуда крипер берёт рычание — и почему не молчание? Задание на понимание: крипер вообще-то шипит. Добавь ему свой sound() так, чтобы остальные враждебные мобы продолжали рычать.
---
| № | Входные данные | Выходные данные |
|
1
|
#!requires Mob: move, sound, tick
#!requires Hostile: sound
#!requires Creeper: move
# подготовка
creeper = Creeper("Крипер")
# проверка
assert creeper.move() == "Крипер подкрадывается"
|
|
|
2
|
#!requires Mob: move, sound, tick
#!requires Hostile: sound
#!requires Creeper: move
# подготовка
creeper = Creeper("Крипер")
creeper.move() == 'Крипер подкрадывается'
# проверка
assert creeper.sound() == "Крипер рычит"
|
|