Отладочная панель показывает две цифры: сколько вокруг враждебных существ вообще (крипер ведь тоже враждебный) и сколько среди них именно зомби, без наследников и допущений.
isinstance отвечает на вопрос «является ли разновидностью», type(x) is C — «ровно этот класс».
Структура программы
Отправляется целая программа. Ниже — то, что в ней должно быть объявлено: имена классов, их родители и сигнатуры методов. Имена менять нельзя, проверки обращаются именно к ним.
# дано: классы из главы 3, упрощённые
class Mob:
def __init__(self, name):
self.name = name
class Hostile(Mob):
pass
class Creeper(Hostile):
pass
def count_hostile(mobs):
# TODO: сколько объектов враждебны, включая наследников
...
def count_exact(mobs, cls):
# TODO: сколько объектов ровно класса cls
...
def describe(mob):
# TODO: "<имя> — <класс>, враждебный" либо "<имя> — <класс>, мирный"
...
Как проверяется
Проверяющая программа дописывает к твоему коду блок проверок и выполняет всё вместе. Задача засчитывается, если ни одна проверка не сработала и программа ничего не напечатала — отладочную печать перед отправкой убери.
Примеры проверок
#!requires Mob
#!requires Hostile
#!requires Creeper
# подготовка
crowd = [Mob("Корова"), Hostile("Зомби"), Creeper("Крипер")]
# проверка
assert count_hostile(crowd) == 2
#!requires Mob
#!requires Hostile
#!requires Creeper
# подготовка
crowd = [Mob("Корова"), Hostile("Зомби"), Creeper("Крипер")]
# проверка
assert count_exact(crowd, Hostile) == 1
Строки #!requires — служебные: по ним система убеждается, что классы и методы действительно объявлены, а не подставлены обходным путём.
Вопрос: почему count_hostile даёт 2, а count_exact(crowd, Hostile) — 1?
---
| № | Входные данные | Выходные данные |
|
1
|
#!requires Mob
#!requires Hostile
#!requires Creeper
# подготовка
crowd = [Mob("Корова"), Hostile("Зомби"), Creeper("Крипер")]
# проверка
assert count_hostile(crowd) == 2
|
|
|
2
|
#!requires Mob
#!requires Hostile
#!requires Creeper
# подготовка
crowd = [Mob("Корова"), Hostile("Зомби"), Creeper("Крипер")]
# проверка
assert count_exact(crowd, Hostile) == 1
|
|