Олимпиадный тренинг

Задача . Свой мир. 03. Мобы просыпаются


Задача

Темы:

Наступает вечер, и в мире появляются первые существа. Корова бродит и молчит, зомби рычит, крипер подкрадывается беззвучно. Отладочная строка на каждый тик пишется одна и та же — менять её ты не собираешься.

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() == "Крипер рычит"

                         
Статистика успешных решений по компиляторам
Комментарий учителя