diff --git a/lists/lists.py b/lists/lists.py index 04d850f..f12b78f 100644 --- a/lists/lists.py +++ b/lists/lists.py @@ -8,7 +8,16 @@ def replace(input_list: list[int]) -> list[int]: :param input_list: Исходный список :return: Список с замененными элементами """ - pass + if not input_list: + return input_list + max_value = input_list[0] + for items in input_list: + if items > max_value: + max_value = items + replaced_list = list( + map(lambda replaced: max_value if replaced > 0 else replaced, input_list) + ) + return replaced_list @staticmethod def search(input_list: list[int], query: int) -> int: @@ -20,4 +29,21 @@ def search(input_list: list[int], query: int) -> int: :param query: Искомый элемент :return: Номер элемента """ - pass + if len(input_list) == 0: + return -1 + + mid = len(input_list) // 2 + + if input_list[mid] == query: + return mid + + elif query < input_list[mid]: + return ListExercise.search(input_list[:mid], query) + + else: + new_mid = mid + 1 + result = ListExercise.search(input_list[new_mid:], query) + if result == -1: + return -1 + else: + return mid + 1 + result diff --git a/maps/maps.py b/maps/maps.py index dd5d560..c2767c5 100644 --- a/maps/maps.py +++ b/maps/maps.py @@ -13,7 +13,16 @@ def rating(list_of_movies: list[dict]) -> float: Ключи словаря: name, rating_kinopoisk, rating_imdb, genres, year, access_level, country :return: Средний рейтинг фильмов у которых две или больше стран """ - pass + more_2_countries_movies = [] + for movie in list_of_movies: + if ( + movie["rating_kinopoisk"] + and float(movie["rating_kinopoisk"]) != 0 + and movie["country"].count(",") >= 1 + ): + more_2_countries_movies.append(movie) + rating = map(lambda movie: float(movie["rating_kinopoisk"]), more_2_countries_movies) + return sum(rating) / len(more_2_countries_movies) @staticmethod def chars_count(list_of_movies: list[dict], rating: Union[float, int]) -> int: @@ -28,4 +37,9 @@ def chars_count(list_of_movies: list[dict], rating: Union[float, int]) -> int: :return: Количество букв 'и' в названиях всех фильмов с рейтингом больше или равным заданному значению """ - pass + rating_movies = [] + for movie in list_of_movies: + if movie["rating_kinopoisk"] and float(movie["rating_kinopoisk"]) >= rating: + rating_movies.append(movie) + letters = map(lambda movie: movie["name"].count("и"), rating_movies) + return sum(letters) diff --git a/sql_commands.txt b/sql_commands.txt new file mode 100644 index 0000000..f25e057 --- /dev/null +++ b/sql_commands.txt @@ -0,0 +1,56 @@ +#Создаем таблицу regions (Регионы) +CREATE TABLE "regions" ( + id serial PRIMARY KEY, + name varchar +); +#Создаем таблицу locations (Расположения) +CREATE TABLE "locations" ( + id serial PRIMARY KEY, + address varchar, + region_id int, + FOREIGN KEY(region_id) REFERENCES regions(id) +); +#Создаем таблицу departments (Подразделения) +CREATE TABLE "departments" ( + id serial PRIMARY KEY, + name varchar, + location_id int, + manager_id int, + FOREIGN KEY(location_id) REFERENCES locations (id) +); + +#Создаем таблицу employees (работники, включая менеджеров) +CREATE TABLE "employees" ( + id serial PRIMARY KEY, + name varchar, + last_name varchar, + hire DATE, + salary int, + email varchar, + manager_id int, + department_id int, + FOREIGN KEY(department_id) REFERENCES departments (id), + FOREIGN KEY(manager_id) REFERENCES employees (id) +); + +# Добавляем FOREIGN KEY manager_id к таблице departments +ALTER TABLE departments ADD CONSTRAINT fk_manager_id FOREIGN KEY(manager_id) REFERENCES employees(id); + +# Выборки +# 1)Показать работников у которых нет почты или почта не в корпоративном домене (домен dualbootpartners.com) +SELECT * FROM employees WHERE email is NULL OR email NOT LIKE '%@dualbootpartners.com'; +# 2)Получить список работников нанятых в последние 30 дней +SELECT * FROM employees WHERE AGE(NOW(), hire) <= INTERVAL '30 days'; +# 3) Найти максимальную и минимальную зарплату по каждому департаменту +SELECT department_id, MAX(salary) AS max_salary, MIN(salary) AS min_salary FROM employees GROUP BY department_id; +# 4)Посчитать количество работников в каждом регионе +SELECT r.name AS region_name, COUNT(*) AS employees_count +FROM employees e +INNER JOIN departments d ON e.department_id = d.id +INNER JOIN locations l ON d.location_id = l.id +INNER JOIN regions r ON l.region_id = r.id +GROUP BY r.name; +# 5)Показать сотрудников у которых фамилия длиннее 10 символов +SELECT * FROM employees WHERE LENGTH(last_name) > 10; +# 6) Показать сотрудников с зарплатой выше средней по всей компании +SELECT * FROM employees WHERE salary > (SELECT AVG(salary) FROM employees); \ No newline at end of file