Skip to content

Домашнее задание для курса Core Python школы программистов hh

Notifications You must be signed in to change notification settings

sabkaryan/python-core-homework

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Tests

Настройка Github репозитория

Fork

Форкнуть репозиторий с домашкой

Включить Actions в своём форке

Screenshot 2022-01-12 at 17 13 36

  1. Перейти на гитхабе в форкнутый репозиторий (ссылка вида https://github.com/ваше_имяпользователя/python-core-homework)

  2. Перейти во вкладку Actions и нажать на кнопку I understand my workflows, go ahead and enable them :)

Настроить бейдж

Screenshot 2022-01-12 at 18 36 35

Открыть файл README.md заменить первую строку

[![Tests](https://github.com/sabkaryan/python-core-homework/actions/workflows/python-app.yml/badge.svg?branch=master)](https://github.com/sabkaryan/python-core-homework/actions/workflows/python-app.yml)

на

[![Tests](https://github.com/username/python-core-homework/actions/workflows/python-app.yml/badge.svg?branch=master)](https://github.com/username/python-core-homework/actions/workflows/python-app.yml)

где username - ваше_имяпользователя_на_github Теперь при пуше или мёрдже в master будут прогоняться юнит-тесты и бейдж будет показывать их состояние


Requirements

  • Python версии 3.8 или старше

Run

Для каждого упражнения написаны юнит тесты, которые лежат в папке tests

Для запуска всех тестов

  • перейти в директорию проекта
  • в консоле ввести
python -m unittest

Exercise 1

Написать функцию build_roles_tree, которая переводит данные маппинга ролей в категории в древовидную структуру

  • код Exercise 1
  • запуск тестов первого упражнения
python -m unittest tests.test_ex1.TestRolesTree

Термины

  • Роль - профессиональная роль пользователя (Автомойщик, Автослесарь, Курьер и тд)
  • Категория - профессиональная область, в которую входят роли (Автомобильный бизнес, Административный персонал, Высший менеджмент и тд)

Структура маппинга:

{
    "roles": {
        "1": {"id": "1", "name": "Text1"},
        "2": {"id": "2", "name": "Text2"},
    },
    "categories": {
        "category-1": {"id": "category-1", "name": "Category Text 1", "roleIds": ["1", "2"]},
        "category-2": {"id": "category-2", "name": "Category Text 2", "roleIds": ["3", "4"]}
    },
    "categoryIdsSorted": ["category-1", "category-2"],
}
  • roles - словарь ролей
    • ключ - id роли
    • значение - словарь вида
      {
        "id": "1", # id роли 
        "name": "Text1" # имя роли
      }
  • categories - словарь категорий
    • ключ - id категории
    • значение - словарь вида
      {
        "id": "category-1", # id категории
        "name": "Category Text 1", # имя категории
        "roleIds": ["1", "2"] # отсортированный список `id` ролей, входящих в категорию
      }
  • categoryIdsSorted - список id категорий, представляющий порядок сортировки

Дерево ролей

Функция build_roles_tree должна вернуть древовидную структура вида

{
    "categories": [
        {
            "id": "category-19",  # идентификатор вида `category-{id_категории}`
            "text": "Автомобильный бизнес",  # имя категории
            "items":  # список ролей, входящих в категорию
                [
                    {"id": "4", "text": "Автомойщик"},
                    {"id": "5", "text": "Автослесарь, автомеханик"},
                    {"id": "62", "text": "Мастер-приемщик"},
                    {
                        "id": "70",  # id роли
                        "text": "Менеджер по продажам, менеджер по работе с клиентами",  # имя роли
                    },
                ],
        },
    ]
}

Exercise 2

Написать реализацию декоратора benchmark, который на вход принимает количество прогонов num оборачиваемой функции func, совершает num прогонов func и выводит в консоль время каждого прогона и среднее время всех прогонов.

среднее_время = сумарное_время_всех_прогонов / num

  • код Exercise 2
  • запуск тестов второго упражнения
python -m unittest tests.test_ex2.TestFetchPage

Exercise 3

В этом упражнении вам предстоит реализовать игру Камень, ножницы, бумага. Функция определения победителя уже реализована determine_winner. Допишите недостающий код.

Запуск тестов третьего упражнения

python -m unittest tests.test_ex3.TestGame

Exercise 4

Написать реализацию функции cross_join, которая возвращает генератор пар (LastName, DepartmentName) аналогичных результату запроса

SELECT LastName, DepartmentName
FROM Employee,
     Department

Employee table

LastName DepartmentID
Rafferty 31
Jones 33
Heisenberg 33
Robinson 34
Smith 34
Williams 31

Department table

DepartmentID DepartmentName
31 Sales
33 Engineering
34 Clerical
35 Marketing
  • код Exercise 4
  • запуск тестов четвёртого упражнения
python -m unittest tests.test_ex4.TestCrossJoin

About

Домашнее задание для курса Core Python школы программистов hh

Resources

Stars

Watchers

Forks

Languages