Пора решить, что горит. Доски горят, песок падает, а мокрая губка вроде бы деревяшка, но огонь на ней только шипит. Свойства не выстраиваются в одну линейку: блок может быть и падающим, и горючим одновременно.
Собрать три блока из готовых кусков. Тела классов пустые — всё достаётся по наследству. У Waterlogged и Flammable метод называется одинаково: побеждает тот класс, что стоит раньше в списке баз.
Структура программы
Отправляется целая программа. Ниже — то, что в ней должно быть объявлено: имена классов, их родители и сигнатуры методов. Имена менять нельзя, проверки обращаются именно к ним.
# дано: класс из главы 1, упрощённый
class Block:
def __init__(self, name):
self.name = name
def place(self):
return f"ставим: {self.name}"
class Flammable:
def burn(self):
return "сгорает"
class Waterlogged:
def burn(self):
return "шипит и гаснет"
class Falling:
def fall(self):
return "падает вниз"
# TODO: class Planks — блок, горючий
# TODO: class Sand — блок, падающий
# TODO: class WetSponge — мокрый (важнее), горючий, блок
Как проверяется
Проверяющая программа дописывает к твоему коду блок проверок и выполняет всё вместе. Задача засчитывается, если ни одна проверка не сработала и программа ничего не напечатала — отладочную печать перед отправкой убери.
Примеры проверок
#!requires Block: place
#!requires Flammable: burn
#!requires Waterlogged: burn
#!requires Planks
#!requires Sand
#!requires WetSponge
# подготовка
planks = Planks("Доски")
# проверка
assert planks.place() == "ставим: Доски"
assert planks.burn() == "сгорает"
#!requires Block: place
#!requires Flammable: burn
#!requires Waterlogged: burn
#!requires Planks
#!requires Sand
#!requires WetSponge
# подготовка
planks = Planks("Доски")
planks.place() == 'ставим: Доски'
planks.burn() == 'сгорает'
sand = Sand("Песок")
# проверка
assert sand.place() == "ставим: Песок"
Строки #!requires — служебные: по ним система убеждается, что классы и методы действительно объявлены, а не подставлены обходным путём.
Вопрос: губка унаследована и от Waterlogged, и от Flammable, у обоих есть burn(). Что будет, если поменять их местами в списке баз?
---
| № | Входные данные | Выходные данные |
|
1
|
#!requires Block: place
#!requires Flammable: burn
#!requires Waterlogged: burn
#!requires Planks
#!requires Sand
#!requires WetSponge
# подготовка
planks = Planks("Доски")
# проверка
assert planks.place() == "ставим: Доски"
assert planks.burn() == "сгорает"
|
|
|
2
|
#!requires Block: place
#!requires Flammable: burn
#!requires Waterlogged: burn
#!requires Planks
#!requires Sand
#!requires WetSponge
# подготовка
planks = Planks("Доски")
planks.place() == 'ставим: Доски'
planks.burn() == 'сгорает'
sand = Sand("Песок")
# проверка
assert sand.place() == "ставим: Песок"
|
|