Как только Джеппетто пришёл домой, он без промедления взял свой инструмент и начал вырезать деревянного человечка. Сначала он сделал ему волосы, потом лоб и, наконец, глаза. Чтобы определиться с тем, что есть у Пиноккио и что он умеет делать по мере вырезания из полена, напишите класс Полено (Block), который при создании принимает параметры: имя (строка), масса, длина носа (целые числа). Класс реализует (инкапсулирует) функциональность:
str(b) — возвращает свое имя в формате Wooden man <имя>;
b.fall() — падает на ногу. В зависимости от массы возвращает строку из Oops, повторённых количество раз, равное масса // 10;
b.lie(phrase) — врёт. Если длина фразы кратна 3 и нечётная, значит соврал, длина носа увеличивается на 1 и возвращается False. Если чётная и не кратна 3, сказал правду, длина носа уменьшается на 1, если она больше 1 (ну не пропадать же носу совсем, пусть останется маленький и аккуратный!), и возвращается True. В остальных случаях просто возвращается None;
b.pry(length) — сует нос, куда не следует. Вызывается с аргументом — размер отверстия, в которое сунут нос. Возвращает True / False — достанет / не достанет в зависимости от сравнения длин;
экземпляры класса Полено можно сравнивать (применять операторы <, >, <=, >=, ==, !=). Сначала сравниваем по массе, затем по длине носа. Если они одинаковы, то сравниваем по длине имени, а затем по алфавиту.
Пример 1
Ввод Вывод
from solution import Block
b = Block('Pinocchio', 23, 15)
print(b)
print(b.fall())
b.lie('I never lie!')
print(b.lie('I am the most obedient boy!'))
print(b.lie('I am not lying!'))
print(b.pry(15))
Wooden man Pinocchio
OopsOops
False
False
True
Пример 2
Ввод Вывод
from solution import Block
b_1 = Block('Pinocchio', 23, 15)
b_2 = Block('Buratino', 23, 15)
print(b_1, b_2, sep='\n')
print(b_1.fall())
print(b_1 < b_2, b_1 >= b_2, b_1 != b_2)
print(b_2.pry(21))
Wooden man Pinocchio
Wooden man Buratino
OopsOops
False True True
False