8 Commits

Author SHA1 Message Date
Dmitry Medvedev 0cef93ef3b сделано ДЗ "алгоритмы обратки данных" 2026-10-22 23:58:50 +05:00
Dmitry Medvedev 2f2f48d3bf сделано ДЗ args, kwargs 2026-10-22 22:23:32 +05:00
Dmitry Medvedev fb2df83786 исправлены ошибки в 15.function and 16.varuables_on_default 2026-10-21 21:29:00 +05:00
Dmitry Medvedev 71b3042b43 сделано ДЗ "значения по умолчанию" 2026-10-20 00:50:22 +05:00
Dmitry Medvedev 54bd4595ea исправлено заменчание в 15.function.ipynb 2026-10-19 23:54:44 +05:00
Dmitry Medvedev ca8905a19c python. homework. functions 2026-10-19 01:26:12 +05:00
Dmitry Medvedev 71b54cb383 ДЗ "время и дата" python 2026-10-09 15:36:31 +05:00
Dmitry Medvedev 4354371ac0 добавлено ДЗ "обработка ошибок и исключений" 2026-10-09 02:02:13 +05:00
6 changed files with 1313 additions and 0 deletions
@@ -0,0 +1,231 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "9b88d6f7",
"metadata": {},
"source": [
"Задача 1. Безопасное преобразование числа\n",
"Пользователь вводит число с клавиатуры.\n",
"Нужно:\n",
" попытаться преобразовать ввод в int;\n",
" если получилось — вывести:\n",
" само число;\n",
" его квадрат;\n",
" его удвоенное значение;\n",
" если не получилось — вывести сообщение об ошибке."
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "66c30856",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"44\n",
"1936\n",
"88\n"
]
}
],
"source": [
"a = input(\"vvedite 4islo s klaviaturi\")\n",
"try:\n",
" a = int(a)\n",
" print(a)\n",
" print(a ** 2)\n",
" print(a * 2)\n",
"except:\n",
" print(\"error\")"
]
},
{
"cell_type": "markdown",
"id": "7be390bd",
"metadata": {},
"source": [
"Задача 2. Деление чисел с разными ошибками\n",
"Напиши программу, которая:\n",
" просит пользователя ввести два числа;\n",
" первое число — делимое;\n",
" второе число — делитель;\n",
"пытается:\n",
" преобразовать оба значения в float;\n",
" выполнить деление;\n",
"обрабатывает ошибки:\n",
" если введено не число;\n",
" если попытались делить на ноль.\n",
"Если всё прошло успешно, вывести результат деления."
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "259db03e",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2.0\n"
]
}
],
"source": [
"a = input(\"vvedite pervoe 4islo - delimoe\")\n",
"b = input(\"vvedite vtoroe 4islo - delitel\")\n",
"try:\n",
" a = float(a)\n",
" b = float(b)\n",
" print(a / b)\n",
"except ValueError:\n",
" print(\"nevernii type of data\")\n",
"except ZeroDivisionError:\n",
" print(\"delenie na 0\")\n"
]
},
{
"cell_type": "markdown",
"id": "654327c9",
"metadata": {},
"source": [
"Задача 3. Обработка списка строк с числами\n",
"Дан список строк:\n",
"values= [\"10\",\"20\",\"abc\",\"40\",\"\",\"15\"]\n",
"\n",
"Нужно пройти по списку и для каждого элемента:\n",
" попытаться преобразовать его в число;\n",
" если получилось — вывести:\n",
" исходное значение;\n",
" число;\n",
" квадрат числа;\n",
" если не получилось — вывести сообщение, что элемент не удалось преобразовать.\n",
"В конце дополнительно вывести:\n",
" сколько элементов успешно обработано;\n",
" сколько элементов вызвали ошибку."
]
},
{
"cell_type": "code",
"execution_count": 63,
"id": "15ba90bc",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"common text - 10\n",
"number - 10\n",
"sqr number - 100\n",
"common text - 20\n",
"number - 20\n",
"sqr number - 400\n",
"ne ydalos preobrazovat abc\n",
"common text - 40\n",
"number - 40\n",
"sqr number - 1600\n",
"ne ydalos preobrazovat \n",
"common text - 15\n",
"number - 15\n",
"sqr number - 225\n",
"uspeshno obrabotano 4\n",
"oshibok sdelano 2\n"
]
}
],
"source": [
"values = [\"10\",\"20\",\"abc\",\"40\",\"\",\"15\"]\n",
"success = 0\n",
"errors = 0\n",
"for i in values:\n",
" try:\n",
" a = int(i)\n",
" print(f\"common text - {i}\")\n",
" print(f\"number - {a}\")\n",
" print(f\"sqr number - {a**2}\")\n",
" success += 1\n",
" except ValueError:\n",
" print(f\"ne ydalos preobrazovat {i}\")\n",
" errors += 1\n",
"print(f\"uspeshno obrabotano {success}\")\n",
"print(f\"oshibok sdelano {errors}\")"
]
},
{
"cell_type": "markdown",
"id": "51101218",
"metadata": {},
"source": [
"Задача 4. Использование else и finally\n",
"Попроси пользователя ввести целое число.\n",
"Программа должна:\n",
" в блоке try попытаться преобразовать ввод в int;\n",
" в except обработать ошибку ввода;\n",
" в else вывести:\n",
" число;\n",
" его куб;\n",
" сообщение, что операция выполнена успешно;\n",
"в finally вывести:\n",
" \"Программа завершила попытку обработки\"."
]
},
{
"cell_type": "code",
"execution_count": 64,
"id": "f2a891bd",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"3\n",
"27\n",
"операция выполнена успешно\n",
"программа завершила попытку обработки\n"
]
}
],
"source": [
"a = input(\"введите целое число\")\n",
"try:\n",
" a = int(a)\n",
"except ValueError:\n",
" print(\"ошибка ввода\")\n",
"else:\n",
" print(a)\n",
" print(a**3)\n",
" print(\"операция выполнена успешно\")\n",
"finally:\n",
" print(\"программа завершила попытку обработки\")"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.13.7"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
+263
View File
@@ -0,0 +1,263 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "901c685d",
"metadata": {},
"source": [
"Задача 1. Текущая дата и время + разбор на части\n",
"Напиши программу, которая:\n",
" получает текущую дату и время;\n",
" выводит:\n",
" полную дату и время;\n",
" отдельно год;\n",
" отдельно месяц;\n",
" отдельно день;\n",
" отдельно часы;\n",
" отдельно минуты;\n",
" дополнительно выводит дату в формате:\n",
" YYYY-MM-DD\n",
" DD.MM.YYYY"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "a9776c66",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Полная текущая дата и время - 2026-10-09 11:53:36.376962\n",
"Год - 2026\n",
"Месяц - 10\n",
"День - 9\n",
"Часы - 11\n",
"Минуты - 53\n",
"Формат вывода YYYY-MM-DD - 2026-10-09\n",
"Формат вывода DD.MM.YYYY - 09.10.2026\n"
]
}
],
"source": [
"from datetime import datetime\n",
"now = datetime.now()\n",
"print(f\"Полная текущая дата и время - {now}\")\n",
"print(f\"Год - {now.year}\")\n",
"print(f\"Месяц - {now.month}\")\n",
"print(f\"День - {now.day}\")\n",
"print(f\"Часы - {now.hour}\")\n",
"print(f\"Минуты - {now.minute}\")\n",
"print(f\"Формат вывода YYYY-MM-DD - {now.strftime(\"%Y-%m-%d\")}\")\n",
"print(f\"Формат вывода DD.MM.YYYY - {now.strftime(\"%d.%m.%Y\")}\")"
]
},
{
"cell_type": "markdown",
"id": "69b619b5",
"metadata": {},
"source": [
"Задача 2. Работа с конкретной датой\n",
"Создай вручную дату события:\n",
"2025-12-31 18:45:00\n",
"Нужно:\n",
" вывести эту дату;\n",
" вывести отдельно:\n",
" год;\n",
" месяц;\n",
" день;\n",
" часы;\n",
" минуты;\n",
" создать ещё одну дату:\n",
" 2026-01-05 09:00:00\n",
" посчитать разницу между этими двумя датами;\n",
" вывести:\n",
" полную разницу;\n",
" количество дней."
]
},
{
"cell_type": "code",
"execution_count": 45,
"id": "af9e0816",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Дата - 2025-12-31\n",
"Год - 2025\n",
"Месяц - 12\n",
"День - 31\n",
"Часы - 18\n",
"Минуты - 45\n",
"Полная разница между датами '-5 days, 9:45:00'\n",
"Разница в количестве дней -5\n"
]
}
],
"source": [
"from datetime import datetime, timedelta\n",
"\n",
"date_event_str = \"2025-12-31 18:45:00\"\n",
"date_event = datetime.strptime(date_event_str, \"%Y-%m-%d %H:%M:%S\")\n",
"print(f\"Дата - {date_event.strftime(\"%Y-%m-%d\")}\") \n",
"print(f\"Год - {date_event.year}\")\n",
"print(f\"Месяц - {date_event.month}\")\n",
"print(f\"День - {date_event.day}\")\n",
"print(f\"Часы - {date_event.hour}\")\n",
"print(f\"Минуты - {date_event.minute}\")\n",
"\n",
"another_date_event_str = \"2026-01-05 09:00:00\"\n",
"another_date_event = datetime.strptime(another_date_event_str, \"%Y-%m-%d %H:%M:%S\")\n",
"differences = date_event - another_date_event\n",
"print(f\"Полная разница между датами '{differences}'\")\n",
"print(f\"Разница в количестве дней {differences.days}\")"
]
},
{
"cell_type": "markdown",
"id": "470d379a",
"metadata": {},
"source": [
"Задача 3. Прибавление и вычитание времени\n",
"Напиши программу, которая:\n",
" получает текущую дату;\n",
" считает:\n",
" дату через 7 дней;\n",
" дату через 30 дней;\n",
" дату 14 дней назад;\n",
" выводит все результаты;"
]
},
{
"cell_type": "code",
"execution_count": 48,
"id": "060745f2",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2026-10-09 14:11:42.487216\n",
"2026-10-16 14:11:42.487216\n",
"2026-11-08 14:11:42.487216\n",
"2026-09-25 14:11:42.487216\n"
]
}
],
"source": [
"from datetime import datetime, timedelta\n",
"now = datetime.now()\n",
"in_7_days = now + timedelta(days=7)\n",
"in_30_days = now + timedelta(days=30)\n",
"before_14_days = now - timedelta(days=14)\n",
"print(now)\n",
"print(in_7_days)\n",
"print(in_30_days)\n",
"print(before_14_days)"
]
},
{
"cell_type": "markdown",
"id": "9c82c9de",
"metadata": {},
"source": [
"Задача 4. Преобразование строк в даты\n",
"Дан список строк с датами:\n",
"dates = [\"2026-03-30\",\"2026-03-25\",\"2026-02-15\",\"2026-01-01\"]\n",
"Нужно:\n",
" пройти по списку;\n",
" каждую строку превратить в дату;\n",
" для каждой даты вывести:\n",
" исходную строку;\n",
" полученную дату;\n",
" день;\n",
" месяц;\n",
" год;\n",
" посчитать, сколько дней прошло от этой даты до текущей даты."
]
},
{
"cell_type": "code",
"execution_count": 57,
"id": "25874736",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Исходная строка - 2026-03-30\n",
"Преобразовання строка в дату - 2026-03-30 00:00:00\n",
"День - 30\n",
"Месяц - 3\n",
"Год - 2026\n",
"На сегодняшний день прошло - 193 дня\n",
"\n",
"Исходная строка - 2026-03-25\n",
"Преобразовання строка в дату - 2026-03-25 00:00:00\n",
"День - 25\n",
"Месяц - 3\n",
"Год - 2026\n",
"На сегодняшний день прошло - 198 дня\n",
"\n",
"Исходная строка - 2026-02-15\n",
"Преобразовання строка в дату - 2026-02-15 00:00:00\n",
"День - 15\n",
"Месяц - 2\n",
"Год - 2026\n",
"На сегодняшний день прошло - 236 дня\n",
"\n",
"Исходная строка - 2026-01-01\n",
"Преобразовання строка в дату - 2026-01-01 00:00:00\n",
"День - 1\n",
"Месяц - 1\n",
"Год - 2026\n",
"На сегодняшний день прошло - 281 дня\n",
"\n"
]
}
],
"source": [
"from datetime import datetime, timedelta\n",
"dates_str = [\"2026-03-30\",\"2026-03-25\",\"2026-02-15\",\"2026-01-01\"]\n",
"now = datetime.now()\n",
"for date in dates_str:\n",
" dates = datetime.strptime(date, \"%Y-%m-%d\")\n",
" print(f\"Исходная строка - {date}\")\n",
" print(f\"Преобразовання строка в дату - {dates}\")\n",
" print(f\"День - {dates.day}\")\n",
" print(f\"Месяц - {dates.month}\")\n",
" print(f\"Год - {dates.year}\")\n",
" differences = now - dates\n",
" print(f\"На сегодняшний день прошло - {differences.days} дня\\n\")"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.13.7"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
+204
View File
@@ -0,0 +1,204 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "3759f336",
"metadata": {},
"source": [
"Задача 1. Сообщение о запуске ETL\n",
"Нужно написать функцию show_etl_start, которая принимает имя джобы и выводит сообщение о ее запуске.\n",
"Что нужно сделать:\n",
" создать функцию show_etl_start(job_name);\n",
" внутри вывести строку:Запуск ETL: <имя ETL>;\n",
" вызвать функцию для:\n",
" \"orders_load\"\n",
" \"users_load\"\n",
"\n",
"Ожидаемый вывод:\n",
" Запуск ETL: orders_load\n",
" Запуск ETL: users_load"
]
},
{
"cell_type": "code",
"execution_count": 32,
"id": "ad2441e7",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Запуск ETL: orders_load\n",
"Запуск ETL: users_load\n"
]
}
],
"source": [
"def show_etl_start(job_name):\n",
" print(f\"Запуск ETL: {job_name}\")\n",
"\n",
"show_etl_start(\"orders_load\")\n",
"show_etl_start(\"users_load\")"
]
},
{
"cell_type": "markdown",
"id": "7f37ba98",
"metadata": {},
"source": [
"Задача 2. Нормализация имени таблицы\n",
"Нужно написать функцию normalize_table_name, которая принимает имя таблицы и возвращает его:\n",
" без пробелов по краям;\n",
" в нижнем регистре.\n",
"Что нужно сделать:\n",
" создать функцию normalize_table_name(table_name);\n",
" использовать strip() и lower();\n",
" сохранить результат в переменную;\n",
" вывести результат для значений:\n",
" \" Orders \"\n",
" \" USERS \"\n",
" \"Payments\"\n",
"Пример вызова функции:\n",
" result = normalize_table_name(\" Orders \")\n",
" print(result)"
]
},
{
"cell_type": "code",
"execution_count": 40,
"id": "e5777c5a",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"orders\n",
"users\n",
"payments\n"
]
}
],
"source": [
"def normalize_table_name(table_name):\n",
" return table_name.strip().lower()\n",
"\n",
"result_orders = normalize_table_name(\" Orders \")\n",
"result_users = normalize_table_name(\" USERS \")\n",
"result_payments = normalize_table_name(\"Payments\")\n",
"\n",
"print(result_orders)\n",
"print(result_users)\n",
"print(result_payments)"
]
},
{
"cell_type": "markdown",
"id": "efa9fae5",
"metadata": {},
"source": [
"Задача 3. Проверка корректной суммы\n",
"Нужно написать функцию is_valid_amount, которая принимает сумму и возвращает:\n",
" True, если сумма больше 0;\n",
" False, если сумма меньше или равна 0.\n",
"Что нужно сделать:\n",
" создать функцию is_valid_amount(amount);\n",
" проверить значения:\n",
" 100\n",
" 0\n",
" -25"
]
},
{
"cell_type": "code",
"execution_count": 43,
"id": "09665391",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"True\n",
"False\n",
"False\n"
]
}
],
"source": [
"def is_valid_amount(amount):\n",
" return amount > 0\n",
"\n",
"print(is_valid_amount(100))\n",
"print(is_valid_amount(0))\n",
"print(is_valid_amount(-25))"
]
},
{
"cell_type": "markdown",
"id": "d99423c2",
"metadata": {},
"source": [
"Задача 4. Построение имени витрины\n",
"Нужно написать функцию build_mart_name, которая принимает:\n",
" название сущности;\n",
" слой.\n",
"И возвращает строку в формате:\n",
" <layer>_<entity>\n",
"Что нужно сделать:\n",
" создать функцию build_mart_name(entity_name, layer);\n",
" проверить на примерах:\n",
" (\"orders\", \"dm\")\n",
" (\"users\", \"core\")\n",
" (\"payments\", \"stg\")"
]
},
{
"cell_type": "code",
"execution_count": 55,
"id": "d3c6683e",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"dm_orders\n",
"core_users\n",
"stg_payments\n"
]
}
],
"source": [
"def build_mart_name(entity_name, layer):\n",
" return f\"{layer}_{entity_name}\"\n",
"\n",
"print(build_mart_name(\"orders\", \"dm\"))\n",
"print(build_mart_name(\"users\", \"core\"))\n",
"print(build_mart_name(\"payments\", \"stg\"))"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.13.7"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
@@ -0,0 +1,190 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "669999d9",
"metadata": {},
"source": [
"Задача 1. Лог запуска процесса\n",
"Напиши функцию log_job_start, которая принимает:\n",
" job_name\n",
" level=\"INFO\"\n",
" env=\"dev\"\n",
"Функция должна выводить строку:\n",
" [INFO] Job load_users started in dev"
]
},
{
"cell_type": "code",
"execution_count": 59,
"id": "2af8c0ea",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[INFO] Job load_users started in dev\n"
]
}
],
"source": [
"def log_job_start(job_name, level = \"INFO\", env = \"dev\"):\n",
" print(f\"[{level}] Job {job_name} started in {env}\")\n",
"\n",
"log_job_start(\"load_users\")"
]
},
{
"cell_type": "markdown",
"id": "60ce459d",
"metadata": {},
"source": [
"Задача 2. Подключение к источнику\n",
"Напиши функцию connect_source, которая принимает:\n",
" source_name\n",
" host=\"localhost\"\n",
" port=5432\n",
" user=\"etl_user\"\n",
"Функция должна возвращать словарь с настройками подключения."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "d73d7ab5",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'source_name': 'dwh', 'host': 'localhost', 'port': 5432, 'user': 'etl_user'} <class 'dict'>\n"
]
}
],
"source": [
"def connect_source(source_name, host = \"localhost\", port = 5432, user = \"etl_user\"):\n",
" connecting_configuration = {\n",
" \"source_name\" : source_name,\n",
" \"host\" : host,\n",
" \"port\" : port,\n",
" \"user\" : user\n",
" }\n",
" return connecting_configuration"
]
},
{
"cell_type": "markdown",
"id": "e667db79",
"metadata": {},
"source": [
"Задача 3. Построение SELECT-запроса\n",
"Напиши функцию build_select_query, которая принимает:\n",
" table_name\n",
" columns=None\n",
"Логика:\n",
" если columns=None, функция должна вернуть:\n",
" SELECT * FROM table_name\n",
" если список колонок передан, собрать их через запятую."
]
},
{
"cell_type": "code",
"execution_count": 51,
"id": "4b710ebe",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'SELECT id, user_id, email FROM orders'"
]
},
"execution_count": 51,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def build_select_query(table_name, columns = None):\n",
" if columns is None:\n",
" return f\"SELECT * FROM {table_name}\"\n",
" else:\n",
" columns_str = \", \".join(columns)\n",
" return f\"SELECT {columns_str} FROM {table_name}\"\n",
"\n",
"build_select_query(\"orders\")\n",
"build_select_query(\"orders\", [\"id\", \"user_id\", \"email\"])\n"
]
},
{
"cell_type": "markdown",
"id": "ba059bd5",
"metadata": {},
"source": [
"Задача 4. Проверка обязательных полей\n",
"Напиши функцию validate_row, которая принимает:\n",
" row — словарь;\n",
" required_fields=None\n",
"Логика:\n",
" если required_fields=None, использовать [\"id\"];\n",
" проверить, есть ли все нужные поля;\n",
" если какого-то поля нет, вернуть строку:\n",
" Missing field: email\n",
" если всё хорошо, вернуть:\n",
" Row is valid"
]
},
{
"cell_type": "code",
"execution_count": 94,
"id": "ceb7c30b",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'Row is valid'"
]
},
"execution_count": 94,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def validate_row(row, required_fields = None):\n",
" if required_fields is None:\n",
" required_fields = [\"id\"]\n",
" for field in required_fields:\n",
" if field not in row:\n",
" return f\"Missing field: {field}\"\n",
" return \"Row is valid\"\n",
"\n",
"validate_row({\"id\": 1, \"email\":2}, [\"id\", \"email\"])"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.13.7"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
+198
View File
@@ -0,0 +1,198 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "6d37ef1e",
"metadata": {},
"source": [
"Задача 1. Список таблиц для обработки\n",
"Напиши функцию process_tables, которая принимает любое количество названий таблиц через *args.\n",
"Функция должна:\n",
" вывести строку \"Начинаем обработку\";\n",
" затем для каждой таблицы вывести:\n",
"\n",
"Обрабатываем таблицу: users"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "e10a9075",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Начинаем обработку\n",
"Обрабатываем таблицу: users\n",
"Обрабатываем таблицу: orders\n"
]
}
],
"source": [
"def process_tables(*args):\n",
" print(\"Начинаем обработку\")\n",
" for table in args:\n",
" print(f\"Обрабатываем таблицу: {table}\")\n",
"\n",
"process_tables(\"users\", \"orders\")"
]
},
{
"cell_type": "markdown",
"id": "1b0576ec",
"metadata": {},
"source": [
"Задача2. Напиши функцию build_select_query, которая принимает:\n",
" table_name\n",
" любое количество колонок через args\n",
"Логика:\n",
"если колонки не переданы, вернуть:\n",
"\n",
" SELECT * FROM users\n",
"\n",
"если колонки переданы, вернуть:\n",
" \n",
" SELECT id,name,email FROM users"
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "5dfaa1e0",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"SELECT id, name FROM users\n"
]
}
],
"source": [
"def build_select_query(table_name, *args):\n",
" if args:\n",
" arg = \", \".join(args)\n",
" else:\n",
" arg = \"*\"\n",
" return f\"SELECT {arg} FROM {table_name}\"\n",
"print(build_select_query(\"users\", \"id\", \"name\"))"
]
},
{
"cell_type": "markdown",
"id": "a95cdb0a",
"metadata": {},
"source": [
"Задача 3. Напиши функцию create_connection_config, которая принимает:\n",
" connection_name\n",
" любое количество именованных параметров через *kwargs\n",
"Функция должна вернуть словарь вида:\n",
"\n",
" {\n",
" \"connection_name\":\"source_pg\",\n",
" \"settings\": {\n",
" \"host\":\"localhost\",\n",
" \"port\":5432,\n",
" \"user\":\"etl_user\"\n",
" }\n",
" }"
]
},
{
"cell_type": "code",
"execution_count": 37,
"id": "69c1b275",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'connection_name': 'source_pg', 'settings': {'host': 'localhost', 'port': 5432, 'user': 'etl_user'}}\n"
]
}
],
"source": [
"def create_coonnection_config(connection_name, **kwargs):\n",
" config = {\n",
" \"connection_name\" : connection_name,\n",
" \"settings\" : kwargs\n",
" }\n",
" return config\n",
"result = create_connection_config(\"source_pg\",host=\"localhost\",port=5432,user=\"etl_user\")\n",
"print(result)"
]
},
{
"cell_type": "markdown",
"id": "ce6811bd",
"metadata": {},
"source": [
"Задача 4. Запуск ETL-задачи\n",
"Напиши функцию run_etl_task, которая принимает:\n",
" task_name\n",
" любое количество колонок через args\n",
" любое количество опций через *kwargs\n",
"Логика:\n",
" вывести имя задачи;\n",
" вывести список колонок;\n",
" вывести словарь с опциями.\n",
"Пример:\n",
"\n",
" run_etl_task(\n",
" \"load_users\",\n",
" \"id\",\"name\",\"email\",\n",
" source=\"s3\",\n",
" target=\"greenplum\",\n",
" mode=\"append\",\n",
" retries=3\n",
" )"
]
},
{
"cell_type": "code",
"execution_count": 40,
"id": "bd011ce6",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['load_users', ('id', 'name', 'email'), {'source': 's3', 'target': 'greenplum', 'mode': 'append', 'retries': 3}]\n"
]
}
],
"source": [
"def run_etl_task(tsk_name, *args, **kwargs):\n",
" config = [tsk_name, args, kwargs]\n",
" return config\n",
"print(run_etl_task(\"load_users\", \"id\",\"name\",\"email\", source=\"s3\", target=\"greenplum\", mode=\"append\", retries=3))"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.13.7"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
+227
View File
@@ -0,0 +1,227 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "815ff7f8",
"metadata": {},
"source": [
"Задача 1. Сумма оплаченных заказов\n",
"Дан список заказов:\n",
"\n",
"orders= [\n",
" {\"order_id\":1,\"amount\":1200,\"status\":\"paid\"},\n",
" {\"order_id\":2,\"amount\":500,\"status\":\"new\"},\n",
" {\"order_id\":3,\"amount\":800,\"status\":\"paid\"},\n",
" {\"order_id\":4,\"amount\":300,\"status\":\"cancelled\"}\n",
"]\n",
"Нужно:\n",
" пройтись по заказам;\n",
" взять только те, у которых статус \"paid\";\n",
" посчитать их общую сумму;\n",
" вывести результат."
]
},
{
"cell_type": "code",
"execution_count": 31,
"id": "5dac0cd0",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2\n"
]
}
],
"source": [
"orders= [\n",
" {\"order_id\":1,\"amount\":1200,\"status\":\"paid\"},\n",
" {\"order_id\":2,\"amount\":500,\"status\":\"new\"},\n",
" {\"order_id\":3,\"amount\":800,\"status\":\"paid\"},\n",
" {\"order_id\":4,\"amount\":300,\"status\":\"cancelled\"}\n",
"]\n",
"count = 0\n",
"for order in orders:\n",
" if order[\"status\"] == \"paid\":\n",
" count += 1\n",
"print(count)\n"
]
},
{
"cell_type": "markdown",
"id": "5909293c",
"metadata": {},
"source": [
"Задача 2. Поиск самого дорогого заказа\n",
"Дан список заказов:\n",
"\n",
"orders= [\n",
" {\"order_id\":1,\"amount\":1200},\n",
" {\"order_id\":2,\"amount\":500},\n",
" {\"order_id\":3,\"amount\":1800},\n",
" {\"order_id\":4,\"amount\":900}\n",
"]\n",
"Нужно:\n",
" найти заказ с максимальной суммой amount;\n",
" вывести весь словарь этого заказа."
]
},
{
"cell_type": "code",
"execution_count": 37,
"id": "1cd30f37",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'order_id': 3, 'amount': 1800}\n"
]
}
],
"source": [
"orders = [\n",
" {\"order_id\":1,\"amount\":1200},\n",
" {\"order_id\":2,\"amount\":500},\n",
" {\"order_id\":3,\"amount\":1800},\n",
" {\"order_id\":4,\"amount\":900}\n",
"]\n",
"max_order = orders[0]\n",
"for order in orders:\n",
" if order[\"amount\"] > max_order[\"amount\"]:\n",
" max_order = order\n",
"pprint(max_order, sort_dicts=False)"
]
},
{
"cell_type": "markdown",
"id": "c81986e6",
"metadata": {},
"source": [
"Задача 3. Группировка заказов по пользователю\n",
"Дан список заказов:\n",
"\n",
"orders= [\n",
" {\"order_id\":1,\"user_id\":101,\"amount\":1200},\n",
" {\"order_id\":2,\"user_id\":102,\"amount\":500},\n",
" {\"order_id\":3,\"user_id\":101,\"amount\":800},\n",
" {\"order_id\":4,\"user_id\":103,\"amount\":700}\n",
"]\n",
"Нужно:\n",
" сгруппировать заказы по user_id;\n",
" в результате получить словарь, где:\n",
" ключ — это user_id,\n",
" значение — список заказов этого пользователя."
]
},
{
"cell_type": "code",
"execution_count": 46,
"id": "cd85b1b0",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{101: [{'order_id': 1, 'user_id': 101, 'amount': 1200},\n",
" {'order_id': 3, 'user_id': 101, 'amount': 800}],\n",
" 102: [{'order_id': 2, 'user_id': 102, 'amount': 500}],\n",
" 103: [{'order_id': 4, 'user_id': 103, 'amount': 700}]}\n"
]
}
],
"source": [
"orders= [\n",
" {\"order_id\":1,\"user_id\":101,\"amount\":1200},\n",
" {\"order_id\":2,\"user_id\":102,\"amount\":500},\n",
" {\"order_id\":3,\"user_id\":101,\"amount\":800},\n",
" {\"order_id\":4,\"user_id\":103,\"amount\":700}\n",
"]\n",
"grouped = {}\n",
"for order in orders:\n",
" user_id = order[\"user_id\"]\n",
" if user_id not in grouped:\n",
" grouped[user_id] = []\n",
" grouped[user_id].append(order)\n",
"pprint(grouped, sort_dicts=False)"
]
},
{
"cell_type": "markdown",
"id": "a0669a7b",
"metadata": {},
"source": [
"Задача 4. Подсчет выручки по пользователям\n",
"Дан список заказов:\n",
"\n",
"orders= [\n",
" {\"order_id\":1,\"user_id\":101,\"amount\":1200},\n",
" {\"order_id\":2,\"user_id\":102,\"amount\":500},\n",
" {\"order_id\":3,\"user_id\":101,\"amount\":800},\n",
" {\"order_id\":4,\"user_id\":103,\"amount\":700},\n",
" {\"order_id\":5,\"user_id\":102,\"amount\":300}\n",
"]\n",
"Нужно:\n",
" пройтись по заказам;\n",
" посчитать общую сумму amount по каждому user_id;\n",
" сохранить результат в словарь."
]
},
{
"cell_type": "code",
"execution_count": 54,
"id": "3f0a2d12",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{101: 2000, 102: 800, 103: 700}\n"
]
}
],
"source": [
"orders= [\n",
" {\"order_id\":1,\"user_id\":101,\"amount\":1200},\n",
" {\"order_id\":2,\"user_id\":102,\"amount\":500},\n",
" {\"order_id\":3,\"user_id\":101,\"amount\":800},\n",
" {\"order_id\":4,\"user_id\":103,\"amount\":700},\n",
" {\"order_id\":5,\"user_id\":102,\"amount\":300}\n",
"]\n",
"user_total = {}\n",
"for order in orders:\n",
" user_id = order[\"user_id\"]\n",
" if user_id not in user_total:\n",
" user_total[user_id] = 0\n",
" user_total[user_id] += order[\"amount\"]\n",
"print(user_total)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.13.7"
}
},
"nbformat": 4,
"nbformat_minor": 5
}