8 Commits

Author SHA1 Message Date
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
Dmitry Medvedev f7f6de1eca добавлено ДЗ по изменяемым и неизменяемым типам 2026-10-09 00:37:26 +05:00
Dmitry Medvedev c2b07981bc внесены исправления в ДЗ 2026-10-09 00:18:25 +05:00
6 changed files with 1208 additions and 7 deletions
@@ -0,0 +1,311 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "ad33a980",
"metadata": {},
"source": [
"Задача 1. Две переменные — один список\n",
"Есть список колонок:\n",
"columns= [\"id\",\"event_time\",\"amount\"]\n",
"Нужно:\n",
" создать переменную columns_for_export и присвоить ей columns;\n",
" добавить в columns_for_export колонку \"load_dt\";\n",
" вывести:\n",
" columns\n",
" columns_for_export"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "f5d2c49a",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['id', 'event_time', 'amount', 'load_dt']\n",
"['id', 'event_time', 'amount', 'load_dt']\n"
]
}
],
"source": [
"columns = [\"id\",\"event_time\",\"amount\"]\n",
"columns_for_expert = columns\n",
"columns_for_expert.append(\"load_dt\")\n",
"print(columns)\n",
"print(columns_for_expert)"
]
},
{
"cell_type": "markdown",
"id": "e3cc1bdb",
"metadata": {},
"source": [
"почему изменились обе переменные: обе переменные изменились потому что мы используем изменяемую переменную списка - list, данная переменная изменяемая и columns_for_expert ссылается на columns, сами переменные это не переменные, а указатели на них в памяти, поэтому если изменить одну, то и вторая поменяется\n",
"\n",
"какой тип здесь используется: используется список list\n",
"\n",
"он изменяемый или неизменяемый: изменяемый"
]
},
{
"cell_type": "markdown",
"id": "1422c7e6",
"metadata": {},
"source": [
"Задача 2. Строка и список — разное поведение\n",
"Есть переменные:\n",
" table_name=\"orders\"\n",
" metrics= [\"rows\",\"errors\",\"duration\"]\n",
"Нужно:\n",
" создать table_name_copy = table_name;\n",
" создать metrics_copy = metrics;\n",
" к table_name добавить строку \"_raw\";\n",
" в metrics_copy добавить элемент \"latency\";\n",
"вывести все 4 переменные:\n",
" table_name\n",
" table_name_copy\n",
" metrics\n",
" metrics_copy"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "7acdbe0d",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"orders_raws\n",
"orders\n",
"['rows', 'errors', 'duration', 'latency']\n",
"['rows', 'errors', 'duration', 'latency']\n"
]
}
],
"source": [
"table_name = \"orders\"\n",
"metrics = [\"rows\",\"errors\",\"duration\"]\n",
"table_name_copy = table_name\n",
"metrics_copy = metrics\n",
"table_name = (\"orders\" + \"_raws\")\n",
"metrics_copy.append(\"latency\")\n",
"print(table_name)\n",
"print(table_name_copy)\n",
"print(metrics)\n",
"print(metrics_copy)"
]
},
{
"cell_type": "markdown",
"id": "ade754e4",
"metadata": {},
"source": [
"почему строка изменилась не так, как список: потому что строка в данном случае это переменная и это неизменяемый тип данных, каждая переменная хранится в одной ячейке памяти и получается, что у нас две переменные и каждая хранится по отдельности, в отличие от списка, который в данном случае хранится как указатель на ячейку в памяти и изменение одного списка порождает изменение и в другом, так как это одна и та же ячейка в памяти\n",
"\n",
"какой объект оказался неизменяемым: строка\n",
"\n",
"какой объект оказался изменяемым: список"
]
},
{
"cell_type": "markdown",
"id": "07e7c0e3",
"metadata": {},
"source": [
"Задача 3. Словарь конфигурации пайплайна\n",
"Есть конфиг:\n",
"pipeline_config= {\n",
"\"source\":\"postgres\",\n",
"\"target\":\"s3\",\n",
"\"batch_size\":1000\n",
"}\n",
"Нужно:\n",
" создать current_config = pipeline_config;\n",
" изменить в current_config значение batch_size на 5000;\n",
" добавить ключ \"mode\" со значением \"append\";\n",
" вывести:\n",
" pipeline_config\n",
" current_config"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "9b4fb54b",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'source': 'postgres', 'target': 's3', 'batch_size': '5000', 'mode': 'append'}\n",
"{'source': 'postgres', 'target': 's3', 'batch_size': '5000', 'mode': 'append'}\n"
]
}
],
"source": [
"pipeline_config = {\n",
" \"source\":\"postgres\",\n",
" \"target\":\"s3\",\n",
" \"batch_size\":1000\n",
"}\n",
"current_config = pipeline_config\n",
"current_config[\"batch_size\"] = \"5000\"\n",
"current_config[\"mode\"] = \"append\"\n",
"print(pipeline_config)\n",
"print(current_config)"
]
},
{
"cell_type": "markdown",
"id": "d41c940e",
"metadata": {},
"source": [
"почему исходный словарь тоже изменился: потому что словарь это изменяемый тип данных и когда мы его записываем в переменную, то он лишь хранится в виде указателя на ячейку памяти, соответственно, когда мы присваиваем другой переменной этот же словарь, то он ссылкается на ту же ячейку в памяти и любое изменение того или иного словаря влечет изменение и другого словаря\n",
"\n",
"является ли словарь изменяемым типом: да, является\n",
"\n",
"чем это может быть опасно в ETL-задачах: тем что если мы например захотим как-то проанализировать данные и например добавим какую-то колонку, то соответственно эта колонка появится в обоих словарях, что может привести к ошибкам или искажениям данных, поэтому необходимо при такой работе создавать копию словаря, чтобы оставить исходный словарь без изменений"
]
},
{
"cell_type": "markdown",
"id": "7af4f14d",
"metadata": {},
"source": [
"Задача 4. Функция меняет исходные данные\n",
"Есть список статусов:\n",
"statuses= [\"new\",\"validated\",\"loaded\"]\n",
"\n",
"Нужно:\n",
" вывести список до изменений;\n",
" заменить первый элемент на \"processed\";\n",
" добавить в конец \"archived\";\n",
" вывести список после изменений.\n",
"Требования:\n",
" использовать обращение по индексу;\n",
" использовать append();\n",
" вывести список до и после изменений."
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "5344d3d5",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['new', 'validated', 'loaded']\n",
"['processed', 'validated', 'loaded', 'archived']\n"
]
}
],
"source": [
"statuses = [\"new\",\"validated\",\"loaded\"]\n",
"print(statuses)\n",
"statuses[0] = \"processed\"\n",
"statuses.append(\"archived\")\n",
"print(statuses)"
]
},
{
"cell_type": "markdown",
"id": "a276419e",
"metadata": {},
"source": [
"почему список изменился: список это изменяемый тип данных и его можно менять. когда мы изменили значение и добавили новое , то список изменяется внутри ячейки памяти\n",
"\n",
"какой элемент был заменён: самый первый\n",
"\n",
"какой элемент был добавлен: самый последний - \"archived\""
]
},
{
"cell_type": "markdown",
"id": "5ea9f452",
"metadata": {},
"source": [
"Задача 5. Подготовка списка колонок без порчи исходника\n",
"Есть список:\n",
" raw_columns= [\"id\",\"user_id\",\"price\"]\n",
"Нужно подготовить список для витрины:\n",
" в новый список добавить \"load_dt\";\n",
" в новый список добавить \"source_name\".\n",
"Но при этом исходный raw_columns менять нельзя.\n",
"Что нужно сделать:\n",
" создать новый список mart_columns;\n",
" добавить в него новые поля;\n",
" вывести:\n",
" raw_columns\n",
" mart_columns"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "3e4dbd80",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['id', 'user_id', 'price']\n",
"['id', 'user_id', 'price', 'load_dt', 'source_name']\n"
]
}
],
"source": [
"raw_columns = [\"id\",\"user_id\",\"price\"]\n",
"mart_columns = raw_columns.copy()\n",
"mart_columns.append(\"load_dt\")\n",
"mart_columns.append(\"source_name\")\n",
"print(raw_columns)\n",
"print(mart_columns)"
]
},
{
"cell_type": "markdown",
"id": "bd0f9b9c",
"metadata": {},
"source": [
"почему нельзя просто написать mart_columns = raw_columns: потому что в таком случае оба списка будут ссылаться на одну ячейку памяти и изменение одно из списков в таком случае влечет изменение второго\n",
"\n",
"что произойдёт, если потом изменить mart_columns: если мы напишем mart_columns = raw_columns, то оба списка изменятся, это нам не нужно\n",
"\n",
"почему в DE важно не портить исходные структуры: потому что это может вызвать ошибку или исказить анализ данных"
]
}
],
"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,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
}
+9 -7
View File
@@ -72,7 +72,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 12, "execution_count": 6,
"id": "7dc68e3b", "id": "7dc68e3b",
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
@@ -83,18 +83,18 @@
"Dima\n", "Dima\n",
"Medvedev\n", "Medvedev\n",
"Dima Medvedev\n", "Dima Medvedev\n",
"12\n" "13\n"
] ]
} }
], ],
"source": [ "source": [
"name = 'Dima'\n", "name = 'Dima'\n",
"surname = 'Medvedev'\n", "surname = 'Medvedev'\n",
"\n", "full_name = f'{name} {surname}'\n",
"print(name)\n", "print(name)\n",
"print(surname)\n", "print(surname)\n",
"print(f'{name} {surname}')\n", "print(f'{name} {surname}')\n",
"print(len(name)+len(surname))" "print(len(f'{name} {surname}'))"
] ]
}, },
{ {
@@ -161,7 +161,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 14, "execution_count": 7,
"id": "fe383ba3", "id": "fe383ba3",
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
@@ -177,8 +177,10 @@
"source": [ "source": [
"a = 3\n", "a = 3\n",
"b = 5\n", "b = 5\n",
"print(a * (b + a))\n", "vir_1 = a * (b + a)\n",
"print(a * b + a)" "vir_2 = a * b + a\n",
"print(vir_1)\n",
"print(vir_2)"
] ]
}, },
{ {