Необходимо реализовать декоратор @strict. Декоратор проверяет соответствие типов переданных в вызов функции аргументов типам аргументов, объявленным в прототипе функции.
- Аннотации типов аргументов можно получить из атрибута объекта функции
func.__annotations__или с помощью модуляinspect. - При несоответствии типов должно бросаться исключение
TypeError. - Гарантируется, что параметры в декорируемых функциях будут следующих типов:
bool,int,float,str. - В декорируемых функциях не будет значений параметров, заданных по умолчанию.
Необходимо реализовать скрипт, который будет получать с русскоязычной Википедии список всех животных из категории «Животные по алфавиту» и записывать в файл в формате beasts.csv количество животных на каждую букву алфавита.
А,642 Б,412 В,....
- Анализ текста производить не нужно.
- Считается любая запись из категории (включая названия родов и других таксономических единиц).
Когда пользователь заходит на страницу урока, сохраняется время его захода. Когда пользователь выходит с урока (или разрывает соединение с сервером), фиксируется время выхода.
Время присутствия каждого пользователя хранится в виде интервалов. В функцию передается словарь с тремя ключами:
lesson— начало и конец урока.pupil— интервалы присутствия ученика.tutor— интервалы присутствия учителя.
- Интервалы — это список из чётного количества элементов:
- Чётные индексы: время входа.
- Нечётные индексы: время выхода.
Написать функцию appearance, которая принимает на вход словарь с интервалами и возвращает общее время (в секундах), когда ученик и учитель одновременно присутствовали на уроке.
def appearance(intervals: dict[str, list[int]]) -> int:
pass
tests = [
{
'intervals': {
'lesson': [1594663200, 1594666800],
'pupil': [1594663340, 1594663389, 1594663390, 1594663395, 1594663396, 1594666472],
'tutor': [1594663290, 1594663430, 1594663443, 1594666473]
},
'answer': 3117
},
{
'intervals': {
'lesson': [1594702800, 1594706400],
'pupil': [
1594702789, 1594704500, 1594702807, 1594704542, 1594704512, 1594704513,
1594704564, 1594705150, 1594704581, 1594704582, 1594704734, 1594705009,
1594705095, 1594705096, 1594705106, 1594706480, 1594705158, 1594705773,
1594705849, 1594706480, 1594706500, 1594706875, 1594706502, 1594706503,
1594706524, 1594706524, 1594706579, 1594706641
],
'tutor': [
1594700035, 1594700364, 1594702749, 1594705148, 1594705149, 1594706463
]
},
'answer': 3577
},
{
'intervals': {
'lesson': [1594692000, 1594695600],
'pupil': [1594692033, 1594696347],
'tutor': [1594692017, 1594692066, 1594692068, 1594696341]
},
'answer': 3565
},
]
if __name__ == '__main__':
for i, test in enumerate(tests):
test_answer = appearance(test['intervals'])
assert test_answer == test['answer'], f'Error on test case {i}, got {test_answer}, expected {test["answer"]}'