From 16efc93d5186b8c4535a6dd6536c13af09710fc8 Mon Sep 17 00:00:00 2001 From: Pavel Demyanov Date: Tue, 30 Dec 2025 23:36:11 +0300 Subject: [PATCH 01/12] =?UTF-8?q?=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=207?= =?UTF-8?q?=20=D0=BF=D1=83=D0=BD=D0=BA=D1=82=20=D0=B8=D0=B7=20=D0=B8=D0=BD?= =?UTF-8?q?=D1=82=D1=80=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- log.ipynb | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 log.ipynb diff --git a/log.ipynb b/log.ipynb new file mode 100644 index 00000000..54ab9e50 --- /dev/null +++ b/log.ipynb @@ -0,0 +1,56 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "id": "03d7b643", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'Лог уроков.'" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\"\"\"Лог уроков.\"\"\"" + ] + }, + { + "cell_type": "markdown", + "id": "f8acce3e", + "metadata": {}, + "source": [ + "30/12\n", + "\n", + "1. Продолжаю интро из Сенаторов АИ на 7 пункте" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "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.11.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From 67ca237501f90bbdd056e9855c6bbfa3a649d700 Mon Sep 17 00:00:00 2001 From: Pavel Demyanov Date: Wed, 7 Jan 2026 04:06:17 +0300 Subject: [PATCH 02/12] [TASK] Quiz #6 (https://github.com/SENATOROVAI/intro-cs/issues/6) Closes https://github.com/SENATOROVAI/intro-cs/issues/6 --- log.ipynb | 20 ++- log.py | 15 ++ quiz1.ipynb | 442 ++++++++++++++++++++++++++++++++++++++++++++++++++++ quiz1.py | 413 ++++++++++++++++++++++++++++++++++++++++++++++++ quiz2.ipynb | 244 +++++++++++++++++++++++++++++ quiz2.py | 215 +++++++++++++++++++++++++ 6 files changed, 1346 insertions(+), 3 deletions(-) create mode 100644 log.py create mode 100644 quiz1.ipynb create mode 100644 quiz1.py create mode 100644 quiz2.ipynb create mode 100644 quiz2.py diff --git a/log.ipynb b/log.ipynb index 54ab9e50..2f96717d 100644 --- a/log.ipynb +++ b/log.ipynb @@ -28,13 +28,27 @@ "source": [ "30/12\n", "\n", - "1. Продолжаю интро из Сенаторов АИ на 7 пункте" + "1. Продолжаю интро из Сенаторов АИ на 7 пункте\n" + ] + }, + { + "cell_type": "markdown", + "id": "b87d42bc", + "metadata": {}, + "source": [ + "07/01\n", + "\n", + "1. Доделаны все квизы\n", + "2. Пересмотрены по несколько раз видео:\n", + " https://www.youtube.com/watch?v=Si9MfV8uJ-0\n", + " https://www.youtube.com/watch?si=tCEVs00xGt2q61eW&v=hW_7hodGxVU&feature=youtu.be\n", + "3. Изучаю курс по пайтону шаг https://stepik.org/lesson/1711495/step/7?unit=1734919\n" ] } ], "metadata": { "kernelspec": { - "display_name": ".venv", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -48,7 +62,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.9" + "version": "3.10.11" } }, "nbformat": 4, diff --git a/log.py b/log.py new file mode 100644 index 00000000..3ff69502 --- /dev/null +++ b/log.py @@ -0,0 +1,15 @@ +"""Лог уроков.""" + +# 30/12 +# +# 1. Продолжаю интро из Сенаторов АИ на 7 пункте +# + +# 07/01 +# +# 1. Доделаны все квизы +# 2. Пересмотрены по несколько раз видео: +# https://www.youtube.com/watch?v=Si9MfV8uJ-0 +# https://www.youtube.com/watch?si=tCEVs00xGt2q61eW&v=hW_7hodGxVU&feature=youtu.be +# 3. Изучаю курс по пайтону шаг https://stepik.org/lesson/1711495/step/7?unit=1734919 +# diff --git a/quiz1.ipynb b/quiz1.ipynb new file mode 100644 index 00000000..475de3b8 --- /dev/null +++ b/quiz1.ipynb @@ -0,0 +1,442 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "9084810c", + "metadata": { + "vscode": { + "languageId": "plaintext" + } + }, + "outputs": [], + "source": [ + "\"\"\"Квиз 1.\"\"\"" + ] + }, + { + "cell_type": "markdown", + "id": "b8bb4b09", + "metadata": {}, + "source": [ + "Список вопросов к видео https://youtu.be/hW_7hodGxVU?si=tCEVs00xGt2q61eW (АЛГОРИТМ ПРИНЯТИЯ И ОТДАЧИ ДОМАШКИ):\n", + "\n", + "(По желанию )В ответе подробно всё опишите и обязательно нужно указывать тайм код из видео где я это сказал, по желанию, дополнительно прикладываем скриншот из видео.\n", + "Если вы знаете ответы на вопросы из Вашего опыта, то таймкоды из видео не надо указывать и т.д.\n", + "\n", + "1. Как понять, что домашка пришла?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=8\n", + " Заходим в чатик HomeWork видим ник и прими пул\n", + "\n", + "2. Как принять домашку?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=17\n", + " Заходим в гитхаб десктоп нажимаем fetch origin.\n", + "\n", + "3. Зачем нужна кнопка history и какие функции появляются при нажатии правой кнопки мыши на коммит?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=29\n", + "\n", + " В хистори мы видим, что произошло с нашим репозиторием\n", + "\n", + "3.1) Где брать ссылку на коммит? куда её отправлять?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=229\n", + "\n", + " Нажимаем в хистори View on Github и перемещаемся в гитхаб там будет в адресной строке ссылка на коммит\n", + " Отправляем её в чат HomeWork с припиской коммит отдал ссылка*на*коммит.\n", + "\n", + "4. Что такое файл лога?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=70\n", + " Файл лога - это файл содержащий информацию о том, что мы делали за все уроки по датам.\n", + "\n", + "4.1) Когда нужно его пушить?\n", + "\n", + "Ответ:\n", + "\n", + "https://youtu.be/hW_7hodGxVU?t=70\n", + "Когда заканчиваем урок\n", + "\n", + "5. Что такое интерпретатор?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=169\n", + " Программа которая читает и запускает наш код\n", + "\n", + "6. Где можно выбрать интерпретатор?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=163\n", + " Нажимаем слева запуск кода или сверху в правом углу выбираем нужный нам интерпретатор\n", + "\n", + "7. Что такое модуль?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=526\n", + " Модуль это обычный файлик с расширение .py или .ipynb\n", + "\n", + "8. Как создать и отправить коммит?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=193\n", + " Заходим в гитхаб отмечаем нужные изменения, пишем название коммит и нажимаем кнопку коммит\n", + "\n", + "9. Как посмотреть что коммит точно отправлен и находится в github?\n", + "\n", + " Ответ:\n", + "\n", + " В хистори будет видно, да и view on github даст ссылку на коммит\n", + "\n", + "10. Какая команда показывает что код не прошёл проверки на ошибки?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=363\n", + " pre-commit run --all-files\n", + "\n", + "10.1) Напишите список линтеров которые используются для проверки кода и дайте их краткую характеристику.\n", + "\n", + " Ответ:\n", + "\n", + " Flake8 — базовая проверка стиля\n", + " Mypy — проверка типов\n", + " Pylint — дополнительный анализ (по необходимости)\n", + " Pydocstyle — проверка документации (по необходимости)\n", + "\n", + "11. Как узнать какой именно линтер не прошёл проверку?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=370\n", + " В консоле после запуска линтеров будет статус выполнения и по статусу можно определить успешность по каждому линтеру.\n", + "\n", + "12. Линтер Pylint видит markdown?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=425\n", + " Нет\n", + "\n", + "13. Номер ячейки в терминале и номер ячейки в vs code может отличаться? в каком случае?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=437\n", + " Да, может отличаться, в случае если есть ячейки с маркдовн, из за того, что линтер их не видит, он их не учитывает, поэтому количество может быть разным\n", + "\n", + "14. Где посмотреть номер ячейки в vscode?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=455\n", + " можем посмотреть внизу справа\n", + "\n", + "15. В каком формате ipynb отправляется в гитхаб? причём здесь JSON?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=204\n", + " В формате JSON, приложение github desktop отображает файлы формата ipynb в формате json\n", + "\n", + "16. Где посмотреть в какой ячейке ошибка?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=462\n", + " Можем посмотреть по коду ошибки, где не так или нажать Ctrl + F и найти где ошибка\n", + "\n", + "17. Как запустить терминал?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=353\n", + " Меню терминал - новый терминал\n", + "\n", + "18. Что такое линтер?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=375\n", + " Линтер это программа которая проверяет на корректность стандартам\n", + "\n", + "19. В какой сайт нужно вставлять код ошибки если ошибка связана с pylint?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=495\n", + " На сайте пайлинта https://pylint.readthedocs.io/\n", + "\n", + "20. Секция pydocstyle в большинстве случае автоматический закрывается после исправления ошибок в каком линтере?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=587\n", + " После исправления ошибок в линтере pylint\n", + "\n", + "21. Что такое описание модуля? Оно должно отражать информацию о том что находится в модуле?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=563\n", + " Описание модуля это какая информация у нас в модуле. Да, оно должно отображать информацию о модуле.\n", + "\n", + " 21.1) С какой git команды начинается утро программиста?\n", + "\n", + " Ответ:\n", + "\n", + " fetch origin\n", + "\n", + "22. После внесения изменений в файлах, кнопка open in vs code пропадает в кошке, как по другому открыть vs code из кошки?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=855\n", + " Чтобы попасть из github desktop в vs code, нужно нажать на Current repository и выбрать Open VS code\n", + "\n", + "23. Что такое stash? Общее объяснение концепции.\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=921\n", + " stash - буффер обмена и локальные изменения \"прячутся\"\n", + " Концепция, нужна если мы что-то делали, но нам нужно резко, что-то делать другое, не коммитя изменения в репозиторий, мы можем сохранить в буффер обмена, для дальнейшего использования, пряча новые изменения.\n", + "\n", + " 23.1) Как сохранить стэш?\n", + "\n", + " Ответ:\n", + "\n", + " git командa(подсказка: https://t.me/c/1937296927/3602/19531):\n", + " git stash save \"NAME_STASH\" - сохранение в буффер обмена\n", + " git stash apply \"NUMBER_STASH\" - извлечения из буффера обмена\n", + "\n", + "Кнопка в vs code: Stash changes and continue\n", + "\n", + "23.2) Как восстановить стэш(подсказка: https://t.me/c/1937296927/3602/25747)?:\n", + "\n", + " git команда(подсказка: https://t.me/c/1937296927/3602/19531)?:\n", + "\n", + " Ответ:\n", + "\n", + " git stash apply \"NUMBER_STASH\"\n", + "\n", + "23.3) Различие между стэшем и коммитом.\n", + "\n", + " Ответ:\n", + "\n", + " Когда лучше сохранить изменения в стэше, а когда коммитить.\n", + " Коммитить когда мы четко понимаем, что закончили с какой-то итерацией и можем выложить в ветку. Стешить, когда нам нужно быстро переключиться, с еще не доделанной работы, чтобы отдельно не плодить коммитов, с еще пока не готовым функционалом\n", + "\n", + "23.4) Как просмотреть список сохраненных стэшей? \n", + " git команда (подсказка: https://t.me/c/1937296927/3602/19531):\n", + "\n", + " Ответ:\n", + "\n", + " git stash list\n", + "\n", + "23.5) Как удалить стэш? \n", + " Команды для удаления отдельных стэшей или всех сразу.\n", + "git команда (подсказка: https://t.me/c/1937296927/3602/19531):\n", + "\n", + " Ответ:\n", + "\n", + " git stash drop\n", + " git stash clear\n", + "\n", + "23.6) Практические примеры использования стэша. Краткие сценарии, где стэш помогает.\n", + "\n", + " Ответ:\n", + "\n", + " Спрятать изменения в моменте, когда нужно поработать над другой задачей.\n", + " Спрятать изменения при конфликте, для дальнейшего резолва изменений с актуальной веткой\n", + "\n", + "24. Где посмотреть что есть конфликт в файлах?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=969\n", + " В changes будет у строчки восклицательный знак в github desktop, нажимаем правой кнопкой где восклицательный знак и выбираем Open VS code\n", + "\n", + " 24.1) Когда он появляется?\n", + "\n", + " Ответ:\n", + "\n", + " Когда мы редактируем одинаковые файлы и получается у нас накладываются строчки из за этого возникает конфликт\n", + "\n", + "25. Как решить конфликт в файлах?\n", + "\n", + " Ответ:\n", + "\n", + " Выбираем изменения которые нам нужны, убираем те что не нужны и нажимаем Resolve in merge\n", + "\n", + "26. Напишите правильное утверждение\n", + " -Зелёное то что пришло с гитхаба и синее локальные изменения или синее то что пришло с гитхаба и зелёное это локальные изменения\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=998\n", + "\n", + " Зеленное, это то, что мы стянули из репозитория\n", + " Синее наше локальные изменения\n", + "\n", + "27. Если мы работаем в одном файле, можно ли принять pull после того как вы спрячете в стэш свои изменения?\n", + "\n", + " Ответ:\n", + "\n", + " Да, можно\n", + " Если спрячем, то ничего не произойдет, изменения затянуться из github\n", + "\n", + " 27.1) Что может произойти когда stash восстановите после принятия pull?\n", + "\n", + " Ответ:\n", + "\n", + " Может произойти конфликт\n", + "\n", + "28. Сколько способов решения конфликтов было показано в видео? Напишите ЧИСЛО и укажите их способы.\n", + "\n", + " Ответ:\n", + "\n", + " 2 способа:\n", + " С помощью применения через акцепт и инкоминг\n", + " Вручную убрав все лишнее.\n", + "\n", + "29. Что делает кнопка complete merge?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=1062\n", + " Смерживает конечные изменения из конфликтов в один.\n", + "\n", + "30. В какой чат нужно писать если остались вопросы?\n", + "\n", + " Ответ:\n", + "\n", + " HELP ME (bags&reports)\n", + " https://t.me/c/1937296927/2415\n", + "\n", + "31. Что такое FORK? Зачем его делают?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=1146\n", + " Форк - это копия чужого репозитория оригинального репозитория в свое хранилище репозиториев.\n", + " Делают для того, чтобы работать с оригинальной репой не изменяя исходного проекта, а помогать править баги, улучшать, или отдельно на основании этого проекта делать свое\n", + "\n", + "32. Как скачать форкнутый репозиторий на локальный компьютер?\n", + "\n", + " Ответ:\n", + "\n", + " Через github desktop выбрав нужный в списке\n", + " Консольная команде git clone название_репы\n", + "\n", + "33. С какой вероятностью ваши ошибки были уже решены? и кто их решил?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=764\n", + " С вероятностью 90%\n", + " Их решил: Сенаторов Руслан Олегович\n", + "\n", + "34. Как создать файл в vs code?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=53\n", + " Нажимаем листочек с плюсиком и называем файл как нам нужно\n", + "\n", + "35. # Файл лога нужно заполнять в конце каждого урока?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=70\n", + " Да, нужно\n", + "\n", + "Дополнительные вопросы:\n", + "\n", + "1. Какая команда конвертирует файл в py из ipynb?\n", + " подсказка https://t.me/c/1937296927/1/26527\n", + "\n", + "Ответ:\n", + "jupytext --to py filename.ipynb или через расширение VS Code (Jupytext)\n", + "\n", + "2. Что такое пакетный менеджер? Вы пользуетесь пакетным менеджером conda или pip? Какой лучше использовать для дата сайнс?\n", + "\n", + "Ответ:\n", + "\n", + "Пакетный менеджер — инструмент для установки и управления библиотеками/пакетами.\n", + "Для дата сайнс лучше использовать conda — он управляет не только Python-пакетами, но и зависимостями системы, библиотеками (NumPy, SciPy) с нативными расширениями.\n", + "\n", + "3. Почему расширение py лучше чем ipynb?\n", + "\n", + "Ответ:\n", + "\n", + "- Удобнее для версионирования (Git лучше работает с текстом)\n", + "- Линтеры (Pylint, Flake8) корректно работают только с .py\n", + "- Проще ревью кода\n", + "- Лучше для продакшн-кода и автоматизации\n", + "\n", + "4. Что такое pep8?\n", + " подсказка:https://peps.python.org/pep-0008/\n", + "\n", + "Ответ:\n", + "\n", + "PEP 8 — официальный стиль кода Python. Рекомендации по форматированию, именованию, структуре для единообразия.\n", + "\n", + "4.1) линтеры проверяют на соблюдение pep8?\n", + "\n", + "Ответ:\n", + "\n", + "Да. Flake8 и Pylint проверяют соответствие PEP 8 (стиль, именование, форматирование).\n", + "\n", + "4.2) Какая нотация используется для создания переменных?\n", + "ответ на 85-95 страницы https://t.me/c/1937296927/1/16676\n", + "\n", + "Ответ:\n", + "\n", + "snake_case (нижний регистр, слова разделяются подчеркиванием), например: my_variable_name\n", + "\n", + "4.3) Может ли переменная состоять из одной буквы например андерскор \"\\_\" ?\n", + "\n", + "Ответ:\n", + "Да. \\_ — валидная переменная, часто используется как временная или неиспользуемая.\n", + "\n", + "4.4) Зачем и где мы используем андерскор \\_\n", + "\n", + "Ответ:\n", + "\n", + "- _ — временная/неиспользуемая переменная (например, в unpacking: x, _, z = data)\n", + "- Два \\_\\_ в начале — приватные атрибуты/методы\n", + "- _ в конце — избежание конфликта с ключевыми словами (class_)\n", + "\n", + " 4.5) По PEP8 допустима переменная в одну букву?\n", + " ответ на 85-95 страницы https://t.me/c/1937296927/1/16676\n", + "\n", + "Ответ:\n", + "\n", + "Да, но не рекомендуется для обычных переменных. Допустимо в исключениях: циклы (for i in range(5), for x, y in points), малые области видимости. Лучше использовать понятные имена.\n" + ] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/quiz1.py b/quiz1.py new file mode 100644 index 00000000..8cf4aa29 --- /dev/null +++ b/quiz1.py @@ -0,0 +1,413 @@ +"""Квиз 1.""" + +# Список вопросов к видео https://youtu.be/hW_7hodGxVU?si=tCEVs00xGt2q61eW (АЛГОРИТМ ПРИНЯТИЯ И ОТДАЧИ ДОМАШКИ): +# +# (По желанию )В ответе подробно всё опишите и обязательно нужно указывать тайм код из видео где я это сказал, по желанию, дополнительно прикладываем скриншот из видео. +# Если вы знаете ответы на вопросы из Вашего опыта, то таймкоды из видео не надо указывать и т.д. +# +# 1. Как понять, что домашка пришла? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=8 +# Заходим в чатик HomeWork видим ник и прими пул +# +# 2. Как принять домашку? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=17 +# Заходим в гитхаб десктоп нажимаем fetch origin. +# +# 3. Зачем нужна кнопка history и какие функции появляются при нажатии правой кнопки мыши на коммит? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=29 +# +# В хистори мы видим, что произошло с нашим репозиторием +# +# 3.1) Где брать ссылку на коммит? куда её отправлять? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=229 +# +# Нажимаем в хистори View on Github и перемещаемся в гитхаб там будет в адресной строке ссылка на коммит +# Отправляем её в чат HomeWork с припиской коммит отдал ссылка*на*коммит. +# +# 4. Что такое файл лога? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=70 +# Файл лога - это файл содержащий информацию о том, что мы делали за все уроки по датам. +# +# 4.1) Когда нужно его пушить? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=70 +# Когда заканчиваем урок +# +# 5. Что такое интерпретатор? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=169 +# Программа которая читает и запускает наш код +# +# 6. Где можно выбрать интерпретатор? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=163 +# Нажимаем слева запуск кода или сверху в правом углу выбираем нужный нам интерпретатор +# +# 7. Что такое модуль? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=526 +# Модуль это обычный файлик с расширение .py или .ipynb +# +# 8. Как создать и отправить коммит? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=193 +# Заходим в гитхаб отмечаем нужные изменения, пишем название коммит и нажимаем кнопку коммит +# +# 9. Как посмотреть что коммит точно отправлен и находится в github? +# +# Ответ: +# +# В хистори будет видно, да и view on github даст ссылку на коммит +# +# 10. Какая команда показывает что код не прошёл проверки на ошибки? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=363 +# pre-commit run --all-files +# +# 10.1) Напишите список линтеров которые используются для проверки кода и дайте их краткую характеристику. +# +# Ответ: +# +# Flake8 — базовая проверка стиля +# Mypy — проверка типов +# Pylint — дополнительный анализ (по необходимости) +# Pydocstyle — проверка документации (по необходимости) +# +# 11. Как узнать какой именно линтер не прошёл проверку? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=370 +# В консоле после запуска линтеров будет статус выполнения и по статусу можно определить успешность по каждому линтеру. +# +# 12. Линтер Pylint видит markdown? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=425 +# Нет +# +# 13. Номер ячейки в терминале и номер ячейки в vs code может отличаться? в каком случае? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=437 +# Да, может отличаться, в случае если есть ячейки с маркдовн, из за того, что линтер их не видит, он их не учитывает, поэтому количество может быть разным +# +# 14. Где посмотреть номер ячейки в vscode? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=455 +# можем посмотреть внизу справа +# +# 15. В каком формате ipynb отправляется в гитхаб? причём здесь JSON? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=204 +# В формате JSON, приложение github desktop отображает файлы формата ipynb в формате json +# +# 16. Где посмотреть в какой ячейке ошибка? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=462 +# Можем посмотреть по коду ошибки, где не так или нажать Ctrl + F и найти где ошибка +# +# 17. Как запустить терминал? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=353 +# Меню терминал - новый терминал +# +# 18. Что такое линтер? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=375 +# Линтер это программа которая проверяет на корректность стандартам +# +# 19. В какой сайт нужно вставлять код ошибки если ошибка связана с pylint? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=495 +# На сайте пайлинта https://pylint.readthedocs.io/ +# +# 20. Секция pydocstyle в большинстве случае автоматический закрывается после исправления ошибок в каком линтере? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=587 +# После исправления ошибок в линтере pylint +# +# 21. Что такое описание модуля? Оно должно отражать информацию о том что находится в модуле? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=563 +# Описание модуля это какая информация у нас в модуле. Да, оно должно отображать информацию о модуле. +# +# 21.1) С какой git команды начинается утро программиста? +# +# Ответ: +# +# fetch origin +# +# 22. После внесения изменений в файлах, кнопка open in vs code пропадает в кошке, как по другому открыть vs code из кошки? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=855 +# Чтобы попасть из github desktop в vs code, нужно нажать на Current repository и выбрать Open VS code +# +# 23. Что такое stash? Общее объяснение концепции. +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=921 +# stash - буффер обмена и локальные изменения "прячутся" +# Концепция, нужна если мы что-то делали, но нам нужно резко, что-то делать другое, не коммитя изменения в репозиторий, мы можем сохранить в буффер обмена, для дальнейшего использования, пряча новые изменения. +# +# 23.1) Как сохранить стэш? +# +# Ответ: +# +# git командa(подсказка: https://t.me/c/1937296927/3602/19531): +# git stash save "NAME_STASH" - сохранение в буффер обмена +# git stash apply "NUMBER_STASH" - извлечения из буффера обмена +# +# Кнопка в vs code: Stash changes and continue +# +# 23.2) Как восстановить стэш(подсказка: https://t.me/c/1937296927/3602/25747)?: +# +# git команда(подсказка: https://t.me/c/1937296927/3602/19531)?: +# +# Ответ: +# +# git stash apply "NUMBER_STASH" +# +# 23.3) Различие между стэшем и коммитом. +# +# Ответ: +# +# Когда лучше сохранить изменения в стэше, а когда коммитить. +# Коммитить когда мы четко понимаем, что закончили с какой-то итерацией и можем выложить в ветку. Стешить, когда нам нужно быстро переключиться, с еще не доделанной работы, чтобы отдельно не плодить коммитов, с еще пока не готовым функционалом +# +# 23.4) Как просмотреть список сохраненных стэшей? +# git команда (подсказка: https://t.me/c/1937296927/3602/19531): +# +# Ответ: +# +# git stash list +# +# 23.5) Как удалить стэш? +# Команды для удаления отдельных стэшей или всех сразу. +# git команда (подсказка: https://t.me/c/1937296927/3602/19531): +# +# Ответ: +# +# git stash drop +# git stash clear +# +# 23.6) Практические примеры использования стэша. Краткие сценарии, где стэш помогает. +# +# Ответ: +# +# Спрятать изменения в моменте, когда нужно поработать над другой задачей. +# Спрятать изменения при конфликте, для дальнейшего резолва изменений с актуальной веткой +# +# 24. Где посмотреть что есть конфликт в файлах? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=969 +# В changes будет у строчки восклицательный знак в github desktop, нажимаем правой кнопкой где восклицательный знак и выбираем Open VS code +# +# 24.1) Когда он появляется? +# +# Ответ: +# +# Когда мы редактируем одинаковые файлы и получается у нас накладываются строчки из за этого возникает конфликт +# +# 25. Как решить конфликт в файлах? +# +# Ответ: +# +# Выбираем изменения которые нам нужны, убираем те что не нужны и нажимаем Resolve in merge +# +# 26. Напишите правильное утверждение +# -Зелёное то что пришло с гитхаба и синее локальные изменения или синее то что пришло с гитхаба и зелёное это локальные изменения +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=998 +# +# Зеленное, это то, что мы стянули из репозитория +# Синее наше локальные изменения +# +# 27. Если мы работаем в одном файле, можно ли принять pull после того как вы спрячете в стэш свои изменения? +# +# Ответ: +# +# Да, можно +# Если спрячем, то ничего не произойдет, изменения затянуться из github +# +# 27.1) Что может произойти когда stash восстановите после принятия pull? +# +# Ответ: +# +# Может произойти конфликт +# +# 28. Сколько способов решения конфликтов было показано в видео? Напишите ЧИСЛО и укажите их способы. +# +# Ответ: +# +# 2 способа: +# С помощью применения через акцепт и инкоминг +# Вручную убрав все лишнее. +# +# 29. Что делает кнопка complete merge? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=1062 +# Смерживает конечные изменения из конфликтов в один. +# +# 30. В какой чат нужно писать если остались вопросы? +# +# Ответ: +# +# HELP ME (bags&reports) +# https://t.me/c/1937296927/2415 +# +# 31. Что такое FORK? Зачем его делают? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=1146 +# Форк - это копия чужого репозитория оригинального репозитория в свое хранилище репозиториев. +# Делают для того, чтобы работать с оригинальной репой не изменяя исходного проекта, а помогать править баги, улучшать, или отдельно на основании этого проекта делать свое +# +# 32. Как скачать форкнутый репозиторий на локальный компьютер? +# +# Ответ: +# +# Через github desktop выбрав нужный в списке +# Консольная команде git clone название_репы +# +# 33. С какой вероятностью ваши ошибки были уже решены? и кто их решил? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=764 +# С вероятностью 90% +# Их решил: Сенаторов Руслан Олегович +# +# 34. Как создать файл в vs code? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=53 +# Нажимаем листочек с плюсиком и называем файл как нам нужно +# +# 35. # Файл лога нужно заполнять в конце каждого урока? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=70 +# Да, нужно +# +# Дополнительные вопросы: +# +# 1. Какая команда конвертирует файл в py из ipynb? +# подсказка https://t.me/c/1937296927/1/26527 +# +# Ответ: +# jupytext --to py filename.ipynb или через расширение VS Code (Jupytext) +# +# 2. Что такое пакетный менеджер? Вы пользуетесь пакетным менеджером conda или pip? Какой лучше использовать для дата сайнс? +# +# Ответ: +# +# Пакетный менеджер — инструмент для установки и управления библиотеками/пакетами. +# Для дата сайнс лучше использовать conda — он управляет не только Python-пакетами, но и зависимостями системы, библиотеками (NumPy, SciPy) с нативными расширениями. +# +# 3. Почему расширение py лучше чем ipynb? +# +# Ответ: +# +# - Удобнее для версионирования (Git лучше работает с текстом) +# - Линтеры (Pylint, Flake8) корректно работают только с .py +# - Проще ревью кода +# - Лучше для продакшн-кода и автоматизации +# +# 4. Что такое pep8? +# подсказка:https://peps.python.org/pep-0008/ +# +# Ответ: +# +# PEP 8 — официальный стиль кода Python. Рекомендации по форматированию, именованию, структуре для единообразия. +# +# 4.1) линтеры проверяют на соблюдение pep8? +# +# Ответ: +# +# Да. Flake8 и Pylint проверяют соответствие PEP 8 (стиль, именование, форматирование). +# +# 4.2) Какая нотация используется для создания переменных? +# ответ на 85-95 страницы https://t.me/c/1937296927/1/16676 +# +# Ответ: +# +# snake_case (нижний регистр, слова разделяются подчеркиванием), например: my_variable_name +# +# 4.3) Может ли переменная состоять из одной буквы например андерскор "\_" ? +# +# Ответ: +# Да. \_ — валидная переменная, часто используется как временная или неиспользуемая. +# +# 4.4) Зачем и где мы используем андерскор \_ +# +# Ответ: +# +# - _ — временная/неиспользуемая переменная (например, в unpacking: x, _, z = data) +# - Два \_\_ в начале — приватные атрибуты/методы +# - _ в конце — избежание конфликта с ключевыми словами (class_) +# +# 4.5) По PEP8 допустима переменная в одну букву? +# ответ на 85-95 страницы https://t.me/c/1937296927/1/16676 +# +# Ответ: +# +# Да, но не рекомендуется для обычных переменных. Допустимо в исключениях: циклы (for i in range(5), for x, y in points), малые области видимости. Лучше использовать понятные имена. +# diff --git a/quiz2.ipynb b/quiz2.ipynb new file mode 100644 index 00000000..76439762 --- /dev/null +++ b/quiz2.ipynb @@ -0,0 +1,244 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "9034c435", + "metadata": { + "vscode": { + "languageId": "plaintext" + } + }, + "outputs": [], + "source": [ + "\"\"\"Квиз 2.\"\"\"" + ] + }, + { + "cell_type": "markdown", + "id": "9b9ba45f", + "metadata": {}, + "source": [ + "Список вопросов к видео https://youtu.be/Si9MfV8uJ-0?si=JXHe-tsgOEwSTI5E (НАСТРОЙКА VSCODE, перенос строк, линтеры, работа с ячейками):\n", + "\n", + "(По желанию)В ответе подробно всё опишите и обязательно нужно указывать тайм код из видео где я это сказал, по желанию, дополнительно прикладываем скриншот из видео.\n", + "Если вы знаете ответы на вопросы из Вашего опыта, то таймкоды из видео не надо указывать и т.д.\n", + "\n", + "1. Как включить автосохранение данных в VSCODE?\n", + "\n", + "Ответ:\n", + "\n", + "https://youtu.be/Si9MfV8uJ-0?t=11\n", + "File - Auto Save\n", + "\n", + "2. Как настроить перенос строки?\n", + "\n", + "Ответ:\n", + "\n", + "https://youtu.be/Si9MfV8uJ-0?t=18\n", + "File - Preferences - Settings - 'wrap'\n", + "wordWrapColumn\n", + "\n", + "3. Сколько символов по pep8 разрешено на строке?\n", + "\n", + "Ответ:\n", + "\n", + "https://youtu.be/Si9MfV8uJ-0?t=21\n", + "79\n", + "\n", + "4. Какие способы переноса строк показаны в видео:\n", + "\n", + "4.1 Строки с использованием обратного слэша (\\)\n", + "\n", + "string_continued = \"This is a long string that we want to \" \\\n", + " \"split across multiple lines.\"\n", + "print(string_continued)\n", + "\n", + "4.2 Тройные кавычки (''' или \"\"\")\n", + "\n", + "multi_line_string = \"\"\"This is a string that spans\n", + "multiple lines. You can write freely\n", + "and it will keep the line breaks.\"\"\"\n", + "print(multi_line_string)\n", + "\n", + "4.3 Создание списка строк и объединение с помощью join\n", + "\n", + "strings = [\n", + "\"This is the first line.\",\n", + "\"This is the second line.\",\n", + "\"This is the third line.\"\n", + "]\n", + "result = \"\\n\".join(strings) # Используем перенос строк '\\n'\n", + "print(result)\n", + "\n", + "4.4 Использование круглых скобок для продолжения строки\n", + "long_string = (\n", + "\"This is a very long string that I would like to \"\n", + "\"continue on the next line.\"\n", + ")\n", + "print(long_string)\n", + "\n", + "4.5 Форматированные строки (f-строки) с использованием скобок\n", + "letter_a = 5\n", + "letter_b = 6\n", + "product_ab = letter_a \\* letter_b\n", + "\n", + "message = (\n", + "f\"when {letter_a} is multiplied by {letter_b}, \"\n", + "f\"the result is {product_ab}\"\n", + ")\n", + "print(message)\n", + "\n", + "4.6 Сложение строк с помощью +\n", + "\n", + "string_part1 = \"This is the first part, \"\n", + "string_part2 = \"and this is the second part.\"\n", + "full_string = string_part1 + string_part2\n", + "print(full_string)\n", + "\n", + "Ответ:\n", + "\n", + "4.6\n", + "\n", + "5. Проверка на ошибки c помощью кнопки problems, где она находится?\n", + "\n", + "Ответ:\n", + "\n", + "https://youtu.be/Si9MfV8uJ-0?t=286\n", + "В нижней части экрана, самая левая первая вкладка\n", + "\n", + "6. Где в vscode находится клиент гита? как в нём отправить коммит? как принять домашку?\n", + "\n", + "Ответ:\n", + "\n", + "https://youtu.be/Si9MfV8uJ-0?t=382\n", + "слева на панели Git Source Control\n", + "\n", + "7. Что такое GIT? он локальный? В нём можно посмотреть историю изменений файлов и вернуться к любому коммиту?\n", + "\n", + "Ответ:\n", + "\n", + "GIT - это система контроля версий.\n", + "Да, он поддерживает локальный режим работы, как и удаленный.\n", + "Да, можно посмотреть историю, вернуться и следить за репозиторием.\n", + "\n", + "8. Как вставить картинку в маркдаун?\n", + "\n", + "Ответ:\n", + "https://youtu.be/Si9MfV8uJ-0?t=476\n", + "Ctrl + C, Ctrl + V\n", + "\n", + "9. Где посмотреть длину строки в vs code?\n", + "\n", + "Ответ:\n", + "\n", + "Внизу IDE отображается количество символов в строке\n", + "\n", + "10. Как поменять тип ячейки с питона на маркдаун?\n", + "\n", + "Ответ:\n", + "\n", + "В правом нижнем углу на ячейке\n", + "\n", + "11. Как запустить сразу все ячейки в юпитере?\n", + "\n", + "Ответ:\n", + "\n", + "https://youtu.be/Si9MfV8uJ-0?t=508\n", + "Run All\n", + "\n", + "12. Как изменить размер картинки в юпитере? Нужно для этого знать HTML?\n", + "\n", + "Ответ:\n", + "\n", + "https://youtu.be/Si9MfV8uJ-0?t=495\n", + "тэг img. Да, для этого нужно понимать теги.\n", + "\n", + "13. Какой хоткей чтобы запустить ячейку с смещением на следующую?\n", + "\n", + "Ответ:\n", + "\n", + "https://youtu.be/Si9MfV8uJ-0?t=522\n", + "Shift + Enter\n", + "\n", + "14. Как включить отображение номеров строк в юпитере(Cell line numbers)?\n", + "\n", + "Ответ:\n", + "\n", + "https://youtu.be/Si9MfV8uJ-0?t=540\n", + "В верхнем всплывающем меню ячейки нажать Show Cell line numbers\n", + "\n", + "15. Что такое \"Go To\" чем это полезно? Как перейти сразу на ошибочную ячейку?\n", + "\n", + "Ответ:\n", + "\n", + "https://youtu.be/Si9MfV8uJ-0?t=568\n", + "Видим какая ячейка отвалилась после нажатия, каждое нажатие следующая ошибка\n", + "\n", + "16. Как очистить вывод ячеек которые уже запущены?\n", + "\n", + "Ответ:\n", + "\n", + "https://youtu.be/Si9MfV8uJ-0?t=641\n", + "Clear All outputs\n", + "\n", + "17. Как работать одновременно в нескольких файлах в VSCODE? Что такое SPLIT?\n", + "\n", + "Ответ:\n", + "\n", + "https://youtu.be/Si9MfV8uJ-0?t=656\n", + "Split Editor и экран разделяется на несколько рабочих областей\n", + "\n", + "18. Каким сочетанием убирается левый сайдбар?\n", + "\n", + "Ответ:\n", + "\n", + "Ctrl + B\n", + "\n", + "19. Кнопка два листочка это наши локальные файлы?\n", + "\n", + "Ответ:\n", + "\n", + "Да, это кнопка которая открывает локальный эксплорер с нашими файлами проекта, или папки где мы находимся в данный момент\n", + "\n", + "20. Какая ошибка появилась в трассировке при запуске всех ячеек DICT или LIST?\n", + "\n", + "Ответ:\n", + "\n", + "https://youtu.be/Si9MfV8uJ-0?t=563\n", + "DICT\n", + "\n", + "21. Вы ознакомились с https://t.me/c/1937296927/832/19307? и https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet?\n", + "\n", + "Ответ:\n", + "\n", + "Ознакомился\n", + "\n", + "22. Что такое валидация?\n", + "\n", + "Ответ:\n", + "\n", + "Валидация - это способ проверки данных на корректность по определенным правилам\n", + "\n", + "23. Что такое трассировка ошибки?\n", + "\n", + "Ответ:\n", + "\n", + "Трассировка ошибки - это информация от того момента где произошла ошибка, до момента начала её вызова.\n", + "\n", + "24. Что значит отвалился интерпретатор?\n", + "\n", + "Ответ:\n", + "\n", + "Значит то, что по тем или иным причинам интерпретатор не может выполнить код, может быть связано с отсутствием интерпретатора, или ошибками работы программы.\n" + ] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/quiz2.py b/quiz2.py new file mode 100644 index 00000000..fd49a477 --- /dev/null +++ b/quiz2.py @@ -0,0 +1,215 @@ +"""Квиз 2.""" + +# Список вопросов к видео https://youtu.be/Si9MfV8uJ-0?si=JXHe-tsgOEwSTI5E (НАСТРОЙКА VSCODE, перенос строк, линтеры, работа с ячейками): +# +# (По желанию)В ответе подробно всё опишите и обязательно нужно указывать тайм код из видео где я это сказал, по желанию, дополнительно прикладываем скриншот из видео. +# Если вы знаете ответы на вопросы из Вашего опыта, то таймкоды из видео не надо указывать и т.д. +# +# 1. Как включить автосохранение данных в VSCODE? +# +# Ответ: +# +# https://youtu.be/Si9MfV8uJ-0?t=11 +# File - Auto Save +# +# 2. Как настроить перенос строки? +# +# Ответ: +# +# https://youtu.be/Si9MfV8uJ-0?t=18 +# File - Preferences - Settings - 'wrap' +# wordWrapColumn +# +# 3. Сколько символов по pep8 разрешено на строке? +# +# Ответ: +# +# https://youtu.be/Si9MfV8uJ-0?t=21 +# 79 +# +# 4. Какие способы переноса строк показаны в видео: +# +# 4.1 Строки с использованием обратного слэша (\) +# +# string_continued = "This is a long string that we want to " \ +# "split across multiple lines." +# print(string_continued) +# +# 4.2 Тройные кавычки (''' или """) +# +# multi_line_string = """This is a string that spans +# multiple lines. You can write freely +# and it will keep the line breaks.""" +# print(multi_line_string) +# +# 4.3 Создание списка строк и объединение с помощью join +# +# strings = [ +# "This is the first line.", +# "This is the second line.", +# "This is the third line." +# ] +# result = "\n".join(strings) # Используем перенос строк '\n' +# print(result) +# +# 4.4 Использование круглых скобок для продолжения строки +# long_string = ( +# "This is a very long string that I would like to " +# "continue on the next line." +# ) +# print(long_string) +# +# 4.5 Форматированные строки (f-строки) с использованием скобок +# letter_a = 5 +# letter_b = 6 +# product_ab = letter_a \* letter_b +# +# message = ( +# f"when {letter_a} is multiplied by {letter_b}, " +# f"the result is {product_ab}" +# ) +# print(message) +# +# 4.6 Сложение строк с помощью + +# +# string_part1 = "This is the first part, " +# string_part2 = "and this is the second part." +# full_string = string_part1 + string_part2 +# print(full_string) +# +# Ответ: +# +# 4.6 +# +# 5. Проверка на ошибки c помощью кнопки problems, где она находится? +# +# Ответ: +# +# https://youtu.be/Si9MfV8uJ-0?t=286 +# В нижней части экрана, самая левая первая вкладка +# +# 6. Где в vscode находится клиент гита? как в нём отправить коммит? как принять домашку? +# +# Ответ: +# +# https://youtu.be/Si9MfV8uJ-0?t=382 +# слева на панели Git Source Control +# +# 7. Что такое GIT? он локальный? В нём можно посмотреть историю изменений файлов и вернуться к любому коммиту? +# +# Ответ: +# +# GIT - это система контроля версий. +# Да, он поддерживает локальный режим работы, как и удаленный. +# Да, можно посмотреть историю, вернуться и следить за репозиторием. +# +# 8. Как вставить картинку в маркдаун? +# +# Ответ: +# https://youtu.be/Si9MfV8uJ-0?t=476 +# Ctrl + C, Ctrl + V +# +# 9. Где посмотреть длину строки в vs code? +# +# Ответ: +# +# Внизу IDE отображается количество символов в строке +# +# 10. Как поменять тип ячейки с питона на маркдаун? +# +# Ответ: +# +# В правом нижнем углу на ячейке +# +# 11. Как запустить сразу все ячейки в юпитере? +# +# Ответ: +# +# https://youtu.be/Si9MfV8uJ-0?t=508 +# Run All +# +# 12. Как изменить размер картинки в юпитере? Нужно для этого знать HTML? +# +# Ответ: +# +# https://youtu.be/Si9MfV8uJ-0?t=495 +# тэг img. Да, для этого нужно понимать теги. +# +# 13. Какой хоткей чтобы запустить ячейку с смещением на следующую? +# +# Ответ: +# +# https://youtu.be/Si9MfV8uJ-0?t=522 +# Shift + Enter +# +# 14. Как включить отображение номеров строк в юпитере(Cell line numbers)? +# +# Ответ: +# +# https://youtu.be/Si9MfV8uJ-0?t=540 +# В верхнем всплывающем меню ячейки нажать Show Cell line numbers +# +# 15. Что такое "Go To" чем это полезно? Как перейти сразу на ошибочную ячейку? +# +# Ответ: +# +# https://youtu.be/Si9MfV8uJ-0?t=568 +# Видим какая ячейка отвалилась после нажатия, каждое нажатие следующая ошибка +# +# 16. Как очистить вывод ячеек которые уже запущены? +# +# Ответ: +# +# https://youtu.be/Si9MfV8uJ-0?t=641 +# Clear All outputs +# +# 17. Как работать одновременно в нескольких файлах в VSCODE? Что такое SPLIT? +# +# Ответ: +# +# https://youtu.be/Si9MfV8uJ-0?t=656 +# Split Editor и экран разделяется на несколько рабочих областей +# +# 18. Каким сочетанием убирается левый сайдбар? +# +# Ответ: +# +# Ctrl + B +# +# 19. Кнопка два листочка это наши локальные файлы? +# +# Ответ: +# +# Да, это кнопка которая открывает локальный эксплорер с нашими файлами проекта, или папки где мы находимся в данный момент +# +# 20. Какая ошибка появилась в трассировке при запуске всех ячеек DICT или LIST? +# +# Ответ: +# +# https://youtu.be/Si9MfV8uJ-0?t=563 +# DICT +# +# 21. Вы ознакомились с https://t.me/c/1937296927/832/19307? и https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet? +# +# Ответ: +# +# Ознакомился +# +# 22. Что такое валидация? +# +# Ответ: +# +# Валидация - это способ проверки данных на корректность по определенным правилам +# +# 23. Что такое трассировка ошибки? +# +# Ответ: +# +# Трассировка ошибки - это информация от того момента где произошла ошибка, до момента начала её вызова. +# +# 24. Что значит отвалился интерпретатор? +# +# Ответ: +# +# Значит то, что по тем или иным причинам интерпретатор не может выполнить код, может быть связано с отсутствием интерпретатора, или ошибками работы программы. +# From a4516aec3ac4f97e982023098e61fd23ed8425cb Mon Sep 17 00:00:00 2001 From: Pavel Demyanov Date: Wed, 7 Jan 2026 20:25:28 +0300 Subject: [PATCH 03/12] [TASK] Cpython #4 (https://github.com/SENATOROVAI/intro-cs/issues/4) Closes https://github.com/SENATOROVAI/intro-cs/issues/4 --- log.ipynb | 8 +- log.py | 2 + python/cpython.ipynb | 304 +++++++++++++++++++++++++++++ python/cpython.py | 246 ++++++++++++++++++++++++ quiz1.ipynb | 442 ------------------------------------------- quiz1.py | 413 ---------------------------------------- quiz2.ipynb | 244 ------------------------ quiz2.py | 215 --------------------- 8 files changed, 557 insertions(+), 1317 deletions(-) create mode 100644 python/cpython.ipynb create mode 100644 python/cpython.py delete mode 100644 quiz1.ipynb delete mode 100644 quiz1.py delete mode 100644 quiz2.ipynb delete mode 100644 quiz2.py diff --git a/log.ipynb b/log.ipynb index 2f96717d..8995bca3 100644 --- a/log.ipynb +++ b/log.ipynb @@ -42,13 +42,15 @@ "2. Пересмотрены по несколько раз видео:\n", " https://www.youtube.com/watch?v=Si9MfV8uJ-0\n", " https://www.youtube.com/watch?si=tCEVs00xGt2q61eW&v=hW_7hodGxVU&feature=youtu.be\n", - "3. Изучаю курс по пайтону шаг https://stepik.org/lesson/1711495/step/7?unit=1734919\n" + "3. Изучаю курс по пайтону шаг https://stepik.org/lesson/1711495/step/7?unit=1734919\n", + "4. https://github.com/SENATOROVAI/intro-cs/issues/6 - сделал пулл\n", + "5. https://github.com/SENATOROVAI/intro-cs/issues/4 - сделал пулл\n" ] } ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": ".venv", "language": "python", "name": "python3" }, @@ -62,7 +64,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.11" + "version": "3.11.9" } }, "nbformat": 4, diff --git a/log.py b/log.py index 3ff69502..4c13c157 100644 --- a/log.py +++ b/log.py @@ -12,4 +12,6 @@ # https://www.youtube.com/watch?v=Si9MfV8uJ-0 # https://www.youtube.com/watch?si=tCEVs00xGt2q61eW&v=hW_7hodGxVU&feature=youtu.be # 3. Изучаю курс по пайтону шаг https://stepik.org/lesson/1711495/step/7?unit=1734919 +# 4. https://github.com/SENATOROVAI/intro-cs/issues/6 - сделал пулл +# 5. https://github.com/SENATOROVAI/intro-cs/issues/4 - сделал пулл # diff --git a/python/cpython.ipynb b/python/cpython.ipynb new file mode 100644 index 00000000..b7ae9d11 --- /dev/null +++ b/python/cpython.ipynb @@ -0,0 +1,304 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "61a1c252", + "metadata": { + "vscode": { + "languageId": "plaintext" + } + }, + "outputs": [], + "source": [ + "\"\"\"Квиз и практика по пайтон.\"\"\"" + ] + }, + { + "cell_type": "markdown", + "id": "987ba122", + "metadata": {}, + "source": [ + "1. Что такое CPython и чем он отличается от Python?\n", + "\n", + "Ответ:\n", + "\n", + "CPython — стандартная реализация Python на языке C. Это та версия, которую обычно скачивают с python.org.\n", + "\n", + "Разница:\n", + "Python — язык программирования (спецификация)\n", + "CPython — реализация этого языка на C\n", + "\n", + "\n", + "2. Сколько существует реализаций Python, и какая из них самая популярная?\n", + "\n", + "Ответ:\n", + "\n", + "6 реализаций \n", + "CPython - самая популярная\n", + "\n", + "\n", + "4. На каком языке написан CPython?\n", + "\n", + "Ответ:\n", + "\n", + "Язык С\n", + "\n", + "\n", + "5. (опционально) Кто создал CPython?\n", + "\n", + "Ответ:\n", + "\n", + "Гвидо ван Россум\n", + "\n", + "\n", + "6. Почему Python считается быстрым, несмотря на то, что это интерпретируемый язык?\n", + "\n", + "Ответ:\n", + "\n", + "Потому что он написан на C и вызывает инструкции из C\n", + "\n", + "\n", + "7. Напишите путь к Интерпретатору CPython на вашем компьютере\n", + "\n", + "Ответ:\n", + "\n", + "~/AppData/Local/Programs/Python/Python310/python.exe\n", + "\n", + "\n", + "8. Что содержится в папке include в CPython?\n", + "\n", + "Ответ:\n", + "\n", + "заголовочные файлы с расширением .h\n", + "\n", + "\n", + "9. Где можно найти исходный код CPython дайте ссылку на репозиторий гитхаб\n", + "\n", + "Ответ:\n", + "\n", + "https://github.com/python/cpython\n", + "\n", + "\n", + "10. (опционально) Как работает интерпретатор CPython при выполнении кода?\n", + "\n", + "Ответ:\n", + "\n", + "Парсинг — исходный код разбирается в AST (абстрактное синтаксическое дерево).\n", + "Компиляция в байт-код — AST компилируется в байт-код (.pyc), который хранится в папке __pycache__.\n", + "\n", + "Виртуальная машина (VM) — байт-код выполняется стековой виртуальной машиной:\n", + "Читает инструкции байт-кода\n", + "Выполняет их через C-функции\n", + "Управляет стеком вызовов, объектами в памяти, GIL\n", + "Выполнение — каждая инструкция байт-кода вызывает соответствующую C-функцию, которая выполняет операцию.\n", + "\n", + "\n", + "11. Какая команда используется для запуска файла с помощью CPython?\n", + "\n", + "Ответ:\n", + "\n", + "python filename\n", + "\n", + "12. Можно ли запускать текстовые файлы через интерпретатор Python? Почему?\n", + "\n", + "Ответ:\n", + "\n", + "Да, можно\n", + "Интерпретатору без разницы какой формат файла, главное, чтобы был валидный пайтон код\n", + "\n", + "13. Как указать путь к интерпретатору и файлу для выполнения кода?\n", + "\n", + "Ответ:\n", + "\n", + "Через Абсолютный или относительный путь, или если есть алиас в переменных средах, то через него\n", + "\n", + "14. Чем PyPy отличается от CPython?\n", + "\n", + "Ответ:\n", + "\n", + "PyPy — альтернативная реализация Python с JIT-компиляцией, быстрее CPython для многих задач, но с ограничениями по совместимости с C-расширениями\n", + "\n", + "15. Почему PyPy не может использоваться для всех проектов на Python?\n", + "\n", + "Ответ:\n", + "\n", + "Не совместим со всеми проектами на Python\n", + "\n", + "\n", + "16. Где можно скачать PyPy?\n", + "\n", + "Ответ:\n", + "\n", + "https://pypy.org/download.html\n", + "\n", + "\n", + "17. Как установить PyPy после скачивания?\n", + "\n", + "Ответ:\n", + "\n", + "Распаковать в нужную папку и прописать пути в переменных средах\n", + "\n", + "18. Как запустить файл с помощью PyPy?\n", + "\n", + "Ответ:\n", + "\n", + "pypy filename\n", + "Или абсолютный путь до интерпретатора:\n", + "~/pypy/pypy.exe filename\n", + "\n", + "19. Почему PyPy выполняет код быстрее, чем CPython?\n", + "\n", + "Ответ:\n", + "\n", + "PyPy быстрее за счёт JIT-компиляции часто используемого кода в машинный код, что устраняет интерпретацию байт-кода." + ] + }, + { + "cell_type": "markdown", + "id": "136daecf", + "metadata": {}, + "source": [ + "Задание 1: Поиск и установка CPython\n", + "\n", + "Проверьте, установлен ли CPython на вашем компьютере:\n", + " Используйте поиск в меню \"Пуск\" (Windows) или терминале (Linux/Mac).\n", + " Введите команду python --version или python3 --version в терминале.\n", + "Если CPython не установлен, скачайте его с официального сайта Python https://www.python.org/downloads/ и установите.\n", + "\n", + "\n", + "Решение:\n", + "\n", + "\n", + "C:\\Users\\demya>where python\n", + "C:\\Users\\demya\\anaconda3\\python.exe\n", + "C:\\Users\\demya\\AppData\\Local\\Programs\\Python\\Python310\\python.exe\n", + "C:\\Users\\demya\\AppData\\Local\\Programs\\Python\\Python311\\python.exe\n", + "C:\\ProgramData\\miniconda3\\python.exe\n", + "C:\\Users\\demya\\AppData\\Local\\Microsoft\\WindowsApps\\python.exe\n", + "C:\\Users\\demya\\pypy\\python.exe\n", + "\n", + "\n", + "C:\\Users\\demya>python --version\n", + "Python 3.13.9" + ] + }, + { + "cell_type": "markdown", + "id": "b6412bf5", + "metadata": {}, + "source": [ + "Задание 2: Исследование структуры CPython\n", + "\n", + "Найдите папку, где установлен Python (например, через команду which python в терминале или свойства ярлыка).\n", + "Откройте папку include и изучите её содержимое. Какое количество файлов на C там есть?\n", + "Перейдите на [GitHub-репозиторий CPython](https://github.com/python/cpython) и найдите файл README. Прочитайте информацию о проекте.\n", + "\n", + "Решение:\n", + "\n", + "C:\\Users\\demya\\anaconda3\\include\n", + "79 файлов\n" + ] + }, + { + "cell_type": "markdown", + "id": "40744f44", + "metadata": {}, + "source": [ + "Задание 3: Запуск файла с помощью CPython\n", + "\n", + "Создайте текстовый файл example.txt с содержимым:\n", + "\n", + "print(\"Hello from CPython!\")\n", + "\n", + "Запустите файл через команду python <путь_до_файла> (замените <путь_до_файла> на фактический путь к вашему файлу).\n", + "Проверьте, что выводится на экран. Попробуйте изменить расширение файла на .py и повторите запуск.\n", + "\n", + "\n", + "Решение:\n", + "\n", + "C:\\Users\\demya>echo print(\"Hello from CPython!\") > example.txt\n", + "\n", + "C:\\Users\\demya>python example.txt\n", + "Hello from CPython!\n", + "\n", + "C:\\Users\\demya>move example.txt example.py\n", + " 1 file(s) moved.\n", + "\n", + "C:\\Users\\demya>python example.py\n", + "Hello from CPython!\n" + ] + }, + { + "cell_type": "markdown", + "id": "52008d7a", + "metadata": {}, + "source": [ + "Задание 4: Установка и использование PyPy\n", + "\n", + "Перейдите на [официальный сайт PyPy](https://www.pypy.org/) и скачайте подходящую версию для вашей операционной системы.\n", + "Распакуйте скачанный архив в удобное место.\n", + "Создайте файл example_pypy.py с кодом:\n", + "\n", + "print(\"Hello from pypy!\")\n", + "\n", + "Запустите файл через PyPy\n", + "pypy <путь_до_файла> (замените <путь_до_файла> на фактический путь к вашему файлу).\n", + "Проверьте, что выводится на экран. Попробуйте изменить расширение файла на .py и повторите запуск.\n", + "\n", + "Решение:\n", + "\n", + "C:\\Users\\demya>echo print(\"Hello from pypy!\") > example_pypy.py\n", + "\n", + "C:\\Users\\demya>pypy example_pypy.py\n", + "Hello from pypy!" + ] + }, + { + "cell_type": "markdown", + "id": "9e33b1cf", + "metadata": {}, + "source": [ + "Задание 5: Сравнение производительности CPython и PyPy\n", + "\n", + "Создайте файл performance_test.py с кодом:\n", + "\n", + " import time\n", + " start_time = time.time()\n", + " total = 0\n", + " for i in range(1, 10000000):\n", + " total += i\n", + " end_time = time.time()\n", + " \n", + " print(\"Result:\", total)\n", + " print(\"Execution time:\", end_time - start_time, \"seconds\")\n", + "\n", + "Запустите этот файл сначала через CPython, а затем через PyPy. Запишите результаты времени выполнения для обоих интерпретаторов.\n", + "\n", + "Сделайте вывод о разнице в производительности.\n", + "\n", + "Решение:\n", + "\n", + "CPython:\n", + "\n", + "C:\\Users\\demya>python performance_test.py\n", + "Result: 49999995000000\n", + "Execution time: 0.7137529850006104 seconds\n", + "\n", + "\n", + "Pypy:\n", + "\n", + "C:\\Users\\demya>pypy performance_test.py\n", + "Result: 49999995000000\n", + "Execution time: 0.023383617401123047 seconds" + ] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/python/cpython.py b/python/cpython.py new file mode 100644 index 00000000..d30a4ef7 --- /dev/null +++ b/python/cpython.py @@ -0,0 +1,246 @@ +"""Квиз и практика по пайтон.""" + +# 1. Что такое CPython и чем он отличается от Python? +# +# Ответ: +# +# CPython — стандартная реализация Python на языке C. Это та версия, которую обычно скачивают с python.org. +# +# Разница: +# Python — язык программирования (спецификация) +# CPython — реализация этого языка на C +# +# +# 2. Сколько существует реализаций Python, и какая из них самая популярная? +# +# Ответ: +# +# 6 реализаций +# CPython - самая популярная +# +# +# 4. На каком языке написан CPython? +# +# Ответ: +# +# Язык С +# +# +# 5. (опционально) Кто создал CPython? +# +# Ответ: +# +# Гвидо ван Россум +# +# +# 6. Почему Python считается быстрым, несмотря на то, что это интерпретируемый язык? +# +# Ответ: +# +# Потому что он написан на C и вызывает инструкции из C +# +# +# 7. Напишите путь к Интерпретатору CPython на вашем компьютере +# +# Ответ: +# +# ~/AppData/Local/Programs/Python/Python310/python.exe +# +# +# 8. Что содержится в папке include в CPython? +# +# Ответ: +# +# заголовочные файлы с расширением .h +# +# +# 9. Где можно найти исходный код CPython дайте ссылку на репозиторий гитхаб +# +# Ответ: +# +# https://github.com/python/cpython +# +# +# 10. (опционально) Как работает интерпретатор CPython при выполнении кода? +# +# Ответ: +# +# Парсинг — исходный код разбирается в AST (абстрактное синтаксическое дерево). +# Компиляция в байт-код — AST компилируется в байт-код (.pyc), который хранится в папке __pycache__. +# +# Виртуальная машина (VM) — байт-код выполняется стековой виртуальной машиной: +# Читает инструкции байт-кода +# Выполняет их через C-функции +# Управляет стеком вызовов, объектами в памяти, GIL +# Выполнение — каждая инструкция байт-кода вызывает соответствующую C-функцию, которая выполняет операцию. +# +# +# 11. Какая команда используется для запуска файла с помощью CPython? +# +# Ответ: +# +# python filename +# +# 12. Можно ли запускать текстовые файлы через интерпретатор Python? Почему? +# +# Ответ: +# +# Да, можно +# Интерпретатору без разницы какой формат файла, главное, чтобы был валидный пайтон код +# +# 13. Как указать путь к интерпретатору и файлу для выполнения кода? +# +# Ответ: +# +# Через Абсолютный или относительный путь, или если есть алиас в переменных средах, то через него +# +# 14. Чем PyPy отличается от CPython? +# +# Ответ: +# +# PyPy — альтернативная реализация Python с JIT-компиляцией, быстрее CPython для многих задач, но с ограничениями по совместимости с C-расширениями +# +# 15. Почему PyPy не может использоваться для всех проектов на Python? +# +# Ответ: +# +# Не совместим со всеми проектами на Python +# +# +# 16. Где можно скачать PyPy? +# +# Ответ: +# +# https://pypy.org/download.html +# +# +# 17. Как установить PyPy после скачивания? +# +# Ответ: +# +# Распаковать в нужную папку и прописать пути в переменных средах +# +# 18. Как запустить файл с помощью PyPy? +# +# Ответ: +# +# pypy filename +# Или абсолютный путь до интерпретатора: +# ~/pypy/pypy.exe filename +# +# 19. Почему PyPy выполняет код быстрее, чем CPython? +# +# Ответ: +# +# PyPy быстрее за счёт JIT-компиляции часто используемого кода в машинный код, что устраняет интерпретацию байт-кода. + +# Задание 1: Поиск и установка CPython +# +# Проверьте, установлен ли CPython на вашем компьютере: +# Используйте поиск в меню "Пуск" (Windows) или терминале (Linux/Mac). +# Введите команду python --version или python3 --version в терминале. +# Если CPython не установлен, скачайте его с официального сайта Python https://www.python.org/downloads/ и установите. +# +# +# Решение: +# +# +# C:\Users\demya>where python +# C:\Users\demya\anaconda3\python.exe +# C:\Users\demya\AppData\Local\Programs\Python\Python310\python.exe +# C:\Users\demya\AppData\Local\Programs\Python\Python311\python.exe +# C:\ProgramData\miniconda3\python.exe +# C:\Users\demya\AppData\Local\Microsoft\WindowsApps\python.exe +# C:\Users\demya\pypy\python.exe +# +# +# C:\Users\demya>python --version +# Python 3.13.9 + +# Задание 2: Исследование структуры CPython +# +# Найдите папку, где установлен Python (например, через команду which python в терминале или свойства ярлыка). +# Откройте папку include и изучите её содержимое. Какое количество файлов на C там есть? +# Перейдите на [GitHub-репозиторий CPython](https://github.com/python/cpython) и найдите файл README. Прочитайте информацию о проекте. +# +# Решение: +# +# C:\Users\demya\anaconda3\include +# 79 файлов +# + +# Задание 3: Запуск файла с помощью CPython +# +# Создайте текстовый файл example.txt с содержимым: +# +# print("Hello from CPython!") +# +# Запустите файл через команду python <путь_до_файла> (замените <путь_до_файла> на фактический путь к вашему файлу). +# Проверьте, что выводится на экран. Попробуйте изменить расширение файла на .py и повторите запуск. +# +# +# Решение: +# +# C:\Users\demya>echo print("Hello from CPython!") > example.txt +# +# C:\Users\demya>python example.txt +# Hello from CPython! +# +# C:\Users\demya>move example.txt example.py +# 1 file(s) moved. +# +# C:\Users\demya>python example.py +# Hello from CPython! +# + +# Задание 4: Установка и использование PyPy +# +# Перейдите на [официальный сайт PyPy](https://www.pypy.org/) и скачайте подходящую версию для вашей операционной системы. +# Распакуйте скачанный архив в удобное место. +# Создайте файл example_pypy.py с кодом: +# +# print("Hello from pypy!") +# +# Запустите файл через PyPy +# pypy <путь_до_файла> (замените <путь_до_файла> на фактический путь к вашему файлу). +# Проверьте, что выводится на экран. Попробуйте изменить расширение файла на .py и повторите запуск. +# +# Решение: +# +# C:\Users\demya>echo print("Hello from pypy!") > example_pypy.py +# +# C:\Users\demya>pypy example_pypy.py +# Hello from pypy! + +# Задание 5: Сравнение производительности CPython и PyPy +# +# Создайте файл performance_test.py с кодом: +# +# import time +# start_time = time.time() +# total = 0 +# for i in range(1, 10000000): +# total += i +# end_time = time.time() +# +# print("Result:", total) +# print("Execution time:", end_time - start_time, "seconds") +# +# Запустите этот файл сначала через CPython, а затем через PyPy. Запишите результаты времени выполнения для обоих интерпретаторов. +# +# Сделайте вывод о разнице в производительности. +# +# Решение: +# +# CPython: +# +# C:\Users\demya>python performance_test.py +# Result: 49999995000000 +# Execution time: 0.7137529850006104 seconds +# +# +# Pypy: +# +# C:\Users\demya>pypy performance_test.py +# Result: 49999995000000 +# Execution time: 0.023383617401123047 seconds diff --git a/quiz1.ipynb b/quiz1.ipynb deleted file mode 100644 index 475de3b8..00000000 --- a/quiz1.ipynb +++ /dev/null @@ -1,442 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "id": "9084810c", - "metadata": { - "vscode": { - "languageId": "plaintext" - } - }, - "outputs": [], - "source": [ - "\"\"\"Квиз 1.\"\"\"" - ] - }, - { - "cell_type": "markdown", - "id": "b8bb4b09", - "metadata": {}, - "source": [ - "Список вопросов к видео https://youtu.be/hW_7hodGxVU?si=tCEVs00xGt2q61eW (АЛГОРИТМ ПРИНЯТИЯ И ОТДАЧИ ДОМАШКИ):\n", - "\n", - "(По желанию )В ответе подробно всё опишите и обязательно нужно указывать тайм код из видео где я это сказал, по желанию, дополнительно прикладываем скриншот из видео.\n", - "Если вы знаете ответы на вопросы из Вашего опыта, то таймкоды из видео не надо указывать и т.д.\n", - "\n", - "1. Как понять, что домашка пришла?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=8\n", - " Заходим в чатик HomeWork видим ник и прими пул\n", - "\n", - "2. Как принять домашку?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=17\n", - " Заходим в гитхаб десктоп нажимаем fetch origin.\n", - "\n", - "3. Зачем нужна кнопка history и какие функции появляются при нажатии правой кнопки мыши на коммит?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=29\n", - "\n", - " В хистори мы видим, что произошло с нашим репозиторием\n", - "\n", - "3.1) Где брать ссылку на коммит? куда её отправлять?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=229\n", - "\n", - " Нажимаем в хистори View on Github и перемещаемся в гитхаб там будет в адресной строке ссылка на коммит\n", - " Отправляем её в чат HomeWork с припиской коммит отдал ссылка*на*коммит.\n", - "\n", - "4. Что такое файл лога?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=70\n", - " Файл лога - это файл содержащий информацию о том, что мы делали за все уроки по датам.\n", - "\n", - "4.1) Когда нужно его пушить?\n", - "\n", - "Ответ:\n", - "\n", - "https://youtu.be/hW_7hodGxVU?t=70\n", - "Когда заканчиваем урок\n", - "\n", - "5. Что такое интерпретатор?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=169\n", - " Программа которая читает и запускает наш код\n", - "\n", - "6. Где можно выбрать интерпретатор?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=163\n", - " Нажимаем слева запуск кода или сверху в правом углу выбираем нужный нам интерпретатор\n", - "\n", - "7. Что такое модуль?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=526\n", - " Модуль это обычный файлик с расширение .py или .ipynb\n", - "\n", - "8. Как создать и отправить коммит?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=193\n", - " Заходим в гитхаб отмечаем нужные изменения, пишем название коммит и нажимаем кнопку коммит\n", - "\n", - "9. Как посмотреть что коммит точно отправлен и находится в github?\n", - "\n", - " Ответ:\n", - "\n", - " В хистори будет видно, да и view on github даст ссылку на коммит\n", - "\n", - "10. Какая команда показывает что код не прошёл проверки на ошибки?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=363\n", - " pre-commit run --all-files\n", - "\n", - "10.1) Напишите список линтеров которые используются для проверки кода и дайте их краткую характеристику.\n", - "\n", - " Ответ:\n", - "\n", - " Flake8 — базовая проверка стиля\n", - " Mypy — проверка типов\n", - " Pylint — дополнительный анализ (по необходимости)\n", - " Pydocstyle — проверка документации (по необходимости)\n", - "\n", - "11. Как узнать какой именно линтер не прошёл проверку?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=370\n", - " В консоле после запуска линтеров будет статус выполнения и по статусу можно определить успешность по каждому линтеру.\n", - "\n", - "12. Линтер Pylint видит markdown?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=425\n", - " Нет\n", - "\n", - "13. Номер ячейки в терминале и номер ячейки в vs code может отличаться? в каком случае?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=437\n", - " Да, может отличаться, в случае если есть ячейки с маркдовн, из за того, что линтер их не видит, он их не учитывает, поэтому количество может быть разным\n", - "\n", - "14. Где посмотреть номер ячейки в vscode?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=455\n", - " можем посмотреть внизу справа\n", - "\n", - "15. В каком формате ipynb отправляется в гитхаб? причём здесь JSON?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=204\n", - " В формате JSON, приложение github desktop отображает файлы формата ipynb в формате json\n", - "\n", - "16. Где посмотреть в какой ячейке ошибка?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=462\n", - " Можем посмотреть по коду ошибки, где не так или нажать Ctrl + F и найти где ошибка\n", - "\n", - "17. Как запустить терминал?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=353\n", - " Меню терминал - новый терминал\n", - "\n", - "18. Что такое линтер?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=375\n", - " Линтер это программа которая проверяет на корректность стандартам\n", - "\n", - "19. В какой сайт нужно вставлять код ошибки если ошибка связана с pylint?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=495\n", - " На сайте пайлинта https://pylint.readthedocs.io/\n", - "\n", - "20. Секция pydocstyle в большинстве случае автоматический закрывается после исправления ошибок в каком линтере?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=587\n", - " После исправления ошибок в линтере pylint\n", - "\n", - "21. Что такое описание модуля? Оно должно отражать информацию о том что находится в модуле?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=563\n", - " Описание модуля это какая информация у нас в модуле. Да, оно должно отображать информацию о модуле.\n", - "\n", - " 21.1) С какой git команды начинается утро программиста?\n", - "\n", - " Ответ:\n", - "\n", - " fetch origin\n", - "\n", - "22. После внесения изменений в файлах, кнопка open in vs code пропадает в кошке, как по другому открыть vs code из кошки?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=855\n", - " Чтобы попасть из github desktop в vs code, нужно нажать на Current repository и выбрать Open VS code\n", - "\n", - "23. Что такое stash? Общее объяснение концепции.\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=921\n", - " stash - буффер обмена и локальные изменения \"прячутся\"\n", - " Концепция, нужна если мы что-то делали, но нам нужно резко, что-то делать другое, не коммитя изменения в репозиторий, мы можем сохранить в буффер обмена, для дальнейшего использования, пряча новые изменения.\n", - "\n", - " 23.1) Как сохранить стэш?\n", - "\n", - " Ответ:\n", - "\n", - " git командa(подсказка: https://t.me/c/1937296927/3602/19531):\n", - " git stash save \"NAME_STASH\" - сохранение в буффер обмена\n", - " git stash apply \"NUMBER_STASH\" - извлечения из буффера обмена\n", - "\n", - "Кнопка в vs code: Stash changes and continue\n", - "\n", - "23.2) Как восстановить стэш(подсказка: https://t.me/c/1937296927/3602/25747)?:\n", - "\n", - " git команда(подсказка: https://t.me/c/1937296927/3602/19531)?:\n", - "\n", - " Ответ:\n", - "\n", - " git stash apply \"NUMBER_STASH\"\n", - "\n", - "23.3) Различие между стэшем и коммитом.\n", - "\n", - " Ответ:\n", - "\n", - " Когда лучше сохранить изменения в стэше, а когда коммитить.\n", - " Коммитить когда мы четко понимаем, что закончили с какой-то итерацией и можем выложить в ветку. Стешить, когда нам нужно быстро переключиться, с еще не доделанной работы, чтобы отдельно не плодить коммитов, с еще пока не готовым функционалом\n", - "\n", - "23.4) Как просмотреть список сохраненных стэшей? \n", - " git команда (подсказка: https://t.me/c/1937296927/3602/19531):\n", - "\n", - " Ответ:\n", - "\n", - " git stash list\n", - "\n", - "23.5) Как удалить стэш? \n", - " Команды для удаления отдельных стэшей или всех сразу.\n", - "git команда (подсказка: https://t.me/c/1937296927/3602/19531):\n", - "\n", - " Ответ:\n", - "\n", - " git stash drop\n", - " git stash clear\n", - "\n", - "23.6) Практические примеры использования стэша. Краткие сценарии, где стэш помогает.\n", - "\n", - " Ответ:\n", - "\n", - " Спрятать изменения в моменте, когда нужно поработать над другой задачей.\n", - " Спрятать изменения при конфликте, для дальнейшего резолва изменений с актуальной веткой\n", - "\n", - "24. Где посмотреть что есть конфликт в файлах?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=969\n", - " В changes будет у строчки восклицательный знак в github desktop, нажимаем правой кнопкой где восклицательный знак и выбираем Open VS code\n", - "\n", - " 24.1) Когда он появляется?\n", - "\n", - " Ответ:\n", - "\n", - " Когда мы редактируем одинаковые файлы и получается у нас накладываются строчки из за этого возникает конфликт\n", - "\n", - "25. Как решить конфликт в файлах?\n", - "\n", - " Ответ:\n", - "\n", - " Выбираем изменения которые нам нужны, убираем те что не нужны и нажимаем Resolve in merge\n", - "\n", - "26. Напишите правильное утверждение\n", - " -Зелёное то что пришло с гитхаба и синее локальные изменения или синее то что пришло с гитхаба и зелёное это локальные изменения\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=998\n", - "\n", - " Зеленное, это то, что мы стянули из репозитория\n", - " Синее наше локальные изменения\n", - "\n", - "27. Если мы работаем в одном файле, можно ли принять pull после того как вы спрячете в стэш свои изменения?\n", - "\n", - " Ответ:\n", - "\n", - " Да, можно\n", - " Если спрячем, то ничего не произойдет, изменения затянуться из github\n", - "\n", - " 27.1) Что может произойти когда stash восстановите после принятия pull?\n", - "\n", - " Ответ:\n", - "\n", - " Может произойти конфликт\n", - "\n", - "28. Сколько способов решения конфликтов было показано в видео? Напишите ЧИСЛО и укажите их способы.\n", - "\n", - " Ответ:\n", - "\n", - " 2 способа:\n", - " С помощью применения через акцепт и инкоминг\n", - " Вручную убрав все лишнее.\n", - "\n", - "29. Что делает кнопка complete merge?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=1062\n", - " Смерживает конечные изменения из конфликтов в один.\n", - "\n", - "30. В какой чат нужно писать если остались вопросы?\n", - "\n", - " Ответ:\n", - "\n", - " HELP ME (bags&reports)\n", - " https://t.me/c/1937296927/2415\n", - "\n", - "31. Что такое FORK? Зачем его делают?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=1146\n", - " Форк - это копия чужого репозитория оригинального репозитория в свое хранилище репозиториев.\n", - " Делают для того, чтобы работать с оригинальной репой не изменяя исходного проекта, а помогать править баги, улучшать, или отдельно на основании этого проекта делать свое\n", - "\n", - "32. Как скачать форкнутый репозиторий на локальный компьютер?\n", - "\n", - " Ответ:\n", - "\n", - " Через github desktop выбрав нужный в списке\n", - " Консольная команде git clone название_репы\n", - "\n", - "33. С какой вероятностью ваши ошибки были уже решены? и кто их решил?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=764\n", - " С вероятностью 90%\n", - " Их решил: Сенаторов Руслан Олегович\n", - "\n", - "34. Как создать файл в vs code?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=53\n", - " Нажимаем листочек с плюсиком и называем файл как нам нужно\n", - "\n", - "35. # Файл лога нужно заполнять в конце каждого урока?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=70\n", - " Да, нужно\n", - "\n", - "Дополнительные вопросы:\n", - "\n", - "1. Какая команда конвертирует файл в py из ipynb?\n", - " подсказка https://t.me/c/1937296927/1/26527\n", - "\n", - "Ответ:\n", - "jupytext --to py filename.ipynb или через расширение VS Code (Jupytext)\n", - "\n", - "2. Что такое пакетный менеджер? Вы пользуетесь пакетным менеджером conda или pip? Какой лучше использовать для дата сайнс?\n", - "\n", - "Ответ:\n", - "\n", - "Пакетный менеджер — инструмент для установки и управления библиотеками/пакетами.\n", - "Для дата сайнс лучше использовать conda — он управляет не только Python-пакетами, но и зависимостями системы, библиотеками (NumPy, SciPy) с нативными расширениями.\n", - "\n", - "3. Почему расширение py лучше чем ipynb?\n", - "\n", - "Ответ:\n", - "\n", - "- Удобнее для версионирования (Git лучше работает с текстом)\n", - "- Линтеры (Pylint, Flake8) корректно работают только с .py\n", - "- Проще ревью кода\n", - "- Лучше для продакшн-кода и автоматизации\n", - "\n", - "4. Что такое pep8?\n", - " подсказка:https://peps.python.org/pep-0008/\n", - "\n", - "Ответ:\n", - "\n", - "PEP 8 — официальный стиль кода Python. Рекомендации по форматированию, именованию, структуре для единообразия.\n", - "\n", - "4.1) линтеры проверяют на соблюдение pep8?\n", - "\n", - "Ответ:\n", - "\n", - "Да. Flake8 и Pylint проверяют соответствие PEP 8 (стиль, именование, форматирование).\n", - "\n", - "4.2) Какая нотация используется для создания переменных?\n", - "ответ на 85-95 страницы https://t.me/c/1937296927/1/16676\n", - "\n", - "Ответ:\n", - "\n", - "snake_case (нижний регистр, слова разделяются подчеркиванием), например: my_variable_name\n", - "\n", - "4.3) Может ли переменная состоять из одной буквы например андерскор \"\\_\" ?\n", - "\n", - "Ответ:\n", - "Да. \\_ — валидная переменная, часто используется как временная или неиспользуемая.\n", - "\n", - "4.4) Зачем и где мы используем андерскор \\_\n", - "\n", - "Ответ:\n", - "\n", - "- _ — временная/неиспользуемая переменная (например, в unpacking: x, _, z = data)\n", - "- Два \\_\\_ в начале — приватные атрибуты/методы\n", - "- _ в конце — избежание конфликта с ключевыми словами (class_)\n", - "\n", - " 4.5) По PEP8 допустима переменная в одну букву?\n", - " ответ на 85-95 страницы https://t.me/c/1937296927/1/16676\n", - "\n", - "Ответ:\n", - "\n", - "Да, но не рекомендуется для обычных переменных. Допустимо в исключениях: циклы (for i in range(5), for x, y in points), малые области видимости. Лучше использовать понятные имена.\n" - ] - } - ], - "metadata": { - "language_info": { - "name": "python" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/quiz1.py b/quiz1.py deleted file mode 100644 index 8cf4aa29..00000000 --- a/quiz1.py +++ /dev/null @@ -1,413 +0,0 @@ -"""Квиз 1.""" - -# Список вопросов к видео https://youtu.be/hW_7hodGxVU?si=tCEVs00xGt2q61eW (АЛГОРИТМ ПРИНЯТИЯ И ОТДАЧИ ДОМАШКИ): -# -# (По желанию )В ответе подробно всё опишите и обязательно нужно указывать тайм код из видео где я это сказал, по желанию, дополнительно прикладываем скриншот из видео. -# Если вы знаете ответы на вопросы из Вашего опыта, то таймкоды из видео не надо указывать и т.д. -# -# 1. Как понять, что домашка пришла? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=8 -# Заходим в чатик HomeWork видим ник и прими пул -# -# 2. Как принять домашку? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=17 -# Заходим в гитхаб десктоп нажимаем fetch origin. -# -# 3. Зачем нужна кнопка history и какие функции появляются при нажатии правой кнопки мыши на коммит? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=29 -# -# В хистори мы видим, что произошло с нашим репозиторием -# -# 3.1) Где брать ссылку на коммит? куда её отправлять? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=229 -# -# Нажимаем в хистори View on Github и перемещаемся в гитхаб там будет в адресной строке ссылка на коммит -# Отправляем её в чат HomeWork с припиской коммит отдал ссылка*на*коммит. -# -# 4. Что такое файл лога? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=70 -# Файл лога - это файл содержащий информацию о том, что мы делали за все уроки по датам. -# -# 4.1) Когда нужно его пушить? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=70 -# Когда заканчиваем урок -# -# 5. Что такое интерпретатор? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=169 -# Программа которая читает и запускает наш код -# -# 6. Где можно выбрать интерпретатор? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=163 -# Нажимаем слева запуск кода или сверху в правом углу выбираем нужный нам интерпретатор -# -# 7. Что такое модуль? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=526 -# Модуль это обычный файлик с расширение .py или .ipynb -# -# 8. Как создать и отправить коммит? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=193 -# Заходим в гитхаб отмечаем нужные изменения, пишем название коммит и нажимаем кнопку коммит -# -# 9. Как посмотреть что коммит точно отправлен и находится в github? -# -# Ответ: -# -# В хистори будет видно, да и view on github даст ссылку на коммит -# -# 10. Какая команда показывает что код не прошёл проверки на ошибки? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=363 -# pre-commit run --all-files -# -# 10.1) Напишите список линтеров которые используются для проверки кода и дайте их краткую характеристику. -# -# Ответ: -# -# Flake8 — базовая проверка стиля -# Mypy — проверка типов -# Pylint — дополнительный анализ (по необходимости) -# Pydocstyle — проверка документации (по необходимости) -# -# 11. Как узнать какой именно линтер не прошёл проверку? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=370 -# В консоле после запуска линтеров будет статус выполнения и по статусу можно определить успешность по каждому линтеру. -# -# 12. Линтер Pylint видит markdown? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=425 -# Нет -# -# 13. Номер ячейки в терминале и номер ячейки в vs code может отличаться? в каком случае? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=437 -# Да, может отличаться, в случае если есть ячейки с маркдовн, из за того, что линтер их не видит, он их не учитывает, поэтому количество может быть разным -# -# 14. Где посмотреть номер ячейки в vscode? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=455 -# можем посмотреть внизу справа -# -# 15. В каком формате ipynb отправляется в гитхаб? причём здесь JSON? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=204 -# В формате JSON, приложение github desktop отображает файлы формата ipynb в формате json -# -# 16. Где посмотреть в какой ячейке ошибка? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=462 -# Можем посмотреть по коду ошибки, где не так или нажать Ctrl + F и найти где ошибка -# -# 17. Как запустить терминал? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=353 -# Меню терминал - новый терминал -# -# 18. Что такое линтер? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=375 -# Линтер это программа которая проверяет на корректность стандартам -# -# 19. В какой сайт нужно вставлять код ошибки если ошибка связана с pylint? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=495 -# На сайте пайлинта https://pylint.readthedocs.io/ -# -# 20. Секция pydocstyle в большинстве случае автоматический закрывается после исправления ошибок в каком линтере? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=587 -# После исправления ошибок в линтере pylint -# -# 21. Что такое описание модуля? Оно должно отражать информацию о том что находится в модуле? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=563 -# Описание модуля это какая информация у нас в модуле. Да, оно должно отображать информацию о модуле. -# -# 21.1) С какой git команды начинается утро программиста? -# -# Ответ: -# -# fetch origin -# -# 22. После внесения изменений в файлах, кнопка open in vs code пропадает в кошке, как по другому открыть vs code из кошки? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=855 -# Чтобы попасть из github desktop в vs code, нужно нажать на Current repository и выбрать Open VS code -# -# 23. Что такое stash? Общее объяснение концепции. -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=921 -# stash - буффер обмена и локальные изменения "прячутся" -# Концепция, нужна если мы что-то делали, но нам нужно резко, что-то делать другое, не коммитя изменения в репозиторий, мы можем сохранить в буффер обмена, для дальнейшего использования, пряча новые изменения. -# -# 23.1) Как сохранить стэш? -# -# Ответ: -# -# git командa(подсказка: https://t.me/c/1937296927/3602/19531): -# git stash save "NAME_STASH" - сохранение в буффер обмена -# git stash apply "NUMBER_STASH" - извлечения из буффера обмена -# -# Кнопка в vs code: Stash changes and continue -# -# 23.2) Как восстановить стэш(подсказка: https://t.me/c/1937296927/3602/25747)?: -# -# git команда(подсказка: https://t.me/c/1937296927/3602/19531)?: -# -# Ответ: -# -# git stash apply "NUMBER_STASH" -# -# 23.3) Различие между стэшем и коммитом. -# -# Ответ: -# -# Когда лучше сохранить изменения в стэше, а когда коммитить. -# Коммитить когда мы четко понимаем, что закончили с какой-то итерацией и можем выложить в ветку. Стешить, когда нам нужно быстро переключиться, с еще не доделанной работы, чтобы отдельно не плодить коммитов, с еще пока не готовым функционалом -# -# 23.4) Как просмотреть список сохраненных стэшей? -# git команда (подсказка: https://t.me/c/1937296927/3602/19531): -# -# Ответ: -# -# git stash list -# -# 23.5) Как удалить стэш? -# Команды для удаления отдельных стэшей или всех сразу. -# git команда (подсказка: https://t.me/c/1937296927/3602/19531): -# -# Ответ: -# -# git stash drop -# git stash clear -# -# 23.6) Практические примеры использования стэша. Краткие сценарии, где стэш помогает. -# -# Ответ: -# -# Спрятать изменения в моменте, когда нужно поработать над другой задачей. -# Спрятать изменения при конфликте, для дальнейшего резолва изменений с актуальной веткой -# -# 24. Где посмотреть что есть конфликт в файлах? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=969 -# В changes будет у строчки восклицательный знак в github desktop, нажимаем правой кнопкой где восклицательный знак и выбираем Open VS code -# -# 24.1) Когда он появляется? -# -# Ответ: -# -# Когда мы редактируем одинаковые файлы и получается у нас накладываются строчки из за этого возникает конфликт -# -# 25. Как решить конфликт в файлах? -# -# Ответ: -# -# Выбираем изменения которые нам нужны, убираем те что не нужны и нажимаем Resolve in merge -# -# 26. Напишите правильное утверждение -# -Зелёное то что пришло с гитхаба и синее локальные изменения или синее то что пришло с гитхаба и зелёное это локальные изменения -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=998 -# -# Зеленное, это то, что мы стянули из репозитория -# Синее наше локальные изменения -# -# 27. Если мы работаем в одном файле, можно ли принять pull после того как вы спрячете в стэш свои изменения? -# -# Ответ: -# -# Да, можно -# Если спрячем, то ничего не произойдет, изменения затянуться из github -# -# 27.1) Что может произойти когда stash восстановите после принятия pull? -# -# Ответ: -# -# Может произойти конфликт -# -# 28. Сколько способов решения конфликтов было показано в видео? Напишите ЧИСЛО и укажите их способы. -# -# Ответ: -# -# 2 способа: -# С помощью применения через акцепт и инкоминг -# Вручную убрав все лишнее. -# -# 29. Что делает кнопка complete merge? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=1062 -# Смерживает конечные изменения из конфликтов в один. -# -# 30. В какой чат нужно писать если остались вопросы? -# -# Ответ: -# -# HELP ME (bags&reports) -# https://t.me/c/1937296927/2415 -# -# 31. Что такое FORK? Зачем его делают? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=1146 -# Форк - это копия чужого репозитория оригинального репозитория в свое хранилище репозиториев. -# Делают для того, чтобы работать с оригинальной репой не изменяя исходного проекта, а помогать править баги, улучшать, или отдельно на основании этого проекта делать свое -# -# 32. Как скачать форкнутый репозиторий на локальный компьютер? -# -# Ответ: -# -# Через github desktop выбрав нужный в списке -# Консольная команде git clone название_репы -# -# 33. С какой вероятностью ваши ошибки были уже решены? и кто их решил? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=764 -# С вероятностью 90% -# Их решил: Сенаторов Руслан Олегович -# -# 34. Как создать файл в vs code? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=53 -# Нажимаем листочек с плюсиком и называем файл как нам нужно -# -# 35. # Файл лога нужно заполнять в конце каждого урока? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=70 -# Да, нужно -# -# Дополнительные вопросы: -# -# 1. Какая команда конвертирует файл в py из ipynb? -# подсказка https://t.me/c/1937296927/1/26527 -# -# Ответ: -# jupytext --to py filename.ipynb или через расширение VS Code (Jupytext) -# -# 2. Что такое пакетный менеджер? Вы пользуетесь пакетным менеджером conda или pip? Какой лучше использовать для дата сайнс? -# -# Ответ: -# -# Пакетный менеджер — инструмент для установки и управления библиотеками/пакетами. -# Для дата сайнс лучше использовать conda — он управляет не только Python-пакетами, но и зависимостями системы, библиотеками (NumPy, SciPy) с нативными расширениями. -# -# 3. Почему расширение py лучше чем ipynb? -# -# Ответ: -# -# - Удобнее для версионирования (Git лучше работает с текстом) -# - Линтеры (Pylint, Flake8) корректно работают только с .py -# - Проще ревью кода -# - Лучше для продакшн-кода и автоматизации -# -# 4. Что такое pep8? -# подсказка:https://peps.python.org/pep-0008/ -# -# Ответ: -# -# PEP 8 — официальный стиль кода Python. Рекомендации по форматированию, именованию, структуре для единообразия. -# -# 4.1) линтеры проверяют на соблюдение pep8? -# -# Ответ: -# -# Да. Flake8 и Pylint проверяют соответствие PEP 8 (стиль, именование, форматирование). -# -# 4.2) Какая нотация используется для создания переменных? -# ответ на 85-95 страницы https://t.me/c/1937296927/1/16676 -# -# Ответ: -# -# snake_case (нижний регистр, слова разделяются подчеркиванием), например: my_variable_name -# -# 4.3) Может ли переменная состоять из одной буквы например андерскор "\_" ? -# -# Ответ: -# Да. \_ — валидная переменная, часто используется как временная или неиспользуемая. -# -# 4.4) Зачем и где мы используем андерскор \_ -# -# Ответ: -# -# - _ — временная/неиспользуемая переменная (например, в unpacking: x, _, z = data) -# - Два \_\_ в начале — приватные атрибуты/методы -# - _ в конце — избежание конфликта с ключевыми словами (class_) -# -# 4.5) По PEP8 допустима переменная в одну букву? -# ответ на 85-95 страницы https://t.me/c/1937296927/1/16676 -# -# Ответ: -# -# Да, но не рекомендуется для обычных переменных. Допустимо в исключениях: циклы (for i in range(5), for x, y in points), малые области видимости. Лучше использовать понятные имена. -# diff --git a/quiz2.ipynb b/quiz2.ipynb deleted file mode 100644 index 76439762..00000000 --- a/quiz2.ipynb +++ /dev/null @@ -1,244 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "id": "9034c435", - "metadata": { - "vscode": { - "languageId": "plaintext" - } - }, - "outputs": [], - "source": [ - "\"\"\"Квиз 2.\"\"\"" - ] - }, - { - "cell_type": "markdown", - "id": "9b9ba45f", - "metadata": {}, - "source": [ - "Список вопросов к видео https://youtu.be/Si9MfV8uJ-0?si=JXHe-tsgOEwSTI5E (НАСТРОЙКА VSCODE, перенос строк, линтеры, работа с ячейками):\n", - "\n", - "(По желанию)В ответе подробно всё опишите и обязательно нужно указывать тайм код из видео где я это сказал, по желанию, дополнительно прикладываем скриншот из видео.\n", - "Если вы знаете ответы на вопросы из Вашего опыта, то таймкоды из видео не надо указывать и т.д.\n", - "\n", - "1. Как включить автосохранение данных в VSCODE?\n", - "\n", - "Ответ:\n", - "\n", - "https://youtu.be/Si9MfV8uJ-0?t=11\n", - "File - Auto Save\n", - "\n", - "2. Как настроить перенос строки?\n", - "\n", - "Ответ:\n", - "\n", - "https://youtu.be/Si9MfV8uJ-0?t=18\n", - "File - Preferences - Settings - 'wrap'\n", - "wordWrapColumn\n", - "\n", - "3. Сколько символов по pep8 разрешено на строке?\n", - "\n", - "Ответ:\n", - "\n", - "https://youtu.be/Si9MfV8uJ-0?t=21\n", - "79\n", - "\n", - "4. Какие способы переноса строк показаны в видео:\n", - "\n", - "4.1 Строки с использованием обратного слэша (\\)\n", - "\n", - "string_continued = \"This is a long string that we want to \" \\\n", - " \"split across multiple lines.\"\n", - "print(string_continued)\n", - "\n", - "4.2 Тройные кавычки (''' или \"\"\")\n", - "\n", - "multi_line_string = \"\"\"This is a string that spans\n", - "multiple lines. You can write freely\n", - "and it will keep the line breaks.\"\"\"\n", - "print(multi_line_string)\n", - "\n", - "4.3 Создание списка строк и объединение с помощью join\n", - "\n", - "strings = [\n", - "\"This is the first line.\",\n", - "\"This is the second line.\",\n", - "\"This is the third line.\"\n", - "]\n", - "result = \"\\n\".join(strings) # Используем перенос строк '\\n'\n", - "print(result)\n", - "\n", - "4.4 Использование круглых скобок для продолжения строки\n", - "long_string = (\n", - "\"This is a very long string that I would like to \"\n", - "\"continue on the next line.\"\n", - ")\n", - "print(long_string)\n", - "\n", - "4.5 Форматированные строки (f-строки) с использованием скобок\n", - "letter_a = 5\n", - "letter_b = 6\n", - "product_ab = letter_a \\* letter_b\n", - "\n", - "message = (\n", - "f\"when {letter_a} is multiplied by {letter_b}, \"\n", - "f\"the result is {product_ab}\"\n", - ")\n", - "print(message)\n", - "\n", - "4.6 Сложение строк с помощью +\n", - "\n", - "string_part1 = \"This is the first part, \"\n", - "string_part2 = \"and this is the second part.\"\n", - "full_string = string_part1 + string_part2\n", - "print(full_string)\n", - "\n", - "Ответ:\n", - "\n", - "4.6\n", - "\n", - "5. Проверка на ошибки c помощью кнопки problems, где она находится?\n", - "\n", - "Ответ:\n", - "\n", - "https://youtu.be/Si9MfV8uJ-0?t=286\n", - "В нижней части экрана, самая левая первая вкладка\n", - "\n", - "6. Где в vscode находится клиент гита? как в нём отправить коммит? как принять домашку?\n", - "\n", - "Ответ:\n", - "\n", - "https://youtu.be/Si9MfV8uJ-0?t=382\n", - "слева на панели Git Source Control\n", - "\n", - "7. Что такое GIT? он локальный? В нём можно посмотреть историю изменений файлов и вернуться к любому коммиту?\n", - "\n", - "Ответ:\n", - "\n", - "GIT - это система контроля версий.\n", - "Да, он поддерживает локальный режим работы, как и удаленный.\n", - "Да, можно посмотреть историю, вернуться и следить за репозиторием.\n", - "\n", - "8. Как вставить картинку в маркдаун?\n", - "\n", - "Ответ:\n", - "https://youtu.be/Si9MfV8uJ-0?t=476\n", - "Ctrl + C, Ctrl + V\n", - "\n", - "9. Где посмотреть длину строки в vs code?\n", - "\n", - "Ответ:\n", - "\n", - "Внизу IDE отображается количество символов в строке\n", - "\n", - "10. Как поменять тип ячейки с питона на маркдаун?\n", - "\n", - "Ответ:\n", - "\n", - "В правом нижнем углу на ячейке\n", - "\n", - "11. Как запустить сразу все ячейки в юпитере?\n", - "\n", - "Ответ:\n", - "\n", - "https://youtu.be/Si9MfV8uJ-0?t=508\n", - "Run All\n", - "\n", - "12. Как изменить размер картинки в юпитере? Нужно для этого знать HTML?\n", - "\n", - "Ответ:\n", - "\n", - "https://youtu.be/Si9MfV8uJ-0?t=495\n", - "тэг img. Да, для этого нужно понимать теги.\n", - "\n", - "13. Какой хоткей чтобы запустить ячейку с смещением на следующую?\n", - "\n", - "Ответ:\n", - "\n", - "https://youtu.be/Si9MfV8uJ-0?t=522\n", - "Shift + Enter\n", - "\n", - "14. Как включить отображение номеров строк в юпитере(Cell line numbers)?\n", - "\n", - "Ответ:\n", - "\n", - "https://youtu.be/Si9MfV8uJ-0?t=540\n", - "В верхнем всплывающем меню ячейки нажать Show Cell line numbers\n", - "\n", - "15. Что такое \"Go To\" чем это полезно? Как перейти сразу на ошибочную ячейку?\n", - "\n", - "Ответ:\n", - "\n", - "https://youtu.be/Si9MfV8uJ-0?t=568\n", - "Видим какая ячейка отвалилась после нажатия, каждое нажатие следующая ошибка\n", - "\n", - "16. Как очистить вывод ячеек которые уже запущены?\n", - "\n", - "Ответ:\n", - "\n", - "https://youtu.be/Si9MfV8uJ-0?t=641\n", - "Clear All outputs\n", - "\n", - "17. Как работать одновременно в нескольких файлах в VSCODE? Что такое SPLIT?\n", - "\n", - "Ответ:\n", - "\n", - "https://youtu.be/Si9MfV8uJ-0?t=656\n", - "Split Editor и экран разделяется на несколько рабочих областей\n", - "\n", - "18. Каким сочетанием убирается левый сайдбар?\n", - "\n", - "Ответ:\n", - "\n", - "Ctrl + B\n", - "\n", - "19. Кнопка два листочка это наши локальные файлы?\n", - "\n", - "Ответ:\n", - "\n", - "Да, это кнопка которая открывает локальный эксплорер с нашими файлами проекта, или папки где мы находимся в данный момент\n", - "\n", - "20. Какая ошибка появилась в трассировке при запуске всех ячеек DICT или LIST?\n", - "\n", - "Ответ:\n", - "\n", - "https://youtu.be/Si9MfV8uJ-0?t=563\n", - "DICT\n", - "\n", - "21. Вы ознакомились с https://t.me/c/1937296927/832/19307? и https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet?\n", - "\n", - "Ответ:\n", - "\n", - "Ознакомился\n", - "\n", - "22. Что такое валидация?\n", - "\n", - "Ответ:\n", - "\n", - "Валидация - это способ проверки данных на корректность по определенным правилам\n", - "\n", - "23. Что такое трассировка ошибки?\n", - "\n", - "Ответ:\n", - "\n", - "Трассировка ошибки - это информация от того момента где произошла ошибка, до момента начала её вызова.\n", - "\n", - "24. Что значит отвалился интерпретатор?\n", - "\n", - "Ответ:\n", - "\n", - "Значит то, что по тем или иным причинам интерпретатор не может выполнить код, может быть связано с отсутствием интерпретатора, или ошибками работы программы.\n" - ] - } - ], - "metadata": { - "language_info": { - "name": "python" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/quiz2.py b/quiz2.py deleted file mode 100644 index fd49a477..00000000 --- a/quiz2.py +++ /dev/null @@ -1,215 +0,0 @@ -"""Квиз 2.""" - -# Список вопросов к видео https://youtu.be/Si9MfV8uJ-0?si=JXHe-tsgOEwSTI5E (НАСТРОЙКА VSCODE, перенос строк, линтеры, работа с ячейками): -# -# (По желанию)В ответе подробно всё опишите и обязательно нужно указывать тайм код из видео где я это сказал, по желанию, дополнительно прикладываем скриншот из видео. -# Если вы знаете ответы на вопросы из Вашего опыта, то таймкоды из видео не надо указывать и т.д. -# -# 1. Как включить автосохранение данных в VSCODE? -# -# Ответ: -# -# https://youtu.be/Si9MfV8uJ-0?t=11 -# File - Auto Save -# -# 2. Как настроить перенос строки? -# -# Ответ: -# -# https://youtu.be/Si9MfV8uJ-0?t=18 -# File - Preferences - Settings - 'wrap' -# wordWrapColumn -# -# 3. Сколько символов по pep8 разрешено на строке? -# -# Ответ: -# -# https://youtu.be/Si9MfV8uJ-0?t=21 -# 79 -# -# 4. Какие способы переноса строк показаны в видео: -# -# 4.1 Строки с использованием обратного слэша (\) -# -# string_continued = "This is a long string that we want to " \ -# "split across multiple lines." -# print(string_continued) -# -# 4.2 Тройные кавычки (''' или """) -# -# multi_line_string = """This is a string that spans -# multiple lines. You can write freely -# and it will keep the line breaks.""" -# print(multi_line_string) -# -# 4.3 Создание списка строк и объединение с помощью join -# -# strings = [ -# "This is the first line.", -# "This is the second line.", -# "This is the third line." -# ] -# result = "\n".join(strings) # Используем перенос строк '\n' -# print(result) -# -# 4.4 Использование круглых скобок для продолжения строки -# long_string = ( -# "This is a very long string that I would like to " -# "continue on the next line." -# ) -# print(long_string) -# -# 4.5 Форматированные строки (f-строки) с использованием скобок -# letter_a = 5 -# letter_b = 6 -# product_ab = letter_a \* letter_b -# -# message = ( -# f"when {letter_a} is multiplied by {letter_b}, " -# f"the result is {product_ab}" -# ) -# print(message) -# -# 4.6 Сложение строк с помощью + -# -# string_part1 = "This is the first part, " -# string_part2 = "and this is the second part." -# full_string = string_part1 + string_part2 -# print(full_string) -# -# Ответ: -# -# 4.6 -# -# 5. Проверка на ошибки c помощью кнопки problems, где она находится? -# -# Ответ: -# -# https://youtu.be/Si9MfV8uJ-0?t=286 -# В нижней части экрана, самая левая первая вкладка -# -# 6. Где в vscode находится клиент гита? как в нём отправить коммит? как принять домашку? -# -# Ответ: -# -# https://youtu.be/Si9MfV8uJ-0?t=382 -# слева на панели Git Source Control -# -# 7. Что такое GIT? он локальный? В нём можно посмотреть историю изменений файлов и вернуться к любому коммиту? -# -# Ответ: -# -# GIT - это система контроля версий. -# Да, он поддерживает локальный режим работы, как и удаленный. -# Да, можно посмотреть историю, вернуться и следить за репозиторием. -# -# 8. Как вставить картинку в маркдаун? -# -# Ответ: -# https://youtu.be/Si9MfV8uJ-0?t=476 -# Ctrl + C, Ctrl + V -# -# 9. Где посмотреть длину строки в vs code? -# -# Ответ: -# -# Внизу IDE отображается количество символов в строке -# -# 10. Как поменять тип ячейки с питона на маркдаун? -# -# Ответ: -# -# В правом нижнем углу на ячейке -# -# 11. Как запустить сразу все ячейки в юпитере? -# -# Ответ: -# -# https://youtu.be/Si9MfV8uJ-0?t=508 -# Run All -# -# 12. Как изменить размер картинки в юпитере? Нужно для этого знать HTML? -# -# Ответ: -# -# https://youtu.be/Si9MfV8uJ-0?t=495 -# тэг img. Да, для этого нужно понимать теги. -# -# 13. Какой хоткей чтобы запустить ячейку с смещением на следующую? -# -# Ответ: -# -# https://youtu.be/Si9MfV8uJ-0?t=522 -# Shift + Enter -# -# 14. Как включить отображение номеров строк в юпитере(Cell line numbers)? -# -# Ответ: -# -# https://youtu.be/Si9MfV8uJ-0?t=540 -# В верхнем всплывающем меню ячейки нажать Show Cell line numbers -# -# 15. Что такое "Go To" чем это полезно? Как перейти сразу на ошибочную ячейку? -# -# Ответ: -# -# https://youtu.be/Si9MfV8uJ-0?t=568 -# Видим какая ячейка отвалилась после нажатия, каждое нажатие следующая ошибка -# -# 16. Как очистить вывод ячеек которые уже запущены? -# -# Ответ: -# -# https://youtu.be/Si9MfV8uJ-0?t=641 -# Clear All outputs -# -# 17. Как работать одновременно в нескольких файлах в VSCODE? Что такое SPLIT? -# -# Ответ: -# -# https://youtu.be/Si9MfV8uJ-0?t=656 -# Split Editor и экран разделяется на несколько рабочих областей -# -# 18. Каким сочетанием убирается левый сайдбар? -# -# Ответ: -# -# Ctrl + B -# -# 19. Кнопка два листочка это наши локальные файлы? -# -# Ответ: -# -# Да, это кнопка которая открывает локальный эксплорер с нашими файлами проекта, или папки где мы находимся в данный момент -# -# 20. Какая ошибка появилась в трассировке при запуске всех ячеек DICT или LIST? -# -# Ответ: -# -# https://youtu.be/Si9MfV8uJ-0?t=563 -# DICT -# -# 21. Вы ознакомились с https://t.me/c/1937296927/832/19307? и https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet? -# -# Ответ: -# -# Ознакомился -# -# 22. Что такое валидация? -# -# Ответ: -# -# Валидация - это способ проверки данных на корректность по определенным правилам -# -# 23. Что такое трассировка ошибки? -# -# Ответ: -# -# Трассировка ошибки - это информация от того момента где произошла ошибка, до момента начала её вызова. -# -# 24. Что значит отвалился интерпретатор? -# -# Ответ: -# -# Значит то, что по тем или иным причинам интерпретатор не может выполнить код, может быть связано с отсутствием интерпретатора, или ошибками работы программы. -# From 649a84716979991c3f45e2f5561de5658a84efab Mon Sep 17 00:00:00 2001 From: Pavel Demyanov Date: Wed, 7 Jan 2026 20:39:32 +0300 Subject: [PATCH 04/12] Revert "[TASK] Cpython #4 (https://github.com/SENATOROVAI/intro-cs/issues/4)" This reverts commit a4516aec3ac4f97e982023098e61fd23ed8425cb. --- log.ipynb | 8 +- log.py | 2 - python/cpython.ipynb | 304 ----------------------------- python/cpython.py | 246 ------------------------ quiz1.ipynb | 442 +++++++++++++++++++++++++++++++++++++++++++ quiz1.py | 413 ++++++++++++++++++++++++++++++++++++++++ quiz2.ipynb | 244 ++++++++++++++++++++++++ quiz2.py | 215 +++++++++++++++++++++ 8 files changed, 1317 insertions(+), 557 deletions(-) delete mode 100644 python/cpython.ipynb delete mode 100644 python/cpython.py create mode 100644 quiz1.ipynb create mode 100644 quiz1.py create mode 100644 quiz2.ipynb create mode 100644 quiz2.py diff --git a/log.ipynb b/log.ipynb index 8995bca3..2f96717d 100644 --- a/log.ipynb +++ b/log.ipynb @@ -42,15 +42,13 @@ "2. Пересмотрены по несколько раз видео:\n", " https://www.youtube.com/watch?v=Si9MfV8uJ-0\n", " https://www.youtube.com/watch?si=tCEVs00xGt2q61eW&v=hW_7hodGxVU&feature=youtu.be\n", - "3. Изучаю курс по пайтону шаг https://stepik.org/lesson/1711495/step/7?unit=1734919\n", - "4. https://github.com/SENATOROVAI/intro-cs/issues/6 - сделал пулл\n", - "5. https://github.com/SENATOROVAI/intro-cs/issues/4 - сделал пулл\n" + "3. Изучаю курс по пайтону шаг https://stepik.org/lesson/1711495/step/7?unit=1734919\n" ] } ], "metadata": { "kernelspec": { - "display_name": ".venv", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -64,7 +62,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.9" + "version": "3.10.11" } }, "nbformat": 4, diff --git a/log.py b/log.py index 4c13c157..3ff69502 100644 --- a/log.py +++ b/log.py @@ -12,6 +12,4 @@ # https://www.youtube.com/watch?v=Si9MfV8uJ-0 # https://www.youtube.com/watch?si=tCEVs00xGt2q61eW&v=hW_7hodGxVU&feature=youtu.be # 3. Изучаю курс по пайтону шаг https://stepik.org/lesson/1711495/step/7?unit=1734919 -# 4. https://github.com/SENATOROVAI/intro-cs/issues/6 - сделал пулл -# 5. https://github.com/SENATOROVAI/intro-cs/issues/4 - сделал пулл # diff --git a/python/cpython.ipynb b/python/cpython.ipynb deleted file mode 100644 index b7ae9d11..00000000 --- a/python/cpython.ipynb +++ /dev/null @@ -1,304 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "id": "61a1c252", - "metadata": { - "vscode": { - "languageId": "plaintext" - } - }, - "outputs": [], - "source": [ - "\"\"\"Квиз и практика по пайтон.\"\"\"" - ] - }, - { - "cell_type": "markdown", - "id": "987ba122", - "metadata": {}, - "source": [ - "1. Что такое CPython и чем он отличается от Python?\n", - "\n", - "Ответ:\n", - "\n", - "CPython — стандартная реализация Python на языке C. Это та версия, которую обычно скачивают с python.org.\n", - "\n", - "Разница:\n", - "Python — язык программирования (спецификация)\n", - "CPython — реализация этого языка на C\n", - "\n", - "\n", - "2. Сколько существует реализаций Python, и какая из них самая популярная?\n", - "\n", - "Ответ:\n", - "\n", - "6 реализаций \n", - "CPython - самая популярная\n", - "\n", - "\n", - "4. На каком языке написан CPython?\n", - "\n", - "Ответ:\n", - "\n", - "Язык С\n", - "\n", - "\n", - "5. (опционально) Кто создал CPython?\n", - "\n", - "Ответ:\n", - "\n", - "Гвидо ван Россум\n", - "\n", - "\n", - "6. Почему Python считается быстрым, несмотря на то, что это интерпретируемый язык?\n", - "\n", - "Ответ:\n", - "\n", - "Потому что он написан на C и вызывает инструкции из C\n", - "\n", - "\n", - "7. Напишите путь к Интерпретатору CPython на вашем компьютере\n", - "\n", - "Ответ:\n", - "\n", - "~/AppData/Local/Programs/Python/Python310/python.exe\n", - "\n", - "\n", - "8. Что содержится в папке include в CPython?\n", - "\n", - "Ответ:\n", - "\n", - "заголовочные файлы с расширением .h\n", - "\n", - "\n", - "9. Где можно найти исходный код CPython дайте ссылку на репозиторий гитхаб\n", - "\n", - "Ответ:\n", - "\n", - "https://github.com/python/cpython\n", - "\n", - "\n", - "10. (опционально) Как работает интерпретатор CPython при выполнении кода?\n", - "\n", - "Ответ:\n", - "\n", - "Парсинг — исходный код разбирается в AST (абстрактное синтаксическое дерево).\n", - "Компиляция в байт-код — AST компилируется в байт-код (.pyc), который хранится в папке __pycache__.\n", - "\n", - "Виртуальная машина (VM) — байт-код выполняется стековой виртуальной машиной:\n", - "Читает инструкции байт-кода\n", - "Выполняет их через C-функции\n", - "Управляет стеком вызовов, объектами в памяти, GIL\n", - "Выполнение — каждая инструкция байт-кода вызывает соответствующую C-функцию, которая выполняет операцию.\n", - "\n", - "\n", - "11. Какая команда используется для запуска файла с помощью CPython?\n", - "\n", - "Ответ:\n", - "\n", - "python filename\n", - "\n", - "12. Можно ли запускать текстовые файлы через интерпретатор Python? Почему?\n", - "\n", - "Ответ:\n", - "\n", - "Да, можно\n", - "Интерпретатору без разницы какой формат файла, главное, чтобы был валидный пайтон код\n", - "\n", - "13. Как указать путь к интерпретатору и файлу для выполнения кода?\n", - "\n", - "Ответ:\n", - "\n", - "Через Абсолютный или относительный путь, или если есть алиас в переменных средах, то через него\n", - "\n", - "14. Чем PyPy отличается от CPython?\n", - "\n", - "Ответ:\n", - "\n", - "PyPy — альтернативная реализация Python с JIT-компиляцией, быстрее CPython для многих задач, но с ограничениями по совместимости с C-расширениями\n", - "\n", - "15. Почему PyPy не может использоваться для всех проектов на Python?\n", - "\n", - "Ответ:\n", - "\n", - "Не совместим со всеми проектами на Python\n", - "\n", - "\n", - "16. Где можно скачать PyPy?\n", - "\n", - "Ответ:\n", - "\n", - "https://pypy.org/download.html\n", - "\n", - "\n", - "17. Как установить PyPy после скачивания?\n", - "\n", - "Ответ:\n", - "\n", - "Распаковать в нужную папку и прописать пути в переменных средах\n", - "\n", - "18. Как запустить файл с помощью PyPy?\n", - "\n", - "Ответ:\n", - "\n", - "pypy filename\n", - "Или абсолютный путь до интерпретатора:\n", - "~/pypy/pypy.exe filename\n", - "\n", - "19. Почему PyPy выполняет код быстрее, чем CPython?\n", - "\n", - "Ответ:\n", - "\n", - "PyPy быстрее за счёт JIT-компиляции часто используемого кода в машинный код, что устраняет интерпретацию байт-кода." - ] - }, - { - "cell_type": "markdown", - "id": "136daecf", - "metadata": {}, - "source": [ - "Задание 1: Поиск и установка CPython\n", - "\n", - "Проверьте, установлен ли CPython на вашем компьютере:\n", - " Используйте поиск в меню \"Пуск\" (Windows) или терминале (Linux/Mac).\n", - " Введите команду python --version или python3 --version в терминале.\n", - "Если CPython не установлен, скачайте его с официального сайта Python https://www.python.org/downloads/ и установите.\n", - "\n", - "\n", - "Решение:\n", - "\n", - "\n", - "C:\\Users\\demya>where python\n", - "C:\\Users\\demya\\anaconda3\\python.exe\n", - "C:\\Users\\demya\\AppData\\Local\\Programs\\Python\\Python310\\python.exe\n", - "C:\\Users\\demya\\AppData\\Local\\Programs\\Python\\Python311\\python.exe\n", - "C:\\ProgramData\\miniconda3\\python.exe\n", - "C:\\Users\\demya\\AppData\\Local\\Microsoft\\WindowsApps\\python.exe\n", - "C:\\Users\\demya\\pypy\\python.exe\n", - "\n", - "\n", - "C:\\Users\\demya>python --version\n", - "Python 3.13.9" - ] - }, - { - "cell_type": "markdown", - "id": "b6412bf5", - "metadata": {}, - "source": [ - "Задание 2: Исследование структуры CPython\n", - "\n", - "Найдите папку, где установлен Python (например, через команду which python в терминале или свойства ярлыка).\n", - "Откройте папку include и изучите её содержимое. Какое количество файлов на C там есть?\n", - "Перейдите на [GitHub-репозиторий CPython](https://github.com/python/cpython) и найдите файл README. Прочитайте информацию о проекте.\n", - "\n", - "Решение:\n", - "\n", - "C:\\Users\\demya\\anaconda3\\include\n", - "79 файлов\n" - ] - }, - { - "cell_type": "markdown", - "id": "40744f44", - "metadata": {}, - "source": [ - "Задание 3: Запуск файла с помощью CPython\n", - "\n", - "Создайте текстовый файл example.txt с содержимым:\n", - "\n", - "print(\"Hello from CPython!\")\n", - "\n", - "Запустите файл через команду python <путь_до_файла> (замените <путь_до_файла> на фактический путь к вашему файлу).\n", - "Проверьте, что выводится на экран. Попробуйте изменить расширение файла на .py и повторите запуск.\n", - "\n", - "\n", - "Решение:\n", - "\n", - "C:\\Users\\demya>echo print(\"Hello from CPython!\") > example.txt\n", - "\n", - "C:\\Users\\demya>python example.txt\n", - "Hello from CPython!\n", - "\n", - "C:\\Users\\demya>move example.txt example.py\n", - " 1 file(s) moved.\n", - "\n", - "C:\\Users\\demya>python example.py\n", - "Hello from CPython!\n" - ] - }, - { - "cell_type": "markdown", - "id": "52008d7a", - "metadata": {}, - "source": [ - "Задание 4: Установка и использование PyPy\n", - "\n", - "Перейдите на [официальный сайт PyPy](https://www.pypy.org/) и скачайте подходящую версию для вашей операционной системы.\n", - "Распакуйте скачанный архив в удобное место.\n", - "Создайте файл example_pypy.py с кодом:\n", - "\n", - "print(\"Hello from pypy!\")\n", - "\n", - "Запустите файл через PyPy\n", - "pypy <путь_до_файла> (замените <путь_до_файла> на фактический путь к вашему файлу).\n", - "Проверьте, что выводится на экран. Попробуйте изменить расширение файла на .py и повторите запуск.\n", - "\n", - "Решение:\n", - "\n", - "C:\\Users\\demya>echo print(\"Hello from pypy!\") > example_pypy.py\n", - "\n", - "C:\\Users\\demya>pypy example_pypy.py\n", - "Hello from pypy!" - ] - }, - { - "cell_type": "markdown", - "id": "9e33b1cf", - "metadata": {}, - "source": [ - "Задание 5: Сравнение производительности CPython и PyPy\n", - "\n", - "Создайте файл performance_test.py с кодом:\n", - "\n", - " import time\n", - " start_time = time.time()\n", - " total = 0\n", - " for i in range(1, 10000000):\n", - " total += i\n", - " end_time = time.time()\n", - " \n", - " print(\"Result:\", total)\n", - " print(\"Execution time:\", end_time - start_time, \"seconds\")\n", - "\n", - "Запустите этот файл сначала через CPython, а затем через PyPy. Запишите результаты времени выполнения для обоих интерпретаторов.\n", - "\n", - "Сделайте вывод о разнице в производительности.\n", - "\n", - "Решение:\n", - "\n", - "CPython:\n", - "\n", - "C:\\Users\\demya>python performance_test.py\n", - "Result: 49999995000000\n", - "Execution time: 0.7137529850006104 seconds\n", - "\n", - "\n", - "Pypy:\n", - "\n", - "C:\\Users\\demya>pypy performance_test.py\n", - "Result: 49999995000000\n", - "Execution time: 0.023383617401123047 seconds" - ] - } - ], - "metadata": { - "language_info": { - "name": "python" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/python/cpython.py b/python/cpython.py deleted file mode 100644 index d30a4ef7..00000000 --- a/python/cpython.py +++ /dev/null @@ -1,246 +0,0 @@ -"""Квиз и практика по пайтон.""" - -# 1. Что такое CPython и чем он отличается от Python? -# -# Ответ: -# -# CPython — стандартная реализация Python на языке C. Это та версия, которую обычно скачивают с python.org. -# -# Разница: -# Python — язык программирования (спецификация) -# CPython — реализация этого языка на C -# -# -# 2. Сколько существует реализаций Python, и какая из них самая популярная? -# -# Ответ: -# -# 6 реализаций -# CPython - самая популярная -# -# -# 4. На каком языке написан CPython? -# -# Ответ: -# -# Язык С -# -# -# 5. (опционально) Кто создал CPython? -# -# Ответ: -# -# Гвидо ван Россум -# -# -# 6. Почему Python считается быстрым, несмотря на то, что это интерпретируемый язык? -# -# Ответ: -# -# Потому что он написан на C и вызывает инструкции из C -# -# -# 7. Напишите путь к Интерпретатору CPython на вашем компьютере -# -# Ответ: -# -# ~/AppData/Local/Programs/Python/Python310/python.exe -# -# -# 8. Что содержится в папке include в CPython? -# -# Ответ: -# -# заголовочные файлы с расширением .h -# -# -# 9. Где можно найти исходный код CPython дайте ссылку на репозиторий гитхаб -# -# Ответ: -# -# https://github.com/python/cpython -# -# -# 10. (опционально) Как работает интерпретатор CPython при выполнении кода? -# -# Ответ: -# -# Парсинг — исходный код разбирается в AST (абстрактное синтаксическое дерево). -# Компиляция в байт-код — AST компилируется в байт-код (.pyc), который хранится в папке __pycache__. -# -# Виртуальная машина (VM) — байт-код выполняется стековой виртуальной машиной: -# Читает инструкции байт-кода -# Выполняет их через C-функции -# Управляет стеком вызовов, объектами в памяти, GIL -# Выполнение — каждая инструкция байт-кода вызывает соответствующую C-функцию, которая выполняет операцию. -# -# -# 11. Какая команда используется для запуска файла с помощью CPython? -# -# Ответ: -# -# python filename -# -# 12. Можно ли запускать текстовые файлы через интерпретатор Python? Почему? -# -# Ответ: -# -# Да, можно -# Интерпретатору без разницы какой формат файла, главное, чтобы был валидный пайтон код -# -# 13. Как указать путь к интерпретатору и файлу для выполнения кода? -# -# Ответ: -# -# Через Абсолютный или относительный путь, или если есть алиас в переменных средах, то через него -# -# 14. Чем PyPy отличается от CPython? -# -# Ответ: -# -# PyPy — альтернативная реализация Python с JIT-компиляцией, быстрее CPython для многих задач, но с ограничениями по совместимости с C-расширениями -# -# 15. Почему PyPy не может использоваться для всех проектов на Python? -# -# Ответ: -# -# Не совместим со всеми проектами на Python -# -# -# 16. Где можно скачать PyPy? -# -# Ответ: -# -# https://pypy.org/download.html -# -# -# 17. Как установить PyPy после скачивания? -# -# Ответ: -# -# Распаковать в нужную папку и прописать пути в переменных средах -# -# 18. Как запустить файл с помощью PyPy? -# -# Ответ: -# -# pypy filename -# Или абсолютный путь до интерпретатора: -# ~/pypy/pypy.exe filename -# -# 19. Почему PyPy выполняет код быстрее, чем CPython? -# -# Ответ: -# -# PyPy быстрее за счёт JIT-компиляции часто используемого кода в машинный код, что устраняет интерпретацию байт-кода. - -# Задание 1: Поиск и установка CPython -# -# Проверьте, установлен ли CPython на вашем компьютере: -# Используйте поиск в меню "Пуск" (Windows) или терминале (Linux/Mac). -# Введите команду python --version или python3 --version в терминале. -# Если CPython не установлен, скачайте его с официального сайта Python https://www.python.org/downloads/ и установите. -# -# -# Решение: -# -# -# C:\Users\demya>where python -# C:\Users\demya\anaconda3\python.exe -# C:\Users\demya\AppData\Local\Programs\Python\Python310\python.exe -# C:\Users\demya\AppData\Local\Programs\Python\Python311\python.exe -# C:\ProgramData\miniconda3\python.exe -# C:\Users\demya\AppData\Local\Microsoft\WindowsApps\python.exe -# C:\Users\demya\pypy\python.exe -# -# -# C:\Users\demya>python --version -# Python 3.13.9 - -# Задание 2: Исследование структуры CPython -# -# Найдите папку, где установлен Python (например, через команду which python в терминале или свойства ярлыка). -# Откройте папку include и изучите её содержимое. Какое количество файлов на C там есть? -# Перейдите на [GitHub-репозиторий CPython](https://github.com/python/cpython) и найдите файл README. Прочитайте информацию о проекте. -# -# Решение: -# -# C:\Users\demya\anaconda3\include -# 79 файлов -# - -# Задание 3: Запуск файла с помощью CPython -# -# Создайте текстовый файл example.txt с содержимым: -# -# print("Hello from CPython!") -# -# Запустите файл через команду python <путь_до_файла> (замените <путь_до_файла> на фактический путь к вашему файлу). -# Проверьте, что выводится на экран. Попробуйте изменить расширение файла на .py и повторите запуск. -# -# -# Решение: -# -# C:\Users\demya>echo print("Hello from CPython!") > example.txt -# -# C:\Users\demya>python example.txt -# Hello from CPython! -# -# C:\Users\demya>move example.txt example.py -# 1 file(s) moved. -# -# C:\Users\demya>python example.py -# Hello from CPython! -# - -# Задание 4: Установка и использование PyPy -# -# Перейдите на [официальный сайт PyPy](https://www.pypy.org/) и скачайте подходящую версию для вашей операционной системы. -# Распакуйте скачанный архив в удобное место. -# Создайте файл example_pypy.py с кодом: -# -# print("Hello from pypy!") -# -# Запустите файл через PyPy -# pypy <путь_до_файла> (замените <путь_до_файла> на фактический путь к вашему файлу). -# Проверьте, что выводится на экран. Попробуйте изменить расширение файла на .py и повторите запуск. -# -# Решение: -# -# C:\Users\demya>echo print("Hello from pypy!") > example_pypy.py -# -# C:\Users\demya>pypy example_pypy.py -# Hello from pypy! - -# Задание 5: Сравнение производительности CPython и PyPy -# -# Создайте файл performance_test.py с кодом: -# -# import time -# start_time = time.time() -# total = 0 -# for i in range(1, 10000000): -# total += i -# end_time = time.time() -# -# print("Result:", total) -# print("Execution time:", end_time - start_time, "seconds") -# -# Запустите этот файл сначала через CPython, а затем через PyPy. Запишите результаты времени выполнения для обоих интерпретаторов. -# -# Сделайте вывод о разнице в производительности. -# -# Решение: -# -# CPython: -# -# C:\Users\demya>python performance_test.py -# Result: 49999995000000 -# Execution time: 0.7137529850006104 seconds -# -# -# Pypy: -# -# C:\Users\demya>pypy performance_test.py -# Result: 49999995000000 -# Execution time: 0.023383617401123047 seconds diff --git a/quiz1.ipynb b/quiz1.ipynb new file mode 100644 index 00000000..475de3b8 --- /dev/null +++ b/quiz1.ipynb @@ -0,0 +1,442 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "9084810c", + "metadata": { + "vscode": { + "languageId": "plaintext" + } + }, + "outputs": [], + "source": [ + "\"\"\"Квиз 1.\"\"\"" + ] + }, + { + "cell_type": "markdown", + "id": "b8bb4b09", + "metadata": {}, + "source": [ + "Список вопросов к видео https://youtu.be/hW_7hodGxVU?si=tCEVs00xGt2q61eW (АЛГОРИТМ ПРИНЯТИЯ И ОТДАЧИ ДОМАШКИ):\n", + "\n", + "(По желанию )В ответе подробно всё опишите и обязательно нужно указывать тайм код из видео где я это сказал, по желанию, дополнительно прикладываем скриншот из видео.\n", + "Если вы знаете ответы на вопросы из Вашего опыта, то таймкоды из видео не надо указывать и т.д.\n", + "\n", + "1. Как понять, что домашка пришла?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=8\n", + " Заходим в чатик HomeWork видим ник и прими пул\n", + "\n", + "2. Как принять домашку?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=17\n", + " Заходим в гитхаб десктоп нажимаем fetch origin.\n", + "\n", + "3. Зачем нужна кнопка history и какие функции появляются при нажатии правой кнопки мыши на коммит?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=29\n", + "\n", + " В хистори мы видим, что произошло с нашим репозиторием\n", + "\n", + "3.1) Где брать ссылку на коммит? куда её отправлять?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=229\n", + "\n", + " Нажимаем в хистори View on Github и перемещаемся в гитхаб там будет в адресной строке ссылка на коммит\n", + " Отправляем её в чат HomeWork с припиской коммит отдал ссылка*на*коммит.\n", + "\n", + "4. Что такое файл лога?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=70\n", + " Файл лога - это файл содержащий информацию о том, что мы делали за все уроки по датам.\n", + "\n", + "4.1) Когда нужно его пушить?\n", + "\n", + "Ответ:\n", + "\n", + "https://youtu.be/hW_7hodGxVU?t=70\n", + "Когда заканчиваем урок\n", + "\n", + "5. Что такое интерпретатор?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=169\n", + " Программа которая читает и запускает наш код\n", + "\n", + "6. Где можно выбрать интерпретатор?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=163\n", + " Нажимаем слева запуск кода или сверху в правом углу выбираем нужный нам интерпретатор\n", + "\n", + "7. Что такое модуль?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=526\n", + " Модуль это обычный файлик с расширение .py или .ipynb\n", + "\n", + "8. Как создать и отправить коммит?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=193\n", + " Заходим в гитхаб отмечаем нужные изменения, пишем название коммит и нажимаем кнопку коммит\n", + "\n", + "9. Как посмотреть что коммит точно отправлен и находится в github?\n", + "\n", + " Ответ:\n", + "\n", + " В хистори будет видно, да и view on github даст ссылку на коммит\n", + "\n", + "10. Какая команда показывает что код не прошёл проверки на ошибки?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=363\n", + " pre-commit run --all-files\n", + "\n", + "10.1) Напишите список линтеров которые используются для проверки кода и дайте их краткую характеристику.\n", + "\n", + " Ответ:\n", + "\n", + " Flake8 — базовая проверка стиля\n", + " Mypy — проверка типов\n", + " Pylint — дополнительный анализ (по необходимости)\n", + " Pydocstyle — проверка документации (по необходимости)\n", + "\n", + "11. Как узнать какой именно линтер не прошёл проверку?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=370\n", + " В консоле после запуска линтеров будет статус выполнения и по статусу можно определить успешность по каждому линтеру.\n", + "\n", + "12. Линтер Pylint видит markdown?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=425\n", + " Нет\n", + "\n", + "13. Номер ячейки в терминале и номер ячейки в vs code может отличаться? в каком случае?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=437\n", + " Да, может отличаться, в случае если есть ячейки с маркдовн, из за того, что линтер их не видит, он их не учитывает, поэтому количество может быть разным\n", + "\n", + "14. Где посмотреть номер ячейки в vscode?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=455\n", + " можем посмотреть внизу справа\n", + "\n", + "15. В каком формате ipynb отправляется в гитхаб? причём здесь JSON?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=204\n", + " В формате JSON, приложение github desktop отображает файлы формата ipynb в формате json\n", + "\n", + "16. Где посмотреть в какой ячейке ошибка?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=462\n", + " Можем посмотреть по коду ошибки, где не так или нажать Ctrl + F и найти где ошибка\n", + "\n", + "17. Как запустить терминал?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=353\n", + " Меню терминал - новый терминал\n", + "\n", + "18. Что такое линтер?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=375\n", + " Линтер это программа которая проверяет на корректность стандартам\n", + "\n", + "19. В какой сайт нужно вставлять код ошибки если ошибка связана с pylint?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=495\n", + " На сайте пайлинта https://pylint.readthedocs.io/\n", + "\n", + "20. Секция pydocstyle в большинстве случае автоматический закрывается после исправления ошибок в каком линтере?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=587\n", + " После исправления ошибок в линтере pylint\n", + "\n", + "21. Что такое описание модуля? Оно должно отражать информацию о том что находится в модуле?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=563\n", + " Описание модуля это какая информация у нас в модуле. Да, оно должно отображать информацию о модуле.\n", + "\n", + " 21.1) С какой git команды начинается утро программиста?\n", + "\n", + " Ответ:\n", + "\n", + " fetch origin\n", + "\n", + "22. После внесения изменений в файлах, кнопка open in vs code пропадает в кошке, как по другому открыть vs code из кошки?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=855\n", + " Чтобы попасть из github desktop в vs code, нужно нажать на Current repository и выбрать Open VS code\n", + "\n", + "23. Что такое stash? Общее объяснение концепции.\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=921\n", + " stash - буффер обмена и локальные изменения \"прячутся\"\n", + " Концепция, нужна если мы что-то делали, но нам нужно резко, что-то делать другое, не коммитя изменения в репозиторий, мы можем сохранить в буффер обмена, для дальнейшего использования, пряча новые изменения.\n", + "\n", + " 23.1) Как сохранить стэш?\n", + "\n", + " Ответ:\n", + "\n", + " git командa(подсказка: https://t.me/c/1937296927/3602/19531):\n", + " git stash save \"NAME_STASH\" - сохранение в буффер обмена\n", + " git stash apply \"NUMBER_STASH\" - извлечения из буффера обмена\n", + "\n", + "Кнопка в vs code: Stash changes and continue\n", + "\n", + "23.2) Как восстановить стэш(подсказка: https://t.me/c/1937296927/3602/25747)?:\n", + "\n", + " git команда(подсказка: https://t.me/c/1937296927/3602/19531)?:\n", + "\n", + " Ответ:\n", + "\n", + " git stash apply \"NUMBER_STASH\"\n", + "\n", + "23.3) Различие между стэшем и коммитом.\n", + "\n", + " Ответ:\n", + "\n", + " Когда лучше сохранить изменения в стэше, а когда коммитить.\n", + " Коммитить когда мы четко понимаем, что закончили с какой-то итерацией и можем выложить в ветку. Стешить, когда нам нужно быстро переключиться, с еще не доделанной работы, чтобы отдельно не плодить коммитов, с еще пока не готовым функционалом\n", + "\n", + "23.4) Как просмотреть список сохраненных стэшей? \n", + " git команда (подсказка: https://t.me/c/1937296927/3602/19531):\n", + "\n", + " Ответ:\n", + "\n", + " git stash list\n", + "\n", + "23.5) Как удалить стэш? \n", + " Команды для удаления отдельных стэшей или всех сразу.\n", + "git команда (подсказка: https://t.me/c/1937296927/3602/19531):\n", + "\n", + " Ответ:\n", + "\n", + " git stash drop\n", + " git stash clear\n", + "\n", + "23.6) Практические примеры использования стэша. Краткие сценарии, где стэш помогает.\n", + "\n", + " Ответ:\n", + "\n", + " Спрятать изменения в моменте, когда нужно поработать над другой задачей.\n", + " Спрятать изменения при конфликте, для дальнейшего резолва изменений с актуальной веткой\n", + "\n", + "24. Где посмотреть что есть конфликт в файлах?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=969\n", + " В changes будет у строчки восклицательный знак в github desktop, нажимаем правой кнопкой где восклицательный знак и выбираем Open VS code\n", + "\n", + " 24.1) Когда он появляется?\n", + "\n", + " Ответ:\n", + "\n", + " Когда мы редактируем одинаковые файлы и получается у нас накладываются строчки из за этого возникает конфликт\n", + "\n", + "25. Как решить конфликт в файлах?\n", + "\n", + " Ответ:\n", + "\n", + " Выбираем изменения которые нам нужны, убираем те что не нужны и нажимаем Resolve in merge\n", + "\n", + "26. Напишите правильное утверждение\n", + " -Зелёное то что пришло с гитхаба и синее локальные изменения или синее то что пришло с гитхаба и зелёное это локальные изменения\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=998\n", + "\n", + " Зеленное, это то, что мы стянули из репозитория\n", + " Синее наше локальные изменения\n", + "\n", + "27. Если мы работаем в одном файле, можно ли принять pull после того как вы спрячете в стэш свои изменения?\n", + "\n", + " Ответ:\n", + "\n", + " Да, можно\n", + " Если спрячем, то ничего не произойдет, изменения затянуться из github\n", + "\n", + " 27.1) Что может произойти когда stash восстановите после принятия pull?\n", + "\n", + " Ответ:\n", + "\n", + " Может произойти конфликт\n", + "\n", + "28. Сколько способов решения конфликтов было показано в видео? Напишите ЧИСЛО и укажите их способы.\n", + "\n", + " Ответ:\n", + "\n", + " 2 способа:\n", + " С помощью применения через акцепт и инкоминг\n", + " Вручную убрав все лишнее.\n", + "\n", + "29. Что делает кнопка complete merge?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=1062\n", + " Смерживает конечные изменения из конфликтов в один.\n", + "\n", + "30. В какой чат нужно писать если остались вопросы?\n", + "\n", + " Ответ:\n", + "\n", + " HELP ME (bags&reports)\n", + " https://t.me/c/1937296927/2415\n", + "\n", + "31. Что такое FORK? Зачем его делают?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=1146\n", + " Форк - это копия чужого репозитория оригинального репозитория в свое хранилище репозиториев.\n", + " Делают для того, чтобы работать с оригинальной репой не изменяя исходного проекта, а помогать править баги, улучшать, или отдельно на основании этого проекта делать свое\n", + "\n", + "32. Как скачать форкнутый репозиторий на локальный компьютер?\n", + "\n", + " Ответ:\n", + "\n", + " Через github desktop выбрав нужный в списке\n", + " Консольная команде git clone название_репы\n", + "\n", + "33. С какой вероятностью ваши ошибки были уже решены? и кто их решил?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=764\n", + " С вероятностью 90%\n", + " Их решил: Сенаторов Руслан Олегович\n", + "\n", + "34. Как создать файл в vs code?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=53\n", + " Нажимаем листочек с плюсиком и называем файл как нам нужно\n", + "\n", + "35. # Файл лога нужно заполнять в конце каждого урока?\n", + "\n", + " Ответ:\n", + "\n", + " https://youtu.be/hW_7hodGxVU?t=70\n", + " Да, нужно\n", + "\n", + "Дополнительные вопросы:\n", + "\n", + "1. Какая команда конвертирует файл в py из ipynb?\n", + " подсказка https://t.me/c/1937296927/1/26527\n", + "\n", + "Ответ:\n", + "jupytext --to py filename.ipynb или через расширение VS Code (Jupytext)\n", + "\n", + "2. Что такое пакетный менеджер? Вы пользуетесь пакетным менеджером conda или pip? Какой лучше использовать для дата сайнс?\n", + "\n", + "Ответ:\n", + "\n", + "Пакетный менеджер — инструмент для установки и управления библиотеками/пакетами.\n", + "Для дата сайнс лучше использовать conda — он управляет не только Python-пакетами, но и зависимостями системы, библиотеками (NumPy, SciPy) с нативными расширениями.\n", + "\n", + "3. Почему расширение py лучше чем ipynb?\n", + "\n", + "Ответ:\n", + "\n", + "- Удобнее для версионирования (Git лучше работает с текстом)\n", + "- Линтеры (Pylint, Flake8) корректно работают только с .py\n", + "- Проще ревью кода\n", + "- Лучше для продакшн-кода и автоматизации\n", + "\n", + "4. Что такое pep8?\n", + " подсказка:https://peps.python.org/pep-0008/\n", + "\n", + "Ответ:\n", + "\n", + "PEP 8 — официальный стиль кода Python. Рекомендации по форматированию, именованию, структуре для единообразия.\n", + "\n", + "4.1) линтеры проверяют на соблюдение pep8?\n", + "\n", + "Ответ:\n", + "\n", + "Да. Flake8 и Pylint проверяют соответствие PEP 8 (стиль, именование, форматирование).\n", + "\n", + "4.2) Какая нотация используется для создания переменных?\n", + "ответ на 85-95 страницы https://t.me/c/1937296927/1/16676\n", + "\n", + "Ответ:\n", + "\n", + "snake_case (нижний регистр, слова разделяются подчеркиванием), например: my_variable_name\n", + "\n", + "4.3) Может ли переменная состоять из одной буквы например андерскор \"\\_\" ?\n", + "\n", + "Ответ:\n", + "Да. \\_ — валидная переменная, часто используется как временная или неиспользуемая.\n", + "\n", + "4.4) Зачем и где мы используем андерскор \\_\n", + "\n", + "Ответ:\n", + "\n", + "- _ — временная/неиспользуемая переменная (например, в unpacking: x, _, z = data)\n", + "- Два \\_\\_ в начале — приватные атрибуты/методы\n", + "- _ в конце — избежание конфликта с ключевыми словами (class_)\n", + "\n", + " 4.5) По PEP8 допустима переменная в одну букву?\n", + " ответ на 85-95 страницы https://t.me/c/1937296927/1/16676\n", + "\n", + "Ответ:\n", + "\n", + "Да, но не рекомендуется для обычных переменных. Допустимо в исключениях: циклы (for i in range(5), for x, y in points), малые области видимости. Лучше использовать понятные имена.\n" + ] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/quiz1.py b/quiz1.py new file mode 100644 index 00000000..8cf4aa29 --- /dev/null +++ b/quiz1.py @@ -0,0 +1,413 @@ +"""Квиз 1.""" + +# Список вопросов к видео https://youtu.be/hW_7hodGxVU?si=tCEVs00xGt2q61eW (АЛГОРИТМ ПРИНЯТИЯ И ОТДАЧИ ДОМАШКИ): +# +# (По желанию )В ответе подробно всё опишите и обязательно нужно указывать тайм код из видео где я это сказал, по желанию, дополнительно прикладываем скриншот из видео. +# Если вы знаете ответы на вопросы из Вашего опыта, то таймкоды из видео не надо указывать и т.д. +# +# 1. Как понять, что домашка пришла? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=8 +# Заходим в чатик HomeWork видим ник и прими пул +# +# 2. Как принять домашку? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=17 +# Заходим в гитхаб десктоп нажимаем fetch origin. +# +# 3. Зачем нужна кнопка history и какие функции появляются при нажатии правой кнопки мыши на коммит? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=29 +# +# В хистори мы видим, что произошло с нашим репозиторием +# +# 3.1) Где брать ссылку на коммит? куда её отправлять? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=229 +# +# Нажимаем в хистори View on Github и перемещаемся в гитхаб там будет в адресной строке ссылка на коммит +# Отправляем её в чат HomeWork с припиской коммит отдал ссылка*на*коммит. +# +# 4. Что такое файл лога? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=70 +# Файл лога - это файл содержащий информацию о том, что мы делали за все уроки по датам. +# +# 4.1) Когда нужно его пушить? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=70 +# Когда заканчиваем урок +# +# 5. Что такое интерпретатор? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=169 +# Программа которая читает и запускает наш код +# +# 6. Где можно выбрать интерпретатор? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=163 +# Нажимаем слева запуск кода или сверху в правом углу выбираем нужный нам интерпретатор +# +# 7. Что такое модуль? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=526 +# Модуль это обычный файлик с расширение .py или .ipynb +# +# 8. Как создать и отправить коммит? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=193 +# Заходим в гитхаб отмечаем нужные изменения, пишем название коммит и нажимаем кнопку коммит +# +# 9. Как посмотреть что коммит точно отправлен и находится в github? +# +# Ответ: +# +# В хистори будет видно, да и view on github даст ссылку на коммит +# +# 10. Какая команда показывает что код не прошёл проверки на ошибки? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=363 +# pre-commit run --all-files +# +# 10.1) Напишите список линтеров которые используются для проверки кода и дайте их краткую характеристику. +# +# Ответ: +# +# Flake8 — базовая проверка стиля +# Mypy — проверка типов +# Pylint — дополнительный анализ (по необходимости) +# Pydocstyle — проверка документации (по необходимости) +# +# 11. Как узнать какой именно линтер не прошёл проверку? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=370 +# В консоле после запуска линтеров будет статус выполнения и по статусу можно определить успешность по каждому линтеру. +# +# 12. Линтер Pylint видит markdown? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=425 +# Нет +# +# 13. Номер ячейки в терминале и номер ячейки в vs code может отличаться? в каком случае? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=437 +# Да, может отличаться, в случае если есть ячейки с маркдовн, из за того, что линтер их не видит, он их не учитывает, поэтому количество может быть разным +# +# 14. Где посмотреть номер ячейки в vscode? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=455 +# можем посмотреть внизу справа +# +# 15. В каком формате ipynb отправляется в гитхаб? причём здесь JSON? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=204 +# В формате JSON, приложение github desktop отображает файлы формата ipynb в формате json +# +# 16. Где посмотреть в какой ячейке ошибка? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=462 +# Можем посмотреть по коду ошибки, где не так или нажать Ctrl + F и найти где ошибка +# +# 17. Как запустить терминал? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=353 +# Меню терминал - новый терминал +# +# 18. Что такое линтер? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=375 +# Линтер это программа которая проверяет на корректность стандартам +# +# 19. В какой сайт нужно вставлять код ошибки если ошибка связана с pylint? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=495 +# На сайте пайлинта https://pylint.readthedocs.io/ +# +# 20. Секция pydocstyle в большинстве случае автоматический закрывается после исправления ошибок в каком линтере? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=587 +# После исправления ошибок в линтере pylint +# +# 21. Что такое описание модуля? Оно должно отражать информацию о том что находится в модуле? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=563 +# Описание модуля это какая информация у нас в модуле. Да, оно должно отображать информацию о модуле. +# +# 21.1) С какой git команды начинается утро программиста? +# +# Ответ: +# +# fetch origin +# +# 22. После внесения изменений в файлах, кнопка open in vs code пропадает в кошке, как по другому открыть vs code из кошки? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=855 +# Чтобы попасть из github desktop в vs code, нужно нажать на Current repository и выбрать Open VS code +# +# 23. Что такое stash? Общее объяснение концепции. +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=921 +# stash - буффер обмена и локальные изменения "прячутся" +# Концепция, нужна если мы что-то делали, но нам нужно резко, что-то делать другое, не коммитя изменения в репозиторий, мы можем сохранить в буффер обмена, для дальнейшего использования, пряча новые изменения. +# +# 23.1) Как сохранить стэш? +# +# Ответ: +# +# git командa(подсказка: https://t.me/c/1937296927/3602/19531): +# git stash save "NAME_STASH" - сохранение в буффер обмена +# git stash apply "NUMBER_STASH" - извлечения из буффера обмена +# +# Кнопка в vs code: Stash changes and continue +# +# 23.2) Как восстановить стэш(подсказка: https://t.me/c/1937296927/3602/25747)?: +# +# git команда(подсказка: https://t.me/c/1937296927/3602/19531)?: +# +# Ответ: +# +# git stash apply "NUMBER_STASH" +# +# 23.3) Различие между стэшем и коммитом. +# +# Ответ: +# +# Когда лучше сохранить изменения в стэше, а когда коммитить. +# Коммитить когда мы четко понимаем, что закончили с какой-то итерацией и можем выложить в ветку. Стешить, когда нам нужно быстро переключиться, с еще не доделанной работы, чтобы отдельно не плодить коммитов, с еще пока не готовым функционалом +# +# 23.4) Как просмотреть список сохраненных стэшей? +# git команда (подсказка: https://t.me/c/1937296927/3602/19531): +# +# Ответ: +# +# git stash list +# +# 23.5) Как удалить стэш? +# Команды для удаления отдельных стэшей или всех сразу. +# git команда (подсказка: https://t.me/c/1937296927/3602/19531): +# +# Ответ: +# +# git stash drop +# git stash clear +# +# 23.6) Практические примеры использования стэша. Краткие сценарии, где стэш помогает. +# +# Ответ: +# +# Спрятать изменения в моменте, когда нужно поработать над другой задачей. +# Спрятать изменения при конфликте, для дальнейшего резолва изменений с актуальной веткой +# +# 24. Где посмотреть что есть конфликт в файлах? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=969 +# В changes будет у строчки восклицательный знак в github desktop, нажимаем правой кнопкой где восклицательный знак и выбираем Open VS code +# +# 24.1) Когда он появляется? +# +# Ответ: +# +# Когда мы редактируем одинаковые файлы и получается у нас накладываются строчки из за этого возникает конфликт +# +# 25. Как решить конфликт в файлах? +# +# Ответ: +# +# Выбираем изменения которые нам нужны, убираем те что не нужны и нажимаем Resolve in merge +# +# 26. Напишите правильное утверждение +# -Зелёное то что пришло с гитхаба и синее локальные изменения или синее то что пришло с гитхаба и зелёное это локальные изменения +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=998 +# +# Зеленное, это то, что мы стянули из репозитория +# Синее наше локальные изменения +# +# 27. Если мы работаем в одном файле, можно ли принять pull после того как вы спрячете в стэш свои изменения? +# +# Ответ: +# +# Да, можно +# Если спрячем, то ничего не произойдет, изменения затянуться из github +# +# 27.1) Что может произойти когда stash восстановите после принятия pull? +# +# Ответ: +# +# Может произойти конфликт +# +# 28. Сколько способов решения конфликтов было показано в видео? Напишите ЧИСЛО и укажите их способы. +# +# Ответ: +# +# 2 способа: +# С помощью применения через акцепт и инкоминг +# Вручную убрав все лишнее. +# +# 29. Что делает кнопка complete merge? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=1062 +# Смерживает конечные изменения из конфликтов в один. +# +# 30. В какой чат нужно писать если остались вопросы? +# +# Ответ: +# +# HELP ME (bags&reports) +# https://t.me/c/1937296927/2415 +# +# 31. Что такое FORK? Зачем его делают? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=1146 +# Форк - это копия чужого репозитория оригинального репозитория в свое хранилище репозиториев. +# Делают для того, чтобы работать с оригинальной репой не изменяя исходного проекта, а помогать править баги, улучшать, или отдельно на основании этого проекта делать свое +# +# 32. Как скачать форкнутый репозиторий на локальный компьютер? +# +# Ответ: +# +# Через github desktop выбрав нужный в списке +# Консольная команде git clone название_репы +# +# 33. С какой вероятностью ваши ошибки были уже решены? и кто их решил? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=764 +# С вероятностью 90% +# Их решил: Сенаторов Руслан Олегович +# +# 34. Как создать файл в vs code? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=53 +# Нажимаем листочек с плюсиком и называем файл как нам нужно +# +# 35. # Файл лога нужно заполнять в конце каждого урока? +# +# Ответ: +# +# https://youtu.be/hW_7hodGxVU?t=70 +# Да, нужно +# +# Дополнительные вопросы: +# +# 1. Какая команда конвертирует файл в py из ipynb? +# подсказка https://t.me/c/1937296927/1/26527 +# +# Ответ: +# jupytext --to py filename.ipynb или через расширение VS Code (Jupytext) +# +# 2. Что такое пакетный менеджер? Вы пользуетесь пакетным менеджером conda или pip? Какой лучше использовать для дата сайнс? +# +# Ответ: +# +# Пакетный менеджер — инструмент для установки и управления библиотеками/пакетами. +# Для дата сайнс лучше использовать conda — он управляет не только Python-пакетами, но и зависимостями системы, библиотеками (NumPy, SciPy) с нативными расширениями. +# +# 3. Почему расширение py лучше чем ipynb? +# +# Ответ: +# +# - Удобнее для версионирования (Git лучше работает с текстом) +# - Линтеры (Pylint, Flake8) корректно работают только с .py +# - Проще ревью кода +# - Лучше для продакшн-кода и автоматизации +# +# 4. Что такое pep8? +# подсказка:https://peps.python.org/pep-0008/ +# +# Ответ: +# +# PEP 8 — официальный стиль кода Python. Рекомендации по форматированию, именованию, структуре для единообразия. +# +# 4.1) линтеры проверяют на соблюдение pep8? +# +# Ответ: +# +# Да. Flake8 и Pylint проверяют соответствие PEP 8 (стиль, именование, форматирование). +# +# 4.2) Какая нотация используется для создания переменных? +# ответ на 85-95 страницы https://t.me/c/1937296927/1/16676 +# +# Ответ: +# +# snake_case (нижний регистр, слова разделяются подчеркиванием), например: my_variable_name +# +# 4.3) Может ли переменная состоять из одной буквы например андерскор "\_" ? +# +# Ответ: +# Да. \_ — валидная переменная, часто используется как временная или неиспользуемая. +# +# 4.4) Зачем и где мы используем андерскор \_ +# +# Ответ: +# +# - _ — временная/неиспользуемая переменная (например, в unpacking: x, _, z = data) +# - Два \_\_ в начале — приватные атрибуты/методы +# - _ в конце — избежание конфликта с ключевыми словами (class_) +# +# 4.5) По PEP8 допустима переменная в одну букву? +# ответ на 85-95 страницы https://t.me/c/1937296927/1/16676 +# +# Ответ: +# +# Да, но не рекомендуется для обычных переменных. Допустимо в исключениях: циклы (for i in range(5), for x, y in points), малые области видимости. Лучше использовать понятные имена. +# diff --git a/quiz2.ipynb b/quiz2.ipynb new file mode 100644 index 00000000..76439762 --- /dev/null +++ b/quiz2.ipynb @@ -0,0 +1,244 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "9034c435", + "metadata": { + "vscode": { + "languageId": "plaintext" + } + }, + "outputs": [], + "source": [ + "\"\"\"Квиз 2.\"\"\"" + ] + }, + { + "cell_type": "markdown", + "id": "9b9ba45f", + "metadata": {}, + "source": [ + "Список вопросов к видео https://youtu.be/Si9MfV8uJ-0?si=JXHe-tsgOEwSTI5E (НАСТРОЙКА VSCODE, перенос строк, линтеры, работа с ячейками):\n", + "\n", + "(По желанию)В ответе подробно всё опишите и обязательно нужно указывать тайм код из видео где я это сказал, по желанию, дополнительно прикладываем скриншот из видео.\n", + "Если вы знаете ответы на вопросы из Вашего опыта, то таймкоды из видео не надо указывать и т.д.\n", + "\n", + "1. Как включить автосохранение данных в VSCODE?\n", + "\n", + "Ответ:\n", + "\n", + "https://youtu.be/Si9MfV8uJ-0?t=11\n", + "File - Auto Save\n", + "\n", + "2. Как настроить перенос строки?\n", + "\n", + "Ответ:\n", + "\n", + "https://youtu.be/Si9MfV8uJ-0?t=18\n", + "File - Preferences - Settings - 'wrap'\n", + "wordWrapColumn\n", + "\n", + "3. Сколько символов по pep8 разрешено на строке?\n", + "\n", + "Ответ:\n", + "\n", + "https://youtu.be/Si9MfV8uJ-0?t=21\n", + "79\n", + "\n", + "4. Какие способы переноса строк показаны в видео:\n", + "\n", + "4.1 Строки с использованием обратного слэша (\\)\n", + "\n", + "string_continued = \"This is a long string that we want to \" \\\n", + " \"split across multiple lines.\"\n", + "print(string_continued)\n", + "\n", + "4.2 Тройные кавычки (''' или \"\"\")\n", + "\n", + "multi_line_string = \"\"\"This is a string that spans\n", + "multiple lines. You can write freely\n", + "and it will keep the line breaks.\"\"\"\n", + "print(multi_line_string)\n", + "\n", + "4.3 Создание списка строк и объединение с помощью join\n", + "\n", + "strings = [\n", + "\"This is the first line.\",\n", + "\"This is the second line.\",\n", + "\"This is the third line.\"\n", + "]\n", + "result = \"\\n\".join(strings) # Используем перенос строк '\\n'\n", + "print(result)\n", + "\n", + "4.4 Использование круглых скобок для продолжения строки\n", + "long_string = (\n", + "\"This is a very long string that I would like to \"\n", + "\"continue on the next line.\"\n", + ")\n", + "print(long_string)\n", + "\n", + "4.5 Форматированные строки (f-строки) с использованием скобок\n", + "letter_a = 5\n", + "letter_b = 6\n", + "product_ab = letter_a \\* letter_b\n", + "\n", + "message = (\n", + "f\"when {letter_a} is multiplied by {letter_b}, \"\n", + "f\"the result is {product_ab}\"\n", + ")\n", + "print(message)\n", + "\n", + "4.6 Сложение строк с помощью +\n", + "\n", + "string_part1 = \"This is the first part, \"\n", + "string_part2 = \"and this is the second part.\"\n", + "full_string = string_part1 + string_part2\n", + "print(full_string)\n", + "\n", + "Ответ:\n", + "\n", + "4.6\n", + "\n", + "5. Проверка на ошибки c помощью кнопки problems, где она находится?\n", + "\n", + "Ответ:\n", + "\n", + "https://youtu.be/Si9MfV8uJ-0?t=286\n", + "В нижней части экрана, самая левая первая вкладка\n", + "\n", + "6. Где в vscode находится клиент гита? как в нём отправить коммит? как принять домашку?\n", + "\n", + "Ответ:\n", + "\n", + "https://youtu.be/Si9MfV8uJ-0?t=382\n", + "слева на панели Git Source Control\n", + "\n", + "7. Что такое GIT? он локальный? В нём можно посмотреть историю изменений файлов и вернуться к любому коммиту?\n", + "\n", + "Ответ:\n", + "\n", + "GIT - это система контроля версий.\n", + "Да, он поддерживает локальный режим работы, как и удаленный.\n", + "Да, можно посмотреть историю, вернуться и следить за репозиторием.\n", + "\n", + "8. Как вставить картинку в маркдаун?\n", + "\n", + "Ответ:\n", + "https://youtu.be/Si9MfV8uJ-0?t=476\n", + "Ctrl + C, Ctrl + V\n", + "\n", + "9. Где посмотреть длину строки в vs code?\n", + "\n", + "Ответ:\n", + "\n", + "Внизу IDE отображается количество символов в строке\n", + "\n", + "10. Как поменять тип ячейки с питона на маркдаун?\n", + "\n", + "Ответ:\n", + "\n", + "В правом нижнем углу на ячейке\n", + "\n", + "11. Как запустить сразу все ячейки в юпитере?\n", + "\n", + "Ответ:\n", + "\n", + "https://youtu.be/Si9MfV8uJ-0?t=508\n", + "Run All\n", + "\n", + "12. Как изменить размер картинки в юпитере? Нужно для этого знать HTML?\n", + "\n", + "Ответ:\n", + "\n", + "https://youtu.be/Si9MfV8uJ-0?t=495\n", + "тэг img. Да, для этого нужно понимать теги.\n", + "\n", + "13. Какой хоткей чтобы запустить ячейку с смещением на следующую?\n", + "\n", + "Ответ:\n", + "\n", + "https://youtu.be/Si9MfV8uJ-0?t=522\n", + "Shift + Enter\n", + "\n", + "14. Как включить отображение номеров строк в юпитере(Cell line numbers)?\n", + "\n", + "Ответ:\n", + "\n", + "https://youtu.be/Si9MfV8uJ-0?t=540\n", + "В верхнем всплывающем меню ячейки нажать Show Cell line numbers\n", + "\n", + "15. Что такое \"Go To\" чем это полезно? Как перейти сразу на ошибочную ячейку?\n", + "\n", + "Ответ:\n", + "\n", + "https://youtu.be/Si9MfV8uJ-0?t=568\n", + "Видим какая ячейка отвалилась после нажатия, каждое нажатие следующая ошибка\n", + "\n", + "16. Как очистить вывод ячеек которые уже запущены?\n", + "\n", + "Ответ:\n", + "\n", + "https://youtu.be/Si9MfV8uJ-0?t=641\n", + "Clear All outputs\n", + "\n", + "17. Как работать одновременно в нескольких файлах в VSCODE? Что такое SPLIT?\n", + "\n", + "Ответ:\n", + "\n", + "https://youtu.be/Si9MfV8uJ-0?t=656\n", + "Split Editor и экран разделяется на несколько рабочих областей\n", + "\n", + "18. Каким сочетанием убирается левый сайдбар?\n", + "\n", + "Ответ:\n", + "\n", + "Ctrl + B\n", + "\n", + "19. Кнопка два листочка это наши локальные файлы?\n", + "\n", + "Ответ:\n", + "\n", + "Да, это кнопка которая открывает локальный эксплорер с нашими файлами проекта, или папки где мы находимся в данный момент\n", + "\n", + "20. Какая ошибка появилась в трассировке при запуске всех ячеек DICT или LIST?\n", + "\n", + "Ответ:\n", + "\n", + "https://youtu.be/Si9MfV8uJ-0?t=563\n", + "DICT\n", + "\n", + "21. Вы ознакомились с https://t.me/c/1937296927/832/19307? и https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet?\n", + "\n", + "Ответ:\n", + "\n", + "Ознакомился\n", + "\n", + "22. Что такое валидация?\n", + "\n", + "Ответ:\n", + "\n", + "Валидация - это способ проверки данных на корректность по определенным правилам\n", + "\n", + "23. Что такое трассировка ошибки?\n", + "\n", + "Ответ:\n", + "\n", + "Трассировка ошибки - это информация от того момента где произошла ошибка, до момента начала её вызова.\n", + "\n", + "24. Что значит отвалился интерпретатор?\n", + "\n", + "Ответ:\n", + "\n", + "Значит то, что по тем или иным причинам интерпретатор не может выполнить код, может быть связано с отсутствием интерпретатора, или ошибками работы программы.\n" + ] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/quiz2.py b/quiz2.py new file mode 100644 index 00000000..fd49a477 --- /dev/null +++ b/quiz2.py @@ -0,0 +1,215 @@ +"""Квиз 2.""" + +# Список вопросов к видео https://youtu.be/Si9MfV8uJ-0?si=JXHe-tsgOEwSTI5E (НАСТРОЙКА VSCODE, перенос строк, линтеры, работа с ячейками): +# +# (По желанию)В ответе подробно всё опишите и обязательно нужно указывать тайм код из видео где я это сказал, по желанию, дополнительно прикладываем скриншот из видео. +# Если вы знаете ответы на вопросы из Вашего опыта, то таймкоды из видео не надо указывать и т.д. +# +# 1. Как включить автосохранение данных в VSCODE? +# +# Ответ: +# +# https://youtu.be/Si9MfV8uJ-0?t=11 +# File - Auto Save +# +# 2. Как настроить перенос строки? +# +# Ответ: +# +# https://youtu.be/Si9MfV8uJ-0?t=18 +# File - Preferences - Settings - 'wrap' +# wordWrapColumn +# +# 3. Сколько символов по pep8 разрешено на строке? +# +# Ответ: +# +# https://youtu.be/Si9MfV8uJ-0?t=21 +# 79 +# +# 4. Какие способы переноса строк показаны в видео: +# +# 4.1 Строки с использованием обратного слэша (\) +# +# string_continued = "This is a long string that we want to " \ +# "split across multiple lines." +# print(string_continued) +# +# 4.2 Тройные кавычки (''' или """) +# +# multi_line_string = """This is a string that spans +# multiple lines. You can write freely +# and it will keep the line breaks.""" +# print(multi_line_string) +# +# 4.3 Создание списка строк и объединение с помощью join +# +# strings = [ +# "This is the first line.", +# "This is the second line.", +# "This is the third line." +# ] +# result = "\n".join(strings) # Используем перенос строк '\n' +# print(result) +# +# 4.4 Использование круглых скобок для продолжения строки +# long_string = ( +# "This is a very long string that I would like to " +# "continue on the next line." +# ) +# print(long_string) +# +# 4.5 Форматированные строки (f-строки) с использованием скобок +# letter_a = 5 +# letter_b = 6 +# product_ab = letter_a \* letter_b +# +# message = ( +# f"when {letter_a} is multiplied by {letter_b}, " +# f"the result is {product_ab}" +# ) +# print(message) +# +# 4.6 Сложение строк с помощью + +# +# string_part1 = "This is the first part, " +# string_part2 = "and this is the second part." +# full_string = string_part1 + string_part2 +# print(full_string) +# +# Ответ: +# +# 4.6 +# +# 5. Проверка на ошибки c помощью кнопки problems, где она находится? +# +# Ответ: +# +# https://youtu.be/Si9MfV8uJ-0?t=286 +# В нижней части экрана, самая левая первая вкладка +# +# 6. Где в vscode находится клиент гита? как в нём отправить коммит? как принять домашку? +# +# Ответ: +# +# https://youtu.be/Si9MfV8uJ-0?t=382 +# слева на панели Git Source Control +# +# 7. Что такое GIT? он локальный? В нём можно посмотреть историю изменений файлов и вернуться к любому коммиту? +# +# Ответ: +# +# GIT - это система контроля версий. +# Да, он поддерживает локальный режим работы, как и удаленный. +# Да, можно посмотреть историю, вернуться и следить за репозиторием. +# +# 8. Как вставить картинку в маркдаун? +# +# Ответ: +# https://youtu.be/Si9MfV8uJ-0?t=476 +# Ctrl + C, Ctrl + V +# +# 9. Где посмотреть длину строки в vs code? +# +# Ответ: +# +# Внизу IDE отображается количество символов в строке +# +# 10. Как поменять тип ячейки с питона на маркдаун? +# +# Ответ: +# +# В правом нижнем углу на ячейке +# +# 11. Как запустить сразу все ячейки в юпитере? +# +# Ответ: +# +# https://youtu.be/Si9MfV8uJ-0?t=508 +# Run All +# +# 12. Как изменить размер картинки в юпитере? Нужно для этого знать HTML? +# +# Ответ: +# +# https://youtu.be/Si9MfV8uJ-0?t=495 +# тэг img. Да, для этого нужно понимать теги. +# +# 13. Какой хоткей чтобы запустить ячейку с смещением на следующую? +# +# Ответ: +# +# https://youtu.be/Si9MfV8uJ-0?t=522 +# Shift + Enter +# +# 14. Как включить отображение номеров строк в юпитере(Cell line numbers)? +# +# Ответ: +# +# https://youtu.be/Si9MfV8uJ-0?t=540 +# В верхнем всплывающем меню ячейки нажать Show Cell line numbers +# +# 15. Что такое "Go To" чем это полезно? Как перейти сразу на ошибочную ячейку? +# +# Ответ: +# +# https://youtu.be/Si9MfV8uJ-0?t=568 +# Видим какая ячейка отвалилась после нажатия, каждое нажатие следующая ошибка +# +# 16. Как очистить вывод ячеек которые уже запущены? +# +# Ответ: +# +# https://youtu.be/Si9MfV8uJ-0?t=641 +# Clear All outputs +# +# 17. Как работать одновременно в нескольких файлах в VSCODE? Что такое SPLIT? +# +# Ответ: +# +# https://youtu.be/Si9MfV8uJ-0?t=656 +# Split Editor и экран разделяется на несколько рабочих областей +# +# 18. Каким сочетанием убирается левый сайдбар? +# +# Ответ: +# +# Ctrl + B +# +# 19. Кнопка два листочка это наши локальные файлы? +# +# Ответ: +# +# Да, это кнопка которая открывает локальный эксплорер с нашими файлами проекта, или папки где мы находимся в данный момент +# +# 20. Какая ошибка появилась в трассировке при запуске всех ячеек DICT или LIST? +# +# Ответ: +# +# https://youtu.be/Si9MfV8uJ-0?t=563 +# DICT +# +# 21. Вы ознакомились с https://t.me/c/1937296927/832/19307? и https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet? +# +# Ответ: +# +# Ознакомился +# +# 22. Что такое валидация? +# +# Ответ: +# +# Валидация - это способ проверки данных на корректность по определенным правилам +# +# 23. Что такое трассировка ошибки? +# +# Ответ: +# +# Трассировка ошибки - это информация от того момента где произошла ошибка, до момента начала её вызова. +# +# 24. Что значит отвалился интерпретатор? +# +# Ответ: +# +# Значит то, что по тем или иным причинам интерпретатор не может выполнить код, может быть связано с отсутствием интерпретатора, или ошибками работы программы. +# From 9408c74795da7f41b1f158324cd8c612119d20e4 Mon Sep 17 00:00:00 2001 From: Pavel Demyanov Date: Thu, 8 Jan 2026 15:02:08 +0300 Subject: [PATCH 05/12] [TASK] Cpython #4 (https://github.com/SENATOROVAI/intro-cs/issues/4) Closes https://github.com/SENATOROVAI/intro-cs/issues/4 --- log.ipynb | 8 +- log.py | 2 + python/cpython.ipynb | 304 +++++++++++++++++++++++++++++ python/cpython.py | 246 ++++++++++++++++++++++++ quiz1.ipynb | 442 ------------------------------------------- quiz1.py | 413 ---------------------------------------- quiz2.ipynb | 244 ------------------------ quiz2.py | 215 --------------------- 8 files changed, 557 insertions(+), 1317 deletions(-) create mode 100644 python/cpython.ipynb create mode 100644 python/cpython.py delete mode 100644 quiz1.ipynb delete mode 100644 quiz1.py delete mode 100644 quiz2.ipynb delete mode 100644 quiz2.py diff --git a/log.ipynb b/log.ipynb index 2f96717d..8995bca3 100644 --- a/log.ipynb +++ b/log.ipynb @@ -42,13 +42,15 @@ "2. Пересмотрены по несколько раз видео:\n", " https://www.youtube.com/watch?v=Si9MfV8uJ-0\n", " https://www.youtube.com/watch?si=tCEVs00xGt2q61eW&v=hW_7hodGxVU&feature=youtu.be\n", - "3. Изучаю курс по пайтону шаг https://stepik.org/lesson/1711495/step/7?unit=1734919\n" + "3. Изучаю курс по пайтону шаг https://stepik.org/lesson/1711495/step/7?unit=1734919\n", + "4. https://github.com/SENATOROVAI/intro-cs/issues/6 - сделал пулл\n", + "5. https://github.com/SENATOROVAI/intro-cs/issues/4 - сделал пулл\n" ] } ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": ".venv", "language": "python", "name": "python3" }, @@ -62,7 +64,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.11" + "version": "3.11.9" } }, "nbformat": 4, diff --git a/log.py b/log.py index 3ff69502..4c13c157 100644 --- a/log.py +++ b/log.py @@ -12,4 +12,6 @@ # https://www.youtube.com/watch?v=Si9MfV8uJ-0 # https://www.youtube.com/watch?si=tCEVs00xGt2q61eW&v=hW_7hodGxVU&feature=youtu.be # 3. Изучаю курс по пайтону шаг https://stepik.org/lesson/1711495/step/7?unit=1734919 +# 4. https://github.com/SENATOROVAI/intro-cs/issues/6 - сделал пулл +# 5. https://github.com/SENATOROVAI/intro-cs/issues/4 - сделал пулл # diff --git a/python/cpython.ipynb b/python/cpython.ipynb new file mode 100644 index 00000000..b7ae9d11 --- /dev/null +++ b/python/cpython.ipynb @@ -0,0 +1,304 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "61a1c252", + "metadata": { + "vscode": { + "languageId": "plaintext" + } + }, + "outputs": [], + "source": [ + "\"\"\"Квиз и практика по пайтон.\"\"\"" + ] + }, + { + "cell_type": "markdown", + "id": "987ba122", + "metadata": {}, + "source": [ + "1. Что такое CPython и чем он отличается от Python?\n", + "\n", + "Ответ:\n", + "\n", + "CPython — стандартная реализация Python на языке C. Это та версия, которую обычно скачивают с python.org.\n", + "\n", + "Разница:\n", + "Python — язык программирования (спецификация)\n", + "CPython — реализация этого языка на C\n", + "\n", + "\n", + "2. Сколько существует реализаций Python, и какая из них самая популярная?\n", + "\n", + "Ответ:\n", + "\n", + "6 реализаций \n", + "CPython - самая популярная\n", + "\n", + "\n", + "4. На каком языке написан CPython?\n", + "\n", + "Ответ:\n", + "\n", + "Язык С\n", + "\n", + "\n", + "5. (опционально) Кто создал CPython?\n", + "\n", + "Ответ:\n", + "\n", + "Гвидо ван Россум\n", + "\n", + "\n", + "6. Почему Python считается быстрым, несмотря на то, что это интерпретируемый язык?\n", + "\n", + "Ответ:\n", + "\n", + "Потому что он написан на C и вызывает инструкции из C\n", + "\n", + "\n", + "7. Напишите путь к Интерпретатору CPython на вашем компьютере\n", + "\n", + "Ответ:\n", + "\n", + "~/AppData/Local/Programs/Python/Python310/python.exe\n", + "\n", + "\n", + "8. Что содержится в папке include в CPython?\n", + "\n", + "Ответ:\n", + "\n", + "заголовочные файлы с расширением .h\n", + "\n", + "\n", + "9. Где можно найти исходный код CPython дайте ссылку на репозиторий гитхаб\n", + "\n", + "Ответ:\n", + "\n", + "https://github.com/python/cpython\n", + "\n", + "\n", + "10. (опционально) Как работает интерпретатор CPython при выполнении кода?\n", + "\n", + "Ответ:\n", + "\n", + "Парсинг — исходный код разбирается в AST (абстрактное синтаксическое дерево).\n", + "Компиляция в байт-код — AST компилируется в байт-код (.pyc), который хранится в папке __pycache__.\n", + "\n", + "Виртуальная машина (VM) — байт-код выполняется стековой виртуальной машиной:\n", + "Читает инструкции байт-кода\n", + "Выполняет их через C-функции\n", + "Управляет стеком вызовов, объектами в памяти, GIL\n", + "Выполнение — каждая инструкция байт-кода вызывает соответствующую C-функцию, которая выполняет операцию.\n", + "\n", + "\n", + "11. Какая команда используется для запуска файла с помощью CPython?\n", + "\n", + "Ответ:\n", + "\n", + "python filename\n", + "\n", + "12. Можно ли запускать текстовые файлы через интерпретатор Python? Почему?\n", + "\n", + "Ответ:\n", + "\n", + "Да, можно\n", + "Интерпретатору без разницы какой формат файла, главное, чтобы был валидный пайтон код\n", + "\n", + "13. Как указать путь к интерпретатору и файлу для выполнения кода?\n", + "\n", + "Ответ:\n", + "\n", + "Через Абсолютный или относительный путь, или если есть алиас в переменных средах, то через него\n", + "\n", + "14. Чем PyPy отличается от CPython?\n", + "\n", + "Ответ:\n", + "\n", + "PyPy — альтернативная реализация Python с JIT-компиляцией, быстрее CPython для многих задач, но с ограничениями по совместимости с C-расширениями\n", + "\n", + "15. Почему PyPy не может использоваться для всех проектов на Python?\n", + "\n", + "Ответ:\n", + "\n", + "Не совместим со всеми проектами на Python\n", + "\n", + "\n", + "16. Где можно скачать PyPy?\n", + "\n", + "Ответ:\n", + "\n", + "https://pypy.org/download.html\n", + "\n", + "\n", + "17. Как установить PyPy после скачивания?\n", + "\n", + "Ответ:\n", + "\n", + "Распаковать в нужную папку и прописать пути в переменных средах\n", + "\n", + "18. Как запустить файл с помощью PyPy?\n", + "\n", + "Ответ:\n", + "\n", + "pypy filename\n", + "Или абсолютный путь до интерпретатора:\n", + "~/pypy/pypy.exe filename\n", + "\n", + "19. Почему PyPy выполняет код быстрее, чем CPython?\n", + "\n", + "Ответ:\n", + "\n", + "PyPy быстрее за счёт JIT-компиляции часто используемого кода в машинный код, что устраняет интерпретацию байт-кода." + ] + }, + { + "cell_type": "markdown", + "id": "136daecf", + "metadata": {}, + "source": [ + "Задание 1: Поиск и установка CPython\n", + "\n", + "Проверьте, установлен ли CPython на вашем компьютере:\n", + " Используйте поиск в меню \"Пуск\" (Windows) или терминале (Linux/Mac).\n", + " Введите команду python --version или python3 --version в терминале.\n", + "Если CPython не установлен, скачайте его с официального сайта Python https://www.python.org/downloads/ и установите.\n", + "\n", + "\n", + "Решение:\n", + "\n", + "\n", + "C:\\Users\\demya>where python\n", + "C:\\Users\\demya\\anaconda3\\python.exe\n", + "C:\\Users\\demya\\AppData\\Local\\Programs\\Python\\Python310\\python.exe\n", + "C:\\Users\\demya\\AppData\\Local\\Programs\\Python\\Python311\\python.exe\n", + "C:\\ProgramData\\miniconda3\\python.exe\n", + "C:\\Users\\demya\\AppData\\Local\\Microsoft\\WindowsApps\\python.exe\n", + "C:\\Users\\demya\\pypy\\python.exe\n", + "\n", + "\n", + "C:\\Users\\demya>python --version\n", + "Python 3.13.9" + ] + }, + { + "cell_type": "markdown", + "id": "b6412bf5", + "metadata": {}, + "source": [ + "Задание 2: Исследование структуры CPython\n", + "\n", + "Найдите папку, где установлен Python (например, через команду which python в терминале или свойства ярлыка).\n", + "Откройте папку include и изучите её содержимое. Какое количество файлов на C там есть?\n", + "Перейдите на [GitHub-репозиторий CPython](https://github.com/python/cpython) и найдите файл README. Прочитайте информацию о проекте.\n", + "\n", + "Решение:\n", + "\n", + "C:\\Users\\demya\\anaconda3\\include\n", + "79 файлов\n" + ] + }, + { + "cell_type": "markdown", + "id": "40744f44", + "metadata": {}, + "source": [ + "Задание 3: Запуск файла с помощью CPython\n", + "\n", + "Создайте текстовый файл example.txt с содержимым:\n", + "\n", + "print(\"Hello from CPython!\")\n", + "\n", + "Запустите файл через команду python <путь_до_файла> (замените <путь_до_файла> на фактический путь к вашему файлу).\n", + "Проверьте, что выводится на экран. Попробуйте изменить расширение файла на .py и повторите запуск.\n", + "\n", + "\n", + "Решение:\n", + "\n", + "C:\\Users\\demya>echo print(\"Hello from CPython!\") > example.txt\n", + "\n", + "C:\\Users\\demya>python example.txt\n", + "Hello from CPython!\n", + "\n", + "C:\\Users\\demya>move example.txt example.py\n", + " 1 file(s) moved.\n", + "\n", + "C:\\Users\\demya>python example.py\n", + "Hello from CPython!\n" + ] + }, + { + "cell_type": "markdown", + "id": "52008d7a", + "metadata": {}, + "source": [ + "Задание 4: Установка и использование PyPy\n", + "\n", + "Перейдите на [официальный сайт PyPy](https://www.pypy.org/) и скачайте подходящую версию для вашей операционной системы.\n", + "Распакуйте скачанный архив в удобное место.\n", + "Создайте файл example_pypy.py с кодом:\n", + "\n", + "print(\"Hello from pypy!\")\n", + "\n", + "Запустите файл через PyPy\n", + "pypy <путь_до_файла> (замените <путь_до_файла> на фактический путь к вашему файлу).\n", + "Проверьте, что выводится на экран. Попробуйте изменить расширение файла на .py и повторите запуск.\n", + "\n", + "Решение:\n", + "\n", + "C:\\Users\\demya>echo print(\"Hello from pypy!\") > example_pypy.py\n", + "\n", + "C:\\Users\\demya>pypy example_pypy.py\n", + "Hello from pypy!" + ] + }, + { + "cell_type": "markdown", + "id": "9e33b1cf", + "metadata": {}, + "source": [ + "Задание 5: Сравнение производительности CPython и PyPy\n", + "\n", + "Создайте файл performance_test.py с кодом:\n", + "\n", + " import time\n", + " start_time = time.time()\n", + " total = 0\n", + " for i in range(1, 10000000):\n", + " total += i\n", + " end_time = time.time()\n", + " \n", + " print(\"Result:\", total)\n", + " print(\"Execution time:\", end_time - start_time, \"seconds\")\n", + "\n", + "Запустите этот файл сначала через CPython, а затем через PyPy. Запишите результаты времени выполнения для обоих интерпретаторов.\n", + "\n", + "Сделайте вывод о разнице в производительности.\n", + "\n", + "Решение:\n", + "\n", + "CPython:\n", + "\n", + "C:\\Users\\demya>python performance_test.py\n", + "Result: 49999995000000\n", + "Execution time: 0.7137529850006104 seconds\n", + "\n", + "\n", + "Pypy:\n", + "\n", + "C:\\Users\\demya>pypy performance_test.py\n", + "Result: 49999995000000\n", + "Execution time: 0.023383617401123047 seconds" + ] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/python/cpython.py b/python/cpython.py new file mode 100644 index 00000000..d30a4ef7 --- /dev/null +++ b/python/cpython.py @@ -0,0 +1,246 @@ +"""Квиз и практика по пайтон.""" + +# 1. Что такое CPython и чем он отличается от Python? +# +# Ответ: +# +# CPython — стандартная реализация Python на языке C. Это та версия, которую обычно скачивают с python.org. +# +# Разница: +# Python — язык программирования (спецификация) +# CPython — реализация этого языка на C +# +# +# 2. Сколько существует реализаций Python, и какая из них самая популярная? +# +# Ответ: +# +# 6 реализаций +# CPython - самая популярная +# +# +# 4. На каком языке написан CPython? +# +# Ответ: +# +# Язык С +# +# +# 5. (опционально) Кто создал CPython? +# +# Ответ: +# +# Гвидо ван Россум +# +# +# 6. Почему Python считается быстрым, несмотря на то, что это интерпретируемый язык? +# +# Ответ: +# +# Потому что он написан на C и вызывает инструкции из C +# +# +# 7. Напишите путь к Интерпретатору CPython на вашем компьютере +# +# Ответ: +# +# ~/AppData/Local/Programs/Python/Python310/python.exe +# +# +# 8. Что содержится в папке include в CPython? +# +# Ответ: +# +# заголовочные файлы с расширением .h +# +# +# 9. Где можно найти исходный код CPython дайте ссылку на репозиторий гитхаб +# +# Ответ: +# +# https://github.com/python/cpython +# +# +# 10. (опционально) Как работает интерпретатор CPython при выполнении кода? +# +# Ответ: +# +# Парсинг — исходный код разбирается в AST (абстрактное синтаксическое дерево). +# Компиляция в байт-код — AST компилируется в байт-код (.pyc), который хранится в папке __pycache__. +# +# Виртуальная машина (VM) — байт-код выполняется стековой виртуальной машиной: +# Читает инструкции байт-кода +# Выполняет их через C-функции +# Управляет стеком вызовов, объектами в памяти, GIL +# Выполнение — каждая инструкция байт-кода вызывает соответствующую C-функцию, которая выполняет операцию. +# +# +# 11. Какая команда используется для запуска файла с помощью CPython? +# +# Ответ: +# +# python filename +# +# 12. Можно ли запускать текстовые файлы через интерпретатор Python? Почему? +# +# Ответ: +# +# Да, можно +# Интерпретатору без разницы какой формат файла, главное, чтобы был валидный пайтон код +# +# 13. Как указать путь к интерпретатору и файлу для выполнения кода? +# +# Ответ: +# +# Через Абсолютный или относительный путь, или если есть алиас в переменных средах, то через него +# +# 14. Чем PyPy отличается от CPython? +# +# Ответ: +# +# PyPy — альтернативная реализация Python с JIT-компиляцией, быстрее CPython для многих задач, но с ограничениями по совместимости с C-расширениями +# +# 15. Почему PyPy не может использоваться для всех проектов на Python? +# +# Ответ: +# +# Не совместим со всеми проектами на Python +# +# +# 16. Где можно скачать PyPy? +# +# Ответ: +# +# https://pypy.org/download.html +# +# +# 17. Как установить PyPy после скачивания? +# +# Ответ: +# +# Распаковать в нужную папку и прописать пути в переменных средах +# +# 18. Как запустить файл с помощью PyPy? +# +# Ответ: +# +# pypy filename +# Или абсолютный путь до интерпретатора: +# ~/pypy/pypy.exe filename +# +# 19. Почему PyPy выполняет код быстрее, чем CPython? +# +# Ответ: +# +# PyPy быстрее за счёт JIT-компиляции часто используемого кода в машинный код, что устраняет интерпретацию байт-кода. + +# Задание 1: Поиск и установка CPython +# +# Проверьте, установлен ли CPython на вашем компьютере: +# Используйте поиск в меню "Пуск" (Windows) или терминале (Linux/Mac). +# Введите команду python --version или python3 --version в терминале. +# Если CPython не установлен, скачайте его с официального сайта Python https://www.python.org/downloads/ и установите. +# +# +# Решение: +# +# +# C:\Users\demya>where python +# C:\Users\demya\anaconda3\python.exe +# C:\Users\demya\AppData\Local\Programs\Python\Python310\python.exe +# C:\Users\demya\AppData\Local\Programs\Python\Python311\python.exe +# C:\ProgramData\miniconda3\python.exe +# C:\Users\demya\AppData\Local\Microsoft\WindowsApps\python.exe +# C:\Users\demya\pypy\python.exe +# +# +# C:\Users\demya>python --version +# Python 3.13.9 + +# Задание 2: Исследование структуры CPython +# +# Найдите папку, где установлен Python (например, через команду which python в терминале или свойства ярлыка). +# Откройте папку include и изучите её содержимое. Какое количество файлов на C там есть? +# Перейдите на [GitHub-репозиторий CPython](https://github.com/python/cpython) и найдите файл README. Прочитайте информацию о проекте. +# +# Решение: +# +# C:\Users\demya\anaconda3\include +# 79 файлов +# + +# Задание 3: Запуск файла с помощью CPython +# +# Создайте текстовый файл example.txt с содержимым: +# +# print("Hello from CPython!") +# +# Запустите файл через команду python <путь_до_файла> (замените <путь_до_файла> на фактический путь к вашему файлу). +# Проверьте, что выводится на экран. Попробуйте изменить расширение файла на .py и повторите запуск. +# +# +# Решение: +# +# C:\Users\demya>echo print("Hello from CPython!") > example.txt +# +# C:\Users\demya>python example.txt +# Hello from CPython! +# +# C:\Users\demya>move example.txt example.py +# 1 file(s) moved. +# +# C:\Users\demya>python example.py +# Hello from CPython! +# + +# Задание 4: Установка и использование PyPy +# +# Перейдите на [официальный сайт PyPy](https://www.pypy.org/) и скачайте подходящую версию для вашей операционной системы. +# Распакуйте скачанный архив в удобное место. +# Создайте файл example_pypy.py с кодом: +# +# print("Hello from pypy!") +# +# Запустите файл через PyPy +# pypy <путь_до_файла> (замените <путь_до_файла> на фактический путь к вашему файлу). +# Проверьте, что выводится на экран. Попробуйте изменить расширение файла на .py и повторите запуск. +# +# Решение: +# +# C:\Users\demya>echo print("Hello from pypy!") > example_pypy.py +# +# C:\Users\demya>pypy example_pypy.py +# Hello from pypy! + +# Задание 5: Сравнение производительности CPython и PyPy +# +# Создайте файл performance_test.py с кодом: +# +# import time +# start_time = time.time() +# total = 0 +# for i in range(1, 10000000): +# total += i +# end_time = time.time() +# +# print("Result:", total) +# print("Execution time:", end_time - start_time, "seconds") +# +# Запустите этот файл сначала через CPython, а затем через PyPy. Запишите результаты времени выполнения для обоих интерпретаторов. +# +# Сделайте вывод о разнице в производительности. +# +# Решение: +# +# CPython: +# +# C:\Users\demya>python performance_test.py +# Result: 49999995000000 +# Execution time: 0.7137529850006104 seconds +# +# +# Pypy: +# +# C:\Users\demya>pypy performance_test.py +# Result: 49999995000000 +# Execution time: 0.023383617401123047 seconds diff --git a/quiz1.ipynb b/quiz1.ipynb deleted file mode 100644 index 475de3b8..00000000 --- a/quiz1.ipynb +++ /dev/null @@ -1,442 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "id": "9084810c", - "metadata": { - "vscode": { - "languageId": "plaintext" - } - }, - "outputs": [], - "source": [ - "\"\"\"Квиз 1.\"\"\"" - ] - }, - { - "cell_type": "markdown", - "id": "b8bb4b09", - "metadata": {}, - "source": [ - "Список вопросов к видео https://youtu.be/hW_7hodGxVU?si=tCEVs00xGt2q61eW (АЛГОРИТМ ПРИНЯТИЯ И ОТДАЧИ ДОМАШКИ):\n", - "\n", - "(По желанию )В ответе подробно всё опишите и обязательно нужно указывать тайм код из видео где я это сказал, по желанию, дополнительно прикладываем скриншот из видео.\n", - "Если вы знаете ответы на вопросы из Вашего опыта, то таймкоды из видео не надо указывать и т.д.\n", - "\n", - "1. Как понять, что домашка пришла?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=8\n", - " Заходим в чатик HomeWork видим ник и прими пул\n", - "\n", - "2. Как принять домашку?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=17\n", - " Заходим в гитхаб десктоп нажимаем fetch origin.\n", - "\n", - "3. Зачем нужна кнопка history и какие функции появляются при нажатии правой кнопки мыши на коммит?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=29\n", - "\n", - " В хистори мы видим, что произошло с нашим репозиторием\n", - "\n", - "3.1) Где брать ссылку на коммит? куда её отправлять?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=229\n", - "\n", - " Нажимаем в хистори View on Github и перемещаемся в гитхаб там будет в адресной строке ссылка на коммит\n", - " Отправляем её в чат HomeWork с припиской коммит отдал ссылка*на*коммит.\n", - "\n", - "4. Что такое файл лога?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=70\n", - " Файл лога - это файл содержащий информацию о том, что мы делали за все уроки по датам.\n", - "\n", - "4.1) Когда нужно его пушить?\n", - "\n", - "Ответ:\n", - "\n", - "https://youtu.be/hW_7hodGxVU?t=70\n", - "Когда заканчиваем урок\n", - "\n", - "5. Что такое интерпретатор?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=169\n", - " Программа которая читает и запускает наш код\n", - "\n", - "6. Где можно выбрать интерпретатор?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=163\n", - " Нажимаем слева запуск кода или сверху в правом углу выбираем нужный нам интерпретатор\n", - "\n", - "7. Что такое модуль?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=526\n", - " Модуль это обычный файлик с расширение .py или .ipynb\n", - "\n", - "8. Как создать и отправить коммит?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=193\n", - " Заходим в гитхаб отмечаем нужные изменения, пишем название коммит и нажимаем кнопку коммит\n", - "\n", - "9. Как посмотреть что коммит точно отправлен и находится в github?\n", - "\n", - " Ответ:\n", - "\n", - " В хистори будет видно, да и view on github даст ссылку на коммит\n", - "\n", - "10. Какая команда показывает что код не прошёл проверки на ошибки?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=363\n", - " pre-commit run --all-files\n", - "\n", - "10.1) Напишите список линтеров которые используются для проверки кода и дайте их краткую характеристику.\n", - "\n", - " Ответ:\n", - "\n", - " Flake8 — базовая проверка стиля\n", - " Mypy — проверка типов\n", - " Pylint — дополнительный анализ (по необходимости)\n", - " Pydocstyle — проверка документации (по необходимости)\n", - "\n", - "11. Как узнать какой именно линтер не прошёл проверку?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=370\n", - " В консоле после запуска линтеров будет статус выполнения и по статусу можно определить успешность по каждому линтеру.\n", - "\n", - "12. Линтер Pylint видит markdown?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=425\n", - " Нет\n", - "\n", - "13. Номер ячейки в терминале и номер ячейки в vs code может отличаться? в каком случае?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=437\n", - " Да, может отличаться, в случае если есть ячейки с маркдовн, из за того, что линтер их не видит, он их не учитывает, поэтому количество может быть разным\n", - "\n", - "14. Где посмотреть номер ячейки в vscode?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=455\n", - " можем посмотреть внизу справа\n", - "\n", - "15. В каком формате ipynb отправляется в гитхаб? причём здесь JSON?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=204\n", - " В формате JSON, приложение github desktop отображает файлы формата ipynb в формате json\n", - "\n", - "16. Где посмотреть в какой ячейке ошибка?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=462\n", - " Можем посмотреть по коду ошибки, где не так или нажать Ctrl + F и найти где ошибка\n", - "\n", - "17. Как запустить терминал?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=353\n", - " Меню терминал - новый терминал\n", - "\n", - "18. Что такое линтер?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=375\n", - " Линтер это программа которая проверяет на корректность стандартам\n", - "\n", - "19. В какой сайт нужно вставлять код ошибки если ошибка связана с pylint?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=495\n", - " На сайте пайлинта https://pylint.readthedocs.io/\n", - "\n", - "20. Секция pydocstyle в большинстве случае автоматический закрывается после исправления ошибок в каком линтере?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=587\n", - " После исправления ошибок в линтере pylint\n", - "\n", - "21. Что такое описание модуля? Оно должно отражать информацию о том что находится в модуле?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=563\n", - " Описание модуля это какая информация у нас в модуле. Да, оно должно отображать информацию о модуле.\n", - "\n", - " 21.1) С какой git команды начинается утро программиста?\n", - "\n", - " Ответ:\n", - "\n", - " fetch origin\n", - "\n", - "22. После внесения изменений в файлах, кнопка open in vs code пропадает в кошке, как по другому открыть vs code из кошки?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=855\n", - " Чтобы попасть из github desktop в vs code, нужно нажать на Current repository и выбрать Open VS code\n", - "\n", - "23. Что такое stash? Общее объяснение концепции.\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=921\n", - " stash - буффер обмена и локальные изменения \"прячутся\"\n", - " Концепция, нужна если мы что-то делали, но нам нужно резко, что-то делать другое, не коммитя изменения в репозиторий, мы можем сохранить в буффер обмена, для дальнейшего использования, пряча новые изменения.\n", - "\n", - " 23.1) Как сохранить стэш?\n", - "\n", - " Ответ:\n", - "\n", - " git командa(подсказка: https://t.me/c/1937296927/3602/19531):\n", - " git stash save \"NAME_STASH\" - сохранение в буффер обмена\n", - " git stash apply \"NUMBER_STASH\" - извлечения из буффера обмена\n", - "\n", - "Кнопка в vs code: Stash changes and continue\n", - "\n", - "23.2) Как восстановить стэш(подсказка: https://t.me/c/1937296927/3602/25747)?:\n", - "\n", - " git команда(подсказка: https://t.me/c/1937296927/3602/19531)?:\n", - "\n", - " Ответ:\n", - "\n", - " git stash apply \"NUMBER_STASH\"\n", - "\n", - "23.3) Различие между стэшем и коммитом.\n", - "\n", - " Ответ:\n", - "\n", - " Когда лучше сохранить изменения в стэше, а когда коммитить.\n", - " Коммитить когда мы четко понимаем, что закончили с какой-то итерацией и можем выложить в ветку. Стешить, когда нам нужно быстро переключиться, с еще не доделанной работы, чтобы отдельно не плодить коммитов, с еще пока не готовым функционалом\n", - "\n", - "23.4) Как просмотреть список сохраненных стэшей? \n", - " git команда (подсказка: https://t.me/c/1937296927/3602/19531):\n", - "\n", - " Ответ:\n", - "\n", - " git stash list\n", - "\n", - "23.5) Как удалить стэш? \n", - " Команды для удаления отдельных стэшей или всех сразу.\n", - "git команда (подсказка: https://t.me/c/1937296927/3602/19531):\n", - "\n", - " Ответ:\n", - "\n", - " git stash drop\n", - " git stash clear\n", - "\n", - "23.6) Практические примеры использования стэша. Краткие сценарии, где стэш помогает.\n", - "\n", - " Ответ:\n", - "\n", - " Спрятать изменения в моменте, когда нужно поработать над другой задачей.\n", - " Спрятать изменения при конфликте, для дальнейшего резолва изменений с актуальной веткой\n", - "\n", - "24. Где посмотреть что есть конфликт в файлах?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=969\n", - " В changes будет у строчки восклицательный знак в github desktop, нажимаем правой кнопкой где восклицательный знак и выбираем Open VS code\n", - "\n", - " 24.1) Когда он появляется?\n", - "\n", - " Ответ:\n", - "\n", - " Когда мы редактируем одинаковые файлы и получается у нас накладываются строчки из за этого возникает конфликт\n", - "\n", - "25. Как решить конфликт в файлах?\n", - "\n", - " Ответ:\n", - "\n", - " Выбираем изменения которые нам нужны, убираем те что не нужны и нажимаем Resolve in merge\n", - "\n", - "26. Напишите правильное утверждение\n", - " -Зелёное то что пришло с гитхаба и синее локальные изменения или синее то что пришло с гитхаба и зелёное это локальные изменения\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=998\n", - "\n", - " Зеленное, это то, что мы стянули из репозитория\n", - " Синее наше локальные изменения\n", - "\n", - "27. Если мы работаем в одном файле, можно ли принять pull после того как вы спрячете в стэш свои изменения?\n", - "\n", - " Ответ:\n", - "\n", - " Да, можно\n", - " Если спрячем, то ничего не произойдет, изменения затянуться из github\n", - "\n", - " 27.1) Что может произойти когда stash восстановите после принятия pull?\n", - "\n", - " Ответ:\n", - "\n", - " Может произойти конфликт\n", - "\n", - "28. Сколько способов решения конфликтов было показано в видео? Напишите ЧИСЛО и укажите их способы.\n", - "\n", - " Ответ:\n", - "\n", - " 2 способа:\n", - " С помощью применения через акцепт и инкоминг\n", - " Вручную убрав все лишнее.\n", - "\n", - "29. Что делает кнопка complete merge?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=1062\n", - " Смерживает конечные изменения из конфликтов в один.\n", - "\n", - "30. В какой чат нужно писать если остались вопросы?\n", - "\n", - " Ответ:\n", - "\n", - " HELP ME (bags&reports)\n", - " https://t.me/c/1937296927/2415\n", - "\n", - "31. Что такое FORK? Зачем его делают?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=1146\n", - " Форк - это копия чужого репозитория оригинального репозитория в свое хранилище репозиториев.\n", - " Делают для того, чтобы работать с оригинальной репой не изменяя исходного проекта, а помогать править баги, улучшать, или отдельно на основании этого проекта делать свое\n", - "\n", - "32. Как скачать форкнутый репозиторий на локальный компьютер?\n", - "\n", - " Ответ:\n", - "\n", - " Через github desktop выбрав нужный в списке\n", - " Консольная команде git clone название_репы\n", - "\n", - "33. С какой вероятностью ваши ошибки были уже решены? и кто их решил?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=764\n", - " С вероятностью 90%\n", - " Их решил: Сенаторов Руслан Олегович\n", - "\n", - "34. Как создать файл в vs code?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=53\n", - " Нажимаем листочек с плюсиком и называем файл как нам нужно\n", - "\n", - "35. # Файл лога нужно заполнять в конце каждого урока?\n", - "\n", - " Ответ:\n", - "\n", - " https://youtu.be/hW_7hodGxVU?t=70\n", - " Да, нужно\n", - "\n", - "Дополнительные вопросы:\n", - "\n", - "1. Какая команда конвертирует файл в py из ipynb?\n", - " подсказка https://t.me/c/1937296927/1/26527\n", - "\n", - "Ответ:\n", - "jupytext --to py filename.ipynb или через расширение VS Code (Jupytext)\n", - "\n", - "2. Что такое пакетный менеджер? Вы пользуетесь пакетным менеджером conda или pip? Какой лучше использовать для дата сайнс?\n", - "\n", - "Ответ:\n", - "\n", - "Пакетный менеджер — инструмент для установки и управления библиотеками/пакетами.\n", - "Для дата сайнс лучше использовать conda — он управляет не только Python-пакетами, но и зависимостями системы, библиотеками (NumPy, SciPy) с нативными расширениями.\n", - "\n", - "3. Почему расширение py лучше чем ipynb?\n", - "\n", - "Ответ:\n", - "\n", - "- Удобнее для версионирования (Git лучше работает с текстом)\n", - "- Линтеры (Pylint, Flake8) корректно работают только с .py\n", - "- Проще ревью кода\n", - "- Лучше для продакшн-кода и автоматизации\n", - "\n", - "4. Что такое pep8?\n", - " подсказка:https://peps.python.org/pep-0008/\n", - "\n", - "Ответ:\n", - "\n", - "PEP 8 — официальный стиль кода Python. Рекомендации по форматированию, именованию, структуре для единообразия.\n", - "\n", - "4.1) линтеры проверяют на соблюдение pep8?\n", - "\n", - "Ответ:\n", - "\n", - "Да. Flake8 и Pylint проверяют соответствие PEP 8 (стиль, именование, форматирование).\n", - "\n", - "4.2) Какая нотация используется для создания переменных?\n", - "ответ на 85-95 страницы https://t.me/c/1937296927/1/16676\n", - "\n", - "Ответ:\n", - "\n", - "snake_case (нижний регистр, слова разделяются подчеркиванием), например: my_variable_name\n", - "\n", - "4.3) Может ли переменная состоять из одной буквы например андерскор \"\\_\" ?\n", - "\n", - "Ответ:\n", - "Да. \\_ — валидная переменная, часто используется как временная или неиспользуемая.\n", - "\n", - "4.4) Зачем и где мы используем андерскор \\_\n", - "\n", - "Ответ:\n", - "\n", - "- _ — временная/неиспользуемая переменная (например, в unpacking: x, _, z = data)\n", - "- Два \\_\\_ в начале — приватные атрибуты/методы\n", - "- _ в конце — избежание конфликта с ключевыми словами (class_)\n", - "\n", - " 4.5) По PEP8 допустима переменная в одну букву?\n", - " ответ на 85-95 страницы https://t.me/c/1937296927/1/16676\n", - "\n", - "Ответ:\n", - "\n", - "Да, но не рекомендуется для обычных переменных. Допустимо в исключениях: циклы (for i in range(5), for x, y in points), малые области видимости. Лучше использовать понятные имена.\n" - ] - } - ], - "metadata": { - "language_info": { - "name": "python" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/quiz1.py b/quiz1.py deleted file mode 100644 index 8cf4aa29..00000000 --- a/quiz1.py +++ /dev/null @@ -1,413 +0,0 @@ -"""Квиз 1.""" - -# Список вопросов к видео https://youtu.be/hW_7hodGxVU?si=tCEVs00xGt2q61eW (АЛГОРИТМ ПРИНЯТИЯ И ОТДАЧИ ДОМАШКИ): -# -# (По желанию )В ответе подробно всё опишите и обязательно нужно указывать тайм код из видео где я это сказал, по желанию, дополнительно прикладываем скриншот из видео. -# Если вы знаете ответы на вопросы из Вашего опыта, то таймкоды из видео не надо указывать и т.д. -# -# 1. Как понять, что домашка пришла? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=8 -# Заходим в чатик HomeWork видим ник и прими пул -# -# 2. Как принять домашку? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=17 -# Заходим в гитхаб десктоп нажимаем fetch origin. -# -# 3. Зачем нужна кнопка history и какие функции появляются при нажатии правой кнопки мыши на коммит? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=29 -# -# В хистори мы видим, что произошло с нашим репозиторием -# -# 3.1) Где брать ссылку на коммит? куда её отправлять? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=229 -# -# Нажимаем в хистори View on Github и перемещаемся в гитхаб там будет в адресной строке ссылка на коммит -# Отправляем её в чат HomeWork с припиской коммит отдал ссылка*на*коммит. -# -# 4. Что такое файл лога? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=70 -# Файл лога - это файл содержащий информацию о том, что мы делали за все уроки по датам. -# -# 4.1) Когда нужно его пушить? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=70 -# Когда заканчиваем урок -# -# 5. Что такое интерпретатор? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=169 -# Программа которая читает и запускает наш код -# -# 6. Где можно выбрать интерпретатор? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=163 -# Нажимаем слева запуск кода или сверху в правом углу выбираем нужный нам интерпретатор -# -# 7. Что такое модуль? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=526 -# Модуль это обычный файлик с расширение .py или .ipynb -# -# 8. Как создать и отправить коммит? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=193 -# Заходим в гитхаб отмечаем нужные изменения, пишем название коммит и нажимаем кнопку коммит -# -# 9. Как посмотреть что коммит точно отправлен и находится в github? -# -# Ответ: -# -# В хистори будет видно, да и view on github даст ссылку на коммит -# -# 10. Какая команда показывает что код не прошёл проверки на ошибки? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=363 -# pre-commit run --all-files -# -# 10.1) Напишите список линтеров которые используются для проверки кода и дайте их краткую характеристику. -# -# Ответ: -# -# Flake8 — базовая проверка стиля -# Mypy — проверка типов -# Pylint — дополнительный анализ (по необходимости) -# Pydocstyle — проверка документации (по необходимости) -# -# 11. Как узнать какой именно линтер не прошёл проверку? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=370 -# В консоле после запуска линтеров будет статус выполнения и по статусу можно определить успешность по каждому линтеру. -# -# 12. Линтер Pylint видит markdown? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=425 -# Нет -# -# 13. Номер ячейки в терминале и номер ячейки в vs code может отличаться? в каком случае? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=437 -# Да, может отличаться, в случае если есть ячейки с маркдовн, из за того, что линтер их не видит, он их не учитывает, поэтому количество может быть разным -# -# 14. Где посмотреть номер ячейки в vscode? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=455 -# можем посмотреть внизу справа -# -# 15. В каком формате ipynb отправляется в гитхаб? причём здесь JSON? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=204 -# В формате JSON, приложение github desktop отображает файлы формата ipynb в формате json -# -# 16. Где посмотреть в какой ячейке ошибка? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=462 -# Можем посмотреть по коду ошибки, где не так или нажать Ctrl + F и найти где ошибка -# -# 17. Как запустить терминал? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=353 -# Меню терминал - новый терминал -# -# 18. Что такое линтер? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=375 -# Линтер это программа которая проверяет на корректность стандартам -# -# 19. В какой сайт нужно вставлять код ошибки если ошибка связана с pylint? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=495 -# На сайте пайлинта https://pylint.readthedocs.io/ -# -# 20. Секция pydocstyle в большинстве случае автоматический закрывается после исправления ошибок в каком линтере? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=587 -# После исправления ошибок в линтере pylint -# -# 21. Что такое описание модуля? Оно должно отражать информацию о том что находится в модуле? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=563 -# Описание модуля это какая информация у нас в модуле. Да, оно должно отображать информацию о модуле. -# -# 21.1) С какой git команды начинается утро программиста? -# -# Ответ: -# -# fetch origin -# -# 22. После внесения изменений в файлах, кнопка open in vs code пропадает в кошке, как по другому открыть vs code из кошки? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=855 -# Чтобы попасть из github desktop в vs code, нужно нажать на Current repository и выбрать Open VS code -# -# 23. Что такое stash? Общее объяснение концепции. -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=921 -# stash - буффер обмена и локальные изменения "прячутся" -# Концепция, нужна если мы что-то делали, но нам нужно резко, что-то делать другое, не коммитя изменения в репозиторий, мы можем сохранить в буффер обмена, для дальнейшего использования, пряча новые изменения. -# -# 23.1) Как сохранить стэш? -# -# Ответ: -# -# git командa(подсказка: https://t.me/c/1937296927/3602/19531): -# git stash save "NAME_STASH" - сохранение в буффер обмена -# git stash apply "NUMBER_STASH" - извлечения из буффера обмена -# -# Кнопка в vs code: Stash changes and continue -# -# 23.2) Как восстановить стэш(подсказка: https://t.me/c/1937296927/3602/25747)?: -# -# git команда(подсказка: https://t.me/c/1937296927/3602/19531)?: -# -# Ответ: -# -# git stash apply "NUMBER_STASH" -# -# 23.3) Различие между стэшем и коммитом. -# -# Ответ: -# -# Когда лучше сохранить изменения в стэше, а когда коммитить. -# Коммитить когда мы четко понимаем, что закончили с какой-то итерацией и можем выложить в ветку. Стешить, когда нам нужно быстро переключиться, с еще не доделанной работы, чтобы отдельно не плодить коммитов, с еще пока не готовым функционалом -# -# 23.4) Как просмотреть список сохраненных стэшей? -# git команда (подсказка: https://t.me/c/1937296927/3602/19531): -# -# Ответ: -# -# git stash list -# -# 23.5) Как удалить стэш? -# Команды для удаления отдельных стэшей или всех сразу. -# git команда (подсказка: https://t.me/c/1937296927/3602/19531): -# -# Ответ: -# -# git stash drop -# git stash clear -# -# 23.6) Практические примеры использования стэша. Краткие сценарии, где стэш помогает. -# -# Ответ: -# -# Спрятать изменения в моменте, когда нужно поработать над другой задачей. -# Спрятать изменения при конфликте, для дальнейшего резолва изменений с актуальной веткой -# -# 24. Где посмотреть что есть конфликт в файлах? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=969 -# В changes будет у строчки восклицательный знак в github desktop, нажимаем правой кнопкой где восклицательный знак и выбираем Open VS code -# -# 24.1) Когда он появляется? -# -# Ответ: -# -# Когда мы редактируем одинаковые файлы и получается у нас накладываются строчки из за этого возникает конфликт -# -# 25. Как решить конфликт в файлах? -# -# Ответ: -# -# Выбираем изменения которые нам нужны, убираем те что не нужны и нажимаем Resolve in merge -# -# 26. Напишите правильное утверждение -# -Зелёное то что пришло с гитхаба и синее локальные изменения или синее то что пришло с гитхаба и зелёное это локальные изменения -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=998 -# -# Зеленное, это то, что мы стянули из репозитория -# Синее наше локальные изменения -# -# 27. Если мы работаем в одном файле, можно ли принять pull после того как вы спрячете в стэш свои изменения? -# -# Ответ: -# -# Да, можно -# Если спрячем, то ничего не произойдет, изменения затянуться из github -# -# 27.1) Что может произойти когда stash восстановите после принятия pull? -# -# Ответ: -# -# Может произойти конфликт -# -# 28. Сколько способов решения конфликтов было показано в видео? Напишите ЧИСЛО и укажите их способы. -# -# Ответ: -# -# 2 способа: -# С помощью применения через акцепт и инкоминг -# Вручную убрав все лишнее. -# -# 29. Что делает кнопка complete merge? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=1062 -# Смерживает конечные изменения из конфликтов в один. -# -# 30. В какой чат нужно писать если остались вопросы? -# -# Ответ: -# -# HELP ME (bags&reports) -# https://t.me/c/1937296927/2415 -# -# 31. Что такое FORK? Зачем его делают? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=1146 -# Форк - это копия чужого репозитория оригинального репозитория в свое хранилище репозиториев. -# Делают для того, чтобы работать с оригинальной репой не изменяя исходного проекта, а помогать править баги, улучшать, или отдельно на основании этого проекта делать свое -# -# 32. Как скачать форкнутый репозиторий на локальный компьютер? -# -# Ответ: -# -# Через github desktop выбрав нужный в списке -# Консольная команде git clone название_репы -# -# 33. С какой вероятностью ваши ошибки были уже решены? и кто их решил? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=764 -# С вероятностью 90% -# Их решил: Сенаторов Руслан Олегович -# -# 34. Как создать файл в vs code? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=53 -# Нажимаем листочек с плюсиком и называем файл как нам нужно -# -# 35. # Файл лога нужно заполнять в конце каждого урока? -# -# Ответ: -# -# https://youtu.be/hW_7hodGxVU?t=70 -# Да, нужно -# -# Дополнительные вопросы: -# -# 1. Какая команда конвертирует файл в py из ipynb? -# подсказка https://t.me/c/1937296927/1/26527 -# -# Ответ: -# jupytext --to py filename.ipynb или через расширение VS Code (Jupytext) -# -# 2. Что такое пакетный менеджер? Вы пользуетесь пакетным менеджером conda или pip? Какой лучше использовать для дата сайнс? -# -# Ответ: -# -# Пакетный менеджер — инструмент для установки и управления библиотеками/пакетами. -# Для дата сайнс лучше использовать conda — он управляет не только Python-пакетами, но и зависимостями системы, библиотеками (NumPy, SciPy) с нативными расширениями. -# -# 3. Почему расширение py лучше чем ipynb? -# -# Ответ: -# -# - Удобнее для версионирования (Git лучше работает с текстом) -# - Линтеры (Pylint, Flake8) корректно работают только с .py -# - Проще ревью кода -# - Лучше для продакшн-кода и автоматизации -# -# 4. Что такое pep8? -# подсказка:https://peps.python.org/pep-0008/ -# -# Ответ: -# -# PEP 8 — официальный стиль кода Python. Рекомендации по форматированию, именованию, структуре для единообразия. -# -# 4.1) линтеры проверяют на соблюдение pep8? -# -# Ответ: -# -# Да. Flake8 и Pylint проверяют соответствие PEP 8 (стиль, именование, форматирование). -# -# 4.2) Какая нотация используется для создания переменных? -# ответ на 85-95 страницы https://t.me/c/1937296927/1/16676 -# -# Ответ: -# -# snake_case (нижний регистр, слова разделяются подчеркиванием), например: my_variable_name -# -# 4.3) Может ли переменная состоять из одной буквы например андерскор "\_" ? -# -# Ответ: -# Да. \_ — валидная переменная, часто используется как временная или неиспользуемая. -# -# 4.4) Зачем и где мы используем андерскор \_ -# -# Ответ: -# -# - _ — временная/неиспользуемая переменная (например, в unpacking: x, _, z = data) -# - Два \_\_ в начале — приватные атрибуты/методы -# - _ в конце — избежание конфликта с ключевыми словами (class_) -# -# 4.5) По PEP8 допустима переменная в одну букву? -# ответ на 85-95 страницы https://t.me/c/1937296927/1/16676 -# -# Ответ: -# -# Да, но не рекомендуется для обычных переменных. Допустимо в исключениях: циклы (for i in range(5), for x, y in points), малые области видимости. Лучше использовать понятные имена. -# diff --git a/quiz2.ipynb b/quiz2.ipynb deleted file mode 100644 index 76439762..00000000 --- a/quiz2.ipynb +++ /dev/null @@ -1,244 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "id": "9034c435", - "metadata": { - "vscode": { - "languageId": "plaintext" - } - }, - "outputs": [], - "source": [ - "\"\"\"Квиз 2.\"\"\"" - ] - }, - { - "cell_type": "markdown", - "id": "9b9ba45f", - "metadata": {}, - "source": [ - "Список вопросов к видео https://youtu.be/Si9MfV8uJ-0?si=JXHe-tsgOEwSTI5E (НАСТРОЙКА VSCODE, перенос строк, линтеры, работа с ячейками):\n", - "\n", - "(По желанию)В ответе подробно всё опишите и обязательно нужно указывать тайм код из видео где я это сказал, по желанию, дополнительно прикладываем скриншот из видео.\n", - "Если вы знаете ответы на вопросы из Вашего опыта, то таймкоды из видео не надо указывать и т.д.\n", - "\n", - "1. Как включить автосохранение данных в VSCODE?\n", - "\n", - "Ответ:\n", - "\n", - "https://youtu.be/Si9MfV8uJ-0?t=11\n", - "File - Auto Save\n", - "\n", - "2. Как настроить перенос строки?\n", - "\n", - "Ответ:\n", - "\n", - "https://youtu.be/Si9MfV8uJ-0?t=18\n", - "File - Preferences - Settings - 'wrap'\n", - "wordWrapColumn\n", - "\n", - "3. Сколько символов по pep8 разрешено на строке?\n", - "\n", - "Ответ:\n", - "\n", - "https://youtu.be/Si9MfV8uJ-0?t=21\n", - "79\n", - "\n", - "4. Какие способы переноса строк показаны в видео:\n", - "\n", - "4.1 Строки с использованием обратного слэша (\\)\n", - "\n", - "string_continued = \"This is a long string that we want to \" \\\n", - " \"split across multiple lines.\"\n", - "print(string_continued)\n", - "\n", - "4.2 Тройные кавычки (''' или \"\"\")\n", - "\n", - "multi_line_string = \"\"\"This is a string that spans\n", - "multiple lines. You can write freely\n", - "and it will keep the line breaks.\"\"\"\n", - "print(multi_line_string)\n", - "\n", - "4.3 Создание списка строк и объединение с помощью join\n", - "\n", - "strings = [\n", - "\"This is the first line.\",\n", - "\"This is the second line.\",\n", - "\"This is the third line.\"\n", - "]\n", - "result = \"\\n\".join(strings) # Используем перенос строк '\\n'\n", - "print(result)\n", - "\n", - "4.4 Использование круглых скобок для продолжения строки\n", - "long_string = (\n", - "\"This is a very long string that I would like to \"\n", - "\"continue on the next line.\"\n", - ")\n", - "print(long_string)\n", - "\n", - "4.5 Форматированные строки (f-строки) с использованием скобок\n", - "letter_a = 5\n", - "letter_b = 6\n", - "product_ab = letter_a \\* letter_b\n", - "\n", - "message = (\n", - "f\"when {letter_a} is multiplied by {letter_b}, \"\n", - "f\"the result is {product_ab}\"\n", - ")\n", - "print(message)\n", - "\n", - "4.6 Сложение строк с помощью +\n", - "\n", - "string_part1 = \"This is the first part, \"\n", - "string_part2 = \"and this is the second part.\"\n", - "full_string = string_part1 + string_part2\n", - "print(full_string)\n", - "\n", - "Ответ:\n", - "\n", - "4.6\n", - "\n", - "5. Проверка на ошибки c помощью кнопки problems, где она находится?\n", - "\n", - "Ответ:\n", - "\n", - "https://youtu.be/Si9MfV8uJ-0?t=286\n", - "В нижней части экрана, самая левая первая вкладка\n", - "\n", - "6. Где в vscode находится клиент гита? как в нём отправить коммит? как принять домашку?\n", - "\n", - "Ответ:\n", - "\n", - "https://youtu.be/Si9MfV8uJ-0?t=382\n", - "слева на панели Git Source Control\n", - "\n", - "7. Что такое GIT? он локальный? В нём можно посмотреть историю изменений файлов и вернуться к любому коммиту?\n", - "\n", - "Ответ:\n", - "\n", - "GIT - это система контроля версий.\n", - "Да, он поддерживает локальный режим работы, как и удаленный.\n", - "Да, можно посмотреть историю, вернуться и следить за репозиторием.\n", - "\n", - "8. Как вставить картинку в маркдаун?\n", - "\n", - "Ответ:\n", - "https://youtu.be/Si9MfV8uJ-0?t=476\n", - "Ctrl + C, Ctrl + V\n", - "\n", - "9. Где посмотреть длину строки в vs code?\n", - "\n", - "Ответ:\n", - "\n", - "Внизу IDE отображается количество символов в строке\n", - "\n", - "10. Как поменять тип ячейки с питона на маркдаун?\n", - "\n", - "Ответ:\n", - "\n", - "В правом нижнем углу на ячейке\n", - "\n", - "11. Как запустить сразу все ячейки в юпитере?\n", - "\n", - "Ответ:\n", - "\n", - "https://youtu.be/Si9MfV8uJ-0?t=508\n", - "Run All\n", - "\n", - "12. Как изменить размер картинки в юпитере? Нужно для этого знать HTML?\n", - "\n", - "Ответ:\n", - "\n", - "https://youtu.be/Si9MfV8uJ-0?t=495\n", - "тэг img. Да, для этого нужно понимать теги.\n", - "\n", - "13. Какой хоткей чтобы запустить ячейку с смещением на следующую?\n", - "\n", - "Ответ:\n", - "\n", - "https://youtu.be/Si9MfV8uJ-0?t=522\n", - "Shift + Enter\n", - "\n", - "14. Как включить отображение номеров строк в юпитере(Cell line numbers)?\n", - "\n", - "Ответ:\n", - "\n", - "https://youtu.be/Si9MfV8uJ-0?t=540\n", - "В верхнем всплывающем меню ячейки нажать Show Cell line numbers\n", - "\n", - "15. Что такое \"Go To\" чем это полезно? Как перейти сразу на ошибочную ячейку?\n", - "\n", - "Ответ:\n", - "\n", - "https://youtu.be/Si9MfV8uJ-0?t=568\n", - "Видим какая ячейка отвалилась после нажатия, каждое нажатие следующая ошибка\n", - "\n", - "16. Как очистить вывод ячеек которые уже запущены?\n", - "\n", - "Ответ:\n", - "\n", - "https://youtu.be/Si9MfV8uJ-0?t=641\n", - "Clear All outputs\n", - "\n", - "17. Как работать одновременно в нескольких файлах в VSCODE? Что такое SPLIT?\n", - "\n", - "Ответ:\n", - "\n", - "https://youtu.be/Si9MfV8uJ-0?t=656\n", - "Split Editor и экран разделяется на несколько рабочих областей\n", - "\n", - "18. Каким сочетанием убирается левый сайдбар?\n", - "\n", - "Ответ:\n", - "\n", - "Ctrl + B\n", - "\n", - "19. Кнопка два листочка это наши локальные файлы?\n", - "\n", - "Ответ:\n", - "\n", - "Да, это кнопка которая открывает локальный эксплорер с нашими файлами проекта, или папки где мы находимся в данный момент\n", - "\n", - "20. Какая ошибка появилась в трассировке при запуске всех ячеек DICT или LIST?\n", - "\n", - "Ответ:\n", - "\n", - "https://youtu.be/Si9MfV8uJ-0?t=563\n", - "DICT\n", - "\n", - "21. Вы ознакомились с https://t.me/c/1937296927/832/19307? и https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet?\n", - "\n", - "Ответ:\n", - "\n", - "Ознакомился\n", - "\n", - "22. Что такое валидация?\n", - "\n", - "Ответ:\n", - "\n", - "Валидация - это способ проверки данных на корректность по определенным правилам\n", - "\n", - "23. Что такое трассировка ошибки?\n", - "\n", - "Ответ:\n", - "\n", - "Трассировка ошибки - это информация от того момента где произошла ошибка, до момента начала её вызова.\n", - "\n", - "24. Что значит отвалился интерпретатор?\n", - "\n", - "Ответ:\n", - "\n", - "Значит то, что по тем или иным причинам интерпретатор не может выполнить код, может быть связано с отсутствием интерпретатора, или ошибками работы программы.\n" - ] - } - ], - "metadata": { - "language_info": { - "name": "python" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/quiz2.py b/quiz2.py deleted file mode 100644 index fd49a477..00000000 --- a/quiz2.py +++ /dev/null @@ -1,215 +0,0 @@ -"""Квиз 2.""" - -# Список вопросов к видео https://youtu.be/Si9MfV8uJ-0?si=JXHe-tsgOEwSTI5E (НАСТРОЙКА VSCODE, перенос строк, линтеры, работа с ячейками): -# -# (По желанию)В ответе подробно всё опишите и обязательно нужно указывать тайм код из видео где я это сказал, по желанию, дополнительно прикладываем скриншот из видео. -# Если вы знаете ответы на вопросы из Вашего опыта, то таймкоды из видео не надо указывать и т.д. -# -# 1. Как включить автосохранение данных в VSCODE? -# -# Ответ: -# -# https://youtu.be/Si9MfV8uJ-0?t=11 -# File - Auto Save -# -# 2. Как настроить перенос строки? -# -# Ответ: -# -# https://youtu.be/Si9MfV8uJ-0?t=18 -# File - Preferences - Settings - 'wrap' -# wordWrapColumn -# -# 3. Сколько символов по pep8 разрешено на строке? -# -# Ответ: -# -# https://youtu.be/Si9MfV8uJ-0?t=21 -# 79 -# -# 4. Какие способы переноса строк показаны в видео: -# -# 4.1 Строки с использованием обратного слэша (\) -# -# string_continued = "This is a long string that we want to " \ -# "split across multiple lines." -# print(string_continued) -# -# 4.2 Тройные кавычки (''' или """) -# -# multi_line_string = """This is a string that spans -# multiple lines. You can write freely -# and it will keep the line breaks.""" -# print(multi_line_string) -# -# 4.3 Создание списка строк и объединение с помощью join -# -# strings = [ -# "This is the first line.", -# "This is the second line.", -# "This is the third line." -# ] -# result = "\n".join(strings) # Используем перенос строк '\n' -# print(result) -# -# 4.4 Использование круглых скобок для продолжения строки -# long_string = ( -# "This is a very long string that I would like to " -# "continue on the next line." -# ) -# print(long_string) -# -# 4.5 Форматированные строки (f-строки) с использованием скобок -# letter_a = 5 -# letter_b = 6 -# product_ab = letter_a \* letter_b -# -# message = ( -# f"when {letter_a} is multiplied by {letter_b}, " -# f"the result is {product_ab}" -# ) -# print(message) -# -# 4.6 Сложение строк с помощью + -# -# string_part1 = "This is the first part, " -# string_part2 = "and this is the second part." -# full_string = string_part1 + string_part2 -# print(full_string) -# -# Ответ: -# -# 4.6 -# -# 5. Проверка на ошибки c помощью кнопки problems, где она находится? -# -# Ответ: -# -# https://youtu.be/Si9MfV8uJ-0?t=286 -# В нижней части экрана, самая левая первая вкладка -# -# 6. Где в vscode находится клиент гита? как в нём отправить коммит? как принять домашку? -# -# Ответ: -# -# https://youtu.be/Si9MfV8uJ-0?t=382 -# слева на панели Git Source Control -# -# 7. Что такое GIT? он локальный? В нём можно посмотреть историю изменений файлов и вернуться к любому коммиту? -# -# Ответ: -# -# GIT - это система контроля версий. -# Да, он поддерживает локальный режим работы, как и удаленный. -# Да, можно посмотреть историю, вернуться и следить за репозиторием. -# -# 8. Как вставить картинку в маркдаун? -# -# Ответ: -# https://youtu.be/Si9MfV8uJ-0?t=476 -# Ctrl + C, Ctrl + V -# -# 9. Где посмотреть длину строки в vs code? -# -# Ответ: -# -# Внизу IDE отображается количество символов в строке -# -# 10. Как поменять тип ячейки с питона на маркдаун? -# -# Ответ: -# -# В правом нижнем углу на ячейке -# -# 11. Как запустить сразу все ячейки в юпитере? -# -# Ответ: -# -# https://youtu.be/Si9MfV8uJ-0?t=508 -# Run All -# -# 12. Как изменить размер картинки в юпитере? Нужно для этого знать HTML? -# -# Ответ: -# -# https://youtu.be/Si9MfV8uJ-0?t=495 -# тэг img. Да, для этого нужно понимать теги. -# -# 13. Какой хоткей чтобы запустить ячейку с смещением на следующую? -# -# Ответ: -# -# https://youtu.be/Si9MfV8uJ-0?t=522 -# Shift + Enter -# -# 14. Как включить отображение номеров строк в юпитере(Cell line numbers)? -# -# Ответ: -# -# https://youtu.be/Si9MfV8uJ-0?t=540 -# В верхнем всплывающем меню ячейки нажать Show Cell line numbers -# -# 15. Что такое "Go To" чем это полезно? Как перейти сразу на ошибочную ячейку? -# -# Ответ: -# -# https://youtu.be/Si9MfV8uJ-0?t=568 -# Видим какая ячейка отвалилась после нажатия, каждое нажатие следующая ошибка -# -# 16. Как очистить вывод ячеек которые уже запущены? -# -# Ответ: -# -# https://youtu.be/Si9MfV8uJ-0?t=641 -# Clear All outputs -# -# 17. Как работать одновременно в нескольких файлах в VSCODE? Что такое SPLIT? -# -# Ответ: -# -# https://youtu.be/Si9MfV8uJ-0?t=656 -# Split Editor и экран разделяется на несколько рабочих областей -# -# 18. Каким сочетанием убирается левый сайдбар? -# -# Ответ: -# -# Ctrl + B -# -# 19. Кнопка два листочка это наши локальные файлы? -# -# Ответ: -# -# Да, это кнопка которая открывает локальный эксплорер с нашими файлами проекта, или папки где мы находимся в данный момент -# -# 20. Какая ошибка появилась в трассировке при запуске всех ячеек DICT или LIST? -# -# Ответ: -# -# https://youtu.be/Si9MfV8uJ-0?t=563 -# DICT -# -# 21. Вы ознакомились с https://t.me/c/1937296927/832/19307? и https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet? -# -# Ответ: -# -# Ознакомился -# -# 22. Что такое валидация? -# -# Ответ: -# -# Валидация - это способ проверки данных на корректность по определенным правилам -# -# 23. Что такое трассировка ошибки? -# -# Ответ: -# -# Трассировка ошибки - это информация от того момента где произошла ошибка, до момента начала её вызова. -# -# 24. Что значит отвалился интерпретатор? -# -# Ответ: -# -# Значит то, что по тем или иным причинам интерпретатор не может выполнить код, может быть связано с отсутствием интерпретатора, или ошибками работы программы. -# From 615422438d6062d16946d9adf5961a5a3f04ec56 Mon Sep 17 00:00:00 2001 From: Pavel Demyanov Date: Sat, 10 Jan 2026 16:46:15 +0300 Subject: [PATCH 06/12] =?UTF-8?q?[TASK]=20=D0=92=D0=B8=D1=80=D1=82=D1=83?= =?UTF-8?q?=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=B5=20=D0=BE=D0=BA=D1=80=D1=83?= =?UTF-8?q?=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5=20#7=20(https://github.com/SENAT?= =?UTF-8?q?OROVAI/intro-cs/issues/7)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes https://github.com/SENATOROVAI/intro-cs/issues/7 --- .gitignore | 2 + environment.yml | 14 ++++ log.ipynb | 20 +++++- log.py | 10 +++ python/venv.ipynb | 165 ++++++++++++++++++++++++++++++++++++++++++++++ python/venv.py | 120 +++++++++++++++++++++++++++++++++ 6 files changed, 329 insertions(+), 2 deletions(-) create mode 100644 environment.yml create mode 100644 python/venv.ipynb create mode 100644 python/venv.py diff --git a/.gitignore b/.gitignore index 0fa2f447..73de31de 100644 --- a/.gitignore +++ b/.gitignore @@ -333,3 +333,5 @@ coverage/ /Math/calculus/theory /Math/school_theory + +SENATOROV/ diff --git a/environment.yml b/environment.yml new file mode 100644 index 00000000..bfb6b4c3 --- /dev/null +++ b/environment.yml @@ -0,0 +1,14 @@ +name: SENATOROV +channels: + - defaults +dependencies: + - certifi=2020.6.20=pyhd3eb1b0_3 + - pip=10.0.1=py35_0 + - python=3.5.6=he025d50_0 + - setuptools=40.2.0=py35_0 + - ucrt=10.0.22621.0=haa95532_0 + - vc=14.3=h2df5915_10 + - vc14_runtime=14.44.35208=h4927774_10 + - wheel=0.37.1=pyhd3eb1b0_0 + - wincertstore=0.2=py35hfebbdb8_0 +prefix: C:\Users\demya\anaconda3\envs\SENATOROV diff --git a/log.ipynb b/log.ipynb index 8995bca3..2aba5424 100644 --- a/log.ipynb +++ b/log.ipynb @@ -46,11 +46,27 @@ "4. https://github.com/SENATOROVAI/intro-cs/issues/6 - сделал пулл\n", "5. https://github.com/SENATOROVAI/intro-cs/issues/4 - сделал пулл\n" ] + }, + { + "cell_type": "markdown", + "id": "80e1b91d", + "metadata": {}, + "source": [ + "10/01\n", + "\n", + "1. Сделал из закрыл \n", + "https://github.com/SENATOROVAI/intro-cs/issues/6 \n", + "https://github.com/SENATOROVAI/intro-cs/issues/4\n", + "\n", + "2. Разобрался как принимать и делать ревью\n", + "\n", + "3. Сделал: https://github.com/SENATOROVAI/intro-cs/issues/7" + ] } ], "metadata": { "kernelspec": { - "display_name": ".venv", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -64,7 +80,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.9" + "version": "3.11.14" } }, "nbformat": 4, diff --git a/log.py b/log.py index 4c13c157..ef7427da 100644 --- a/log.py +++ b/log.py @@ -15,3 +15,13 @@ # 4. https://github.com/SENATOROVAI/intro-cs/issues/6 - сделал пулл # 5. https://github.com/SENATOROVAI/intro-cs/issues/4 - сделал пулл # + +# 10/01 +# +# 1. Сделал из закрыл +# https://github.com/SENATOROVAI/intro-cs/issues/6 +# https://github.com/SENATOROVAI/intro-cs/issues/4 +# +# 2. Разобрался как принимать и делать ревью +# +# 3. Сделал: https://github.com/SENATOROVAI/intro-cs/issues/7 diff --git a/python/venv.ipynb b/python/venv.ipynb new file mode 100644 index 00000000..7cb68bd3 --- /dev/null +++ b/python/venv.ipynb @@ -0,0 +1,165 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "2a9a83a7", + "metadata": {}, + "outputs": [], + "source": [ + "\"\"\"[TASK] Виртуальное окружение.\"\"\"" + ] + }, + { + "attachments": { + "image-2.png": { + "image/png": "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" + }, + "image-3.png": { + "image/png": "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" + }, + "image-4.png": { + "image/png": "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" + }, + "image.png": { + "image/png": "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" + } + }, + "cell_type": "markdown", + "id": "655bdf81", + "metadata": {}, + "source": [ + "1. Что делает команда python -m venv venv?\n", + "\n", + "Ответ:\n", + "Создает виртуальное окружение в папке venv\n", + "\n", + "1.1 Что делает каждая команда в списке ниже?\n", + "pip list\n", + "pip freeze > requirements.txt\n", + "pip install -r requirements.txt\n", + "\n", + "Ответ:\n", + "pip list - выводит список установленных пакетов Python с их версиями.\n", + "pip freeze > requirements.txt - сохраняет список установленных пакетов и их версий в файл requirements.txt.\n", + "pip install -r requirements.txt - устанавливает пакеты и версии, перечисленные в requirements.txt.\n", + "\n", + "2. Что делает каждая команда в списке ниже?\n", + " conda env list\n", + " conda create -n env_name python=3.5\n", + " conda env update -n env_name -f file.yml\n", + " source activate env_name\n", + " source deactivate\n", + "\n", + "conda clean -a\n", + "\n", + "Ответ:\n", + "\n", + "conda env list - выводит список всех созданных conda-окружений и указывает активное.\n", + "conda create -n env_name python=3.5 - создает новое окружение с именем env_name и Python 3.5.\n", + "conda env update -n env_name -f file.yml - обновляет окружение env_name зависимостями из YAML-файла.\n", + "source activate env_name - активирует окружение env_name.\n", + "source deactivate - деактивирует текущее окружение.\n", + "conda clean -a - удаляет кеш conda, неиспользуемые пакеты и индексные файлы для освобождения места.\n", + "\n", + "3. вставьте скрин вашего терминала, где вы активировали сначала venv, потом conda, назовите окружение \"SENATOROV\"\n", + "\n", + "Ответ:\n", + "\n", + "venv: ![image.png](attachment:image.png)\n", + "\n", + "conda: ![image-2.png](attachment:image-2.png)\n", + "\n", + "4. Как установить необходимые пакеты внутрь виртуального окружения для conda/venv?\n", + "\n", + "Ответ:\n", + "\n", + "venv:\n", + "\n", + "1. Активируйте окружение (Windows: `venv\\Scripts\\activate`, Linux/macOS: `source venv/bin/activate`)\n", + "2. Используйте pip: `pip install имя_пакета`\n", + "\n", + "conda:\n", + "\n", + "1. Активируйте окружение: `conda activate env_name` (или `source activate env_name` на Linux/macOS)\n", + "2. Используйте conda: `conda install имя_пакета` или pip: `pip install имя_пакета`\n", + "\n", + "5. Что делают эти команды?\n", + " pip freeze > requirements.txt\n", + " conda env export > environment.yml\n", + "\n", + "Ответ:\n", + "\n", + "pip freeze > requirements.txt - сохраняет все зависимости виртуального/глобального проекта в файл requirements.txt\n", + "conda env export > environment.yml - сохраняет все зависимости для Data Science виртуального/глобального проекта в файл environment.yml\n", + "\n", + "5.1 вставьте скрин, где будет видна папка VENV в вашем репозитории а также файлы зависимостей requirements.txt и environment.yml, файлы должны содержать зависимости\n", + "\n", + "Ответ:\n", + "![image-3.png](attachment:image-3.png)\n", + "\n", + "6. Что делают эти команды?\n", + " pip install -r requirements.txt\n", + " conda env create -f environment.yml.\n", + "\n", + "Ответ:\n", + "\n", + "pip install -r requirements.txt - устанавливает через pip зависимости из файла requirements.txt\n", + "conda env create -f environment.yml. - создает виртуальное окружение с помощью conda основанное на описание из environment.yml\n", + "\n", + "7. Что делают эти команды?\n", + " pip list\n", + " pip show,\n", + " conda list\n", + "\n", + "Ответ:\n", + "\n", + "pip list - выводит список всех установленных пакетов Python с их версиями в текущем окружении.\n", + "pip show имя_пакета - выводит подробную информацию о конкретном пакете.\n", + "conda list - выводит список всех установленных пакетов в текущем conda-окружении с их версиями и источниками установки.\n", + "\n", + "8. Где по умолчанию больше пакетов venv/pip или conda? и почему дата сайнинисты используют conda?\n", + "\n", + "Ответ:\n", + "\n", + "Обычно в conda, так как это уже готовая сборка под DS\n", + "дата сайнинисты используют обычно conda из-за того, что она специально настроена и имеет нужные пакеты для работы с DS\n", + "\n", + "\n", + "9. вставьте скрин где будет видно, Выбор интерпретатора Python (conda) в VS Code/cursor\n", + "\n", + "Ответ: ![image-4.png](attachment:image-4.png)\n", + "\n", + "10. добавьте в .gitignore папку SENATOROV \n", + "\n", + "Ответ: Добавил\n", + "\n", + "11. Зачем нужно виртуально окружение?\n", + "\n", + "Ответ:\n", + "Для изолированной работы от глобального окружения, в виртуальном окружении связанным непосредственно с текущим проектом и его задачами.\n", + "\n", + "12. С этого момента надо работать в виртуальном окружении conda, ты научился(-ась) выгружать зависимости и работать с окружением?\n", + "\n", + "Ответ: Да\n", + "\n", + "13. Удалите папку VENV, она больше не нужна, мы же не разрабы, нам нужна только conda\n", + "\n", + "Ответ: Удалил\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "base", + "language": "python", + "name": "python3" + }, + "language_info": { + "name": "python", + "version": "3.13.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/python/venv.py b/python/venv.py new file mode 100644 index 00000000..5128b71d --- /dev/null +++ b/python/venv.py @@ -0,0 +1,120 @@ +"""[TASK] Виртуальное окружение.""" + +# 1. Что делает команда python -m venv venv? +# +# Ответ: +# Создает виртуальное окружение в папке venv +# +# 1.1 Что делает каждая команда в списке ниже? +# pip list +# pip freeze > requirements.txt +# pip install -r requirements.txt +# +# Ответ: +# pip list - выводит список установленных пакетов Python с их версиями. +# pip freeze > requirements.txt - сохраняет список установленных пакетов и их версий в файл requirements.txt. +# pip install -r requirements.txt - устанавливает пакеты и версии, перечисленные в requirements.txt. +# +# 2. Что делает каждая команда в списке ниже? +# conda env list +# conda create -n env_name python=3.5 +# conda env update -n env_name -f file.yml +# source activate env_name +# source deactivate +# +# conda clean -a +# +# Ответ: +# +# conda env list - выводит список всех созданных conda-окружений и указывает активное. +# conda create -n env_name python=3.5 - создает новое окружение с именем env_name и Python 3.5. +# conda env update -n env_name -f file.yml - обновляет окружение env_name зависимостями из YAML-файла. +# source activate env_name - активирует окружение env_name. +# source deactivate - деактивирует текущее окружение. +# conda clean -a - удаляет кеш conda, неиспользуемые пакеты и индексные файлы для освобождения места. +# +# 3. вставьте скрин вашего терминала, где вы активировали сначала venv, потом conda, назовите окружение "SENATOROV" +# +# Ответ: +# +# venv: ![image.png](attachment:image.png) +# +# conda: ![image-2.png](attachment:image-2.png) +# +# 4. Как установить необходимые пакеты внутрь виртуального окружения для conda/venv? +# +# Ответ: +# +# venv: +# +# 1. Активируйте окружение (Windows: `venv\Scripts\activate`, Linux/macOS: `source venv/bin/activate`) +# 2. Используйте pip: `pip install имя_пакета` +# +# conda: +# +# 1. Активируйте окружение: `conda activate env_name` (или `source activate env_name` на Linux/macOS) +# 2. Используйте conda: `conda install имя_пакета` или pip: `pip install имя_пакета` +# +# 5. Что делают эти команды? +# pip freeze > requirements.txt +# conda env export > environment.yml +# +# Ответ: +# +# pip freeze > requirements.txt - сохраняет все зависимости виртуального/глобального проекта в файл requirements.txt +# conda env export > environment.yml - сохраняет все зависимости для Data Science виртуального/глобального проекта в файл environment.yml +# +# 5.1 вставьте скрин, где будет видна папка VENV в вашем репозитории а также файлы зависимостей requirements.txt и environment.yml, файлы должны содержать зависимости +# +# Ответ: +# ![image-3.png](attachment:image-3.png) +# +# 6. Что делают эти команды? +# pip install -r requirements.txt +# conda env create -f environment.yml. +# +# Ответ: +# +# pip install -r requirements.txt - устанавливает через pip зависимости из файла requirements.txt +# conda env create -f environment.yml. - создает виртуальное окружение с помощью conda основанное на описание из environment.yml +# +# 7. Что делают эти команды? +# pip list +# pip show, +# conda list +# +# Ответ: +# +# pip list - выводит список всех установленных пакетов Python с их версиями в текущем окружении. +# pip show имя_пакета - выводит подробную информацию о конкретном пакете. +# conda list - выводит список всех установленных пакетов в текущем conda-окружении с их версиями и источниками установки. +# +# 8. Где по умолчанию больше пакетов venv/pip или conda? и почему дата сайнинисты используют conda? +# +# Ответ: +# +# Обычно в conda, так как это уже готовая сборка под DS +# дата сайнинисты используют обычно conda из-за того, что она специально настроена и имеет нужные пакеты для работы с DS +# +# +# 9. вставьте скрин где будет видно, Выбор интерпретатора Python (conda) в VS Code/cursor +# +# Ответ: ![image-4.png](attachment:image-4.png) +# +# 10. добавьте в .gitignore папку SENATOROV +# +# Ответ: Добавил +# +# 11. Зачем нужно виртуально окружение? +# +# Ответ: +# Для изолированной работы от глобального окружения, в виртуальном окружении связанным непосредственно с текущим проектом и его задачами. +# +# 12. С этого момента надо работать в виртуальном окружении conda, ты научился(-ась) выгружать зависимости и работать с окружением? +# +# Ответ: Да +# +# 13. Удалите папку VENV, она больше не нужна, мы же не разрабы, нам нужна только conda +# +# Ответ: Удалил +# From 4f012c12ddd0a4c302d7c99645bcdd22dba2aca8 Mon Sep 17 00:00:00 2001 From: Pavel Demyanov Date: Thu, 15 Jan 2026 02:17:11 +0300 Subject: [PATCH 07/12] fix: financial rounding --- file-commit.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 file-commit.txt diff --git a/file-commit.txt b/file-commit.txt new file mode 100644 index 00000000..833d8cf2 --- /dev/null +++ b/file-commit.txt @@ -0,0 +1 @@ +fix: financial rounding \ No newline at end of file From bb8f1af260ea5c1d363bf04e9cef52e60a2c4f1b Mon Sep 17 00:00:00 2001 From: Pavel Demyanov Date: Thu, 15 Jan 2026 02:18:39 +0300 Subject: [PATCH 08/12] feat: add function generateReport --- file-commit.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/file-commit.txt b/file-commit.txt index 833d8cf2..8cea3986 100644 --- a/file-commit.txt +++ b/file-commit.txt @@ -1 +1 @@ -fix: financial rounding \ No newline at end of file +feat: add function generateReport \ No newline at end of file From cdd2739c33dc050c881d353f9c7f81c16f9f0e32 Mon Sep 17 00:00:00 2001 From: Pavel Demyanov Date: Thu, 15 Jan 2026 02:18:57 +0300 Subject: [PATCH 09/12] style: replace style errors --- file-commit.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/file-commit.txt b/file-commit.txt index 8cea3986..4aeeb22d 100644 --- a/file-commit.txt +++ b/file-commit.txt @@ -1 +1 @@ -feat: add function generateReport \ No newline at end of file +style: replace style errors \ No newline at end of file From d456b096ffc54869dbfe438834e6653f82a07f23 Mon Sep 17 00:00:00 2001 From: Pavel Demyanov Date: Thu, 15 Jan 2026 02:19:17 +0300 Subject: [PATCH 10/12] docs: add new article in wiki --- file-commit.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/file-commit.txt b/file-commit.txt index 4aeeb22d..99530c4f 100644 --- a/file-commit.txt +++ b/file-commit.txt @@ -1 +1 @@ -style: replace style errors \ No newline at end of file +docs: add new article in wiki \ No newline at end of file From d9a8a6fbb5e5a04965a98b3ee6dd847167c95e6d Mon Sep 17 00:00:00 2001 From: Pavel Demyanov Date: Thu, 15 Jan 2026 02:19:38 +0300 Subject: [PATCH 11/12] test: add mock tests --- file-commit.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/file-commit.txt b/file-commit.txt index 99530c4f..d2c107d0 100644 --- a/file-commit.txt +++ b/file-commit.txt @@ -1 +1 @@ -docs: add new article in wiki \ No newline at end of file +test: add mock tests \ No newline at end of file From bdb87a3ca85289f06fdc96a5814c80eaf3e15d3c Mon Sep 17 00:00:00 2001 From: Pavel Demyanov Date: Thu, 15 Jan 2026 02:27:30 +0300 Subject: [PATCH 12/12] [TASK] Commits #5 (https://github.com/SENATOROVAI/intro-cs/issues/5) Closes https://github.com/SENATOROVAI/intro-cs/issues/5 --- .gitignore | 4 ++ docs/git/git_command.py | 15 ++++++++ docs/git/intro_to_git.py | 15 ++++++++ environment.yml | 14 ------- file-commit.txt | 1 - log.py | 15 ++++++++ pyproject.toml | 4 -- python/commits.ipynb | 83 ++++++++++++++++++++++++++++++++++++++++ python/commits.py | 67 ++++++++++++++++++++++++++++++++ python/cpython.py | 11 ++++++ python/venv.ipynb | 5 +-- python/venv.py | 18 ++++++++- 12 files changed, 228 insertions(+), 24 deletions(-) delete mode 100644 environment.yml delete mode 100644 file-commit.txt delete mode 100644 pyproject.toml create mode 100644 python/commits.ipynb create mode 100644 python/commits.py diff --git a/.gitignore b/.gitignore index 73de31de..8e82771c 100644 --- a/.gitignore +++ b/.gitignore @@ -335,3 +335,7 @@ coverage/ /Math/school_theory SENATOROV/ + +environment.yml +poetry.lock +pyproject.toml \ No newline at end of file diff --git a/docs/git/git_command.py b/docs/git/git_command.py index ec244539..2b872e7d 100644 --- a/docs/git/git_command.py +++ b/docs/git/git_command.py @@ -1,3 +1,18 @@ +# --- +# jupyter: +# jupytext: +# formats: ipynb,py:light +# text_representation: +# extension: .py +# format_name: light +# format_version: '1.5' +# jupytext_version: 1.16.4 +# kernelspec: +# display_name: Python 3 +# language: python +# name: python3 +# --- + """Конспект базовых команд Git и их описание. Этот ноутбук содержит основные команды Git, сгруппированные по категориям: diff --git a/docs/git/intro_to_git.py b/docs/git/intro_to_git.py index a2d8e660..43266b13 100644 --- a/docs/git/intro_to_git.py +++ b/docs/git/intro_to_git.py @@ -1,3 +1,18 @@ +# --- +# jupyter: +# jupytext: +# formats: ipynb,py:light +# text_representation: +# extension: .py +# format_name: light +# format_version: '1.5' +# jupytext_version: 1.16.4 +# kernelspec: +# display_name: Python 3 +# language: python +# name: python3 +# --- + """Git и организация программных проектов.""" #

Системы контроля версий представляют собой программные средства, которые регистрируют все изменения в исходном коде и позволяют легко восстановить старые версии.

diff --git a/environment.yml b/environment.yml deleted file mode 100644 index bfb6b4c3..00000000 --- a/environment.yml +++ /dev/null @@ -1,14 +0,0 @@ -name: SENATOROV -channels: - - defaults -dependencies: - - certifi=2020.6.20=pyhd3eb1b0_3 - - pip=10.0.1=py35_0 - - python=3.5.6=he025d50_0 - - setuptools=40.2.0=py35_0 - - ucrt=10.0.22621.0=haa95532_0 - - vc=14.3=h2df5915_10 - - vc14_runtime=14.44.35208=h4927774_10 - - wheel=0.37.1=pyhd3eb1b0_0 - - wincertstore=0.2=py35hfebbdb8_0 -prefix: C:\Users\demya\anaconda3\envs\SENATOROV diff --git a/file-commit.txt b/file-commit.txt deleted file mode 100644 index d2c107d0..00000000 --- a/file-commit.txt +++ /dev/null @@ -1 +0,0 @@ -test: add mock tests \ No newline at end of file diff --git a/log.py b/log.py index ef7427da..5569a0ac 100644 --- a/log.py +++ b/log.py @@ -1,3 +1,18 @@ +# --- +# jupyter: +# jupytext: +# formats: ipynb,py:light +# text_representation: +# extension: .py +# format_name: light +# format_version: '1.5' +# jupytext_version: 1.16.4 +# kernelspec: +# display_name: Python 3 +# language: python +# name: python3 +# --- + """Лог уроков.""" # 30/12 diff --git a/pyproject.toml b/pyproject.toml deleted file mode 100644 index 94f5ffc6..00000000 --- a/pyproject.toml +++ /dev/null @@ -1,4 +0,0 @@ -[tool.jupytext] -formats = "ipynb,py:light" -cell_metadata_filter = "-all" -notebook_metadata_filter = "-all" diff --git a/python/commits.ipynb b/python/commits.ipynb new file mode 100644 index 00000000..7bb99d1b --- /dev/null +++ b/python/commits.ipynb @@ -0,0 +1,83 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "911702c0", + "metadata": {}, + "outputs": [], + "source": [ + "\"\"\"Коммиты.\"\"\"" + ] + }, + { + "cell_type": "markdown", + "id": "71ed3a41", + "metadata": {}, + "source": [ + "1. Опишите своими словами назначение каждого из этих типов коммитов:\n", + " feat, fix, docs, style, refactor, test, build, ci, perf, chore.\n", + "\n", + "Ответ:\n", + "\n", + "feat - Добавление новой функциональности (новая фича, новый модуль, новый API).\n", + "fix - Исправление ошибки/багa в существующем функционале.\n", + "docs - Изменения только в документации (README, Wiki, комментарии и т.п.).\n", + "style - Правки внешнего вида кода без изменения логики (форматирование, отступы, кавычки, точки с запятой).\n", + "refactor - Переписывание/улучшение структуры кода без изменения поведения (упрощение, выделение функций, улучшение читаемости).\n", + "test - Добавление или изменение тестов (unit, integration и т.д.), без изменения основного кода.\n", + "build - Изменения, влияющие на сборку проекта или зависимости (webpack, vite, gradle, package.json, обновление библиотек).\n", + "ci - Настройка/изменения в системах непрерывной интеграции (GitHub Actions, GitLab CI, Jenkins и т.п.).\n", + "perf - Оптимизация производительности без изменения функционала (ускорение алгоритма, уменьшение потребления памяти).\n", + "chore - Служебные, рутинные изменения, не затрагивающие код продукта (обновление конфигов, задач, метаданных, скриптов разработчика).\n", + "\n", + "2. Представьте, что вы исправили баг в функции, которая некорректно округляет числа. Сделайте фиктивный коммит и напишите для него сообщение в соответствии с Conventional Commits (используя тип fix).\n", + "\n", + "Ответ:\n", + "\n", + "git commit -m \"fix: financial rounding\"\n", + "\n", + "3. Добавление новой функциональности:\n", + " Допустим, вы реализовали новую функцию generateReport в проекте. Сделайте фиктивный коммит с типом feat, отражающий добавление этой функциональности\n", + "\n", + "Ответ:\n", + "\n", + "git commit -m \"feat: add function generateReport\"\n", + "\n", + "4. Модификация формата кода или стилей:\n", + " Представьте, что вы поправили отступы и форматирование во всём проекте, не меняя логики кода. Сделайте фиктивный коммит с типом style\n", + "\n", + "Ответ:\n", + "\n", + "git commit -m \"style: replace style errors\"\n", + "\n", + "5. Документация и тестирование:\n", + "\n", + "Сделайте фиктивный коммит с типом docs, добавляющий или улучшающий документацию для вашей новой функции.\n", + "\n", + "Ответ:\n", + "\n", + "git commit -m \"docs: add new article in wiki\"\n", + "\n", + "Сделайте фиктивный коммит с типом test, добавляющий тесты для этой же функции.\n", + "\n", + "Ответ:\n", + "\n", + "git commit -m \"test: add mock tests\"\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "name": "python", + "version": "3.13.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/python/commits.py b/python/commits.py new file mode 100644 index 00000000..2c909c93 --- /dev/null +++ b/python/commits.py @@ -0,0 +1,67 @@ +# --- +# jupyter: +# jupytext: +# formats: ipynb,py:light +# text_representation: +# extension: .py +# format_name: light +# format_version: '1.5' +# jupytext_version: 1.16.4 +# kernelspec: +# display_name: Python 3 +# language: python +# name: python3 +# --- + +"""Коммиты.""" + +# 1. Опишите своими словами назначение каждого из этих типов коммитов: +# feat, fix, docs, style, refactor, test, build, ci, perf, chore. +# +# Ответ: +# +# feat - Добавление новой функциональности (новая фича, новый модуль, новый API). +# fix - Исправление ошибки/багa в существующем функционале. +# docs - Изменения только в документации (README, Wiki, комментарии и т.п.). +# style - Правки внешнего вида кода без изменения логики (форматирование, отступы, кавычки, точки с запятой). +# refactor - Переписывание/улучшение структуры кода без изменения поведения (упрощение, выделение функций, улучшение читаемости). +# test - Добавление или изменение тестов (unit, integration и т.д.), без изменения основного кода. +# build - Изменения, влияющие на сборку проекта или зависимости (webpack, vite, gradle, package.json, обновление библиотек). +# ci - Настройка/изменения в системах непрерывной интеграции (GitHub Actions, GitLab CI, Jenkins и т.п.). +# perf - Оптимизация производительности без изменения функционала (ускорение алгоритма, уменьшение потребления памяти). +# chore - Служебные, рутинные изменения, не затрагивающие код продукта (обновление конфигов, задач, метаданных, скриптов разработчика). +# +# 2. Представьте, что вы исправили баг в функции, которая некорректно округляет числа. Сделайте фиктивный коммит и напишите для него сообщение в соответствии с Conventional Commits (используя тип fix). +# +# Ответ: +# +# git commit -m "fix: financial rounding" +# +# 3. Добавление новой функциональности: +# Допустим, вы реализовали новую функцию generateReport в проекте. Сделайте фиктивный коммит с типом feat, отражающий добавление этой функциональности +# +# Ответ: +# +# git commit -m "feat: add function generateReport" +# +# 4. Модификация формата кода или стилей: +# Представьте, что вы поправили отступы и форматирование во всём проекте, не меняя логики кода. Сделайте фиктивный коммит с типом style +# +# Ответ: +# +# git commit -m "style: replace style errors" +# +# 5. Документация и тестирование: +# +# Сделайте фиктивный коммит с типом docs, добавляющий или улучшающий документацию для вашей новой функции. +# +# Ответ: +# +# git commit -m "docs: add new article in wiki" +# +# Сделайте фиктивный коммит с типом test, добавляющий тесты для этой же функции. +# +# Ответ: +# +# git commit -m "test: add mock tests" +# diff --git a/python/cpython.py b/python/cpython.py index d30a4ef7..bde980ef 100644 --- a/python/cpython.py +++ b/python/cpython.py @@ -1,3 +1,14 @@ +# --- +# jupyter: +# jupytext: +# formats: ipynb,py:light +# text_representation: +# extension: .py +# format_name: light +# format_version: '1.5' +# jupytext_version: 1.16.4 +# --- + """Квиз и практика по пайтон.""" # 1. Что такое CPython и чем он отличается от Python? diff --git a/python/venv.ipynb b/python/venv.ipynb index 7cb68bd3..e2d68b48 100644 --- a/python/venv.ipynb +++ b/python/venv.ipynb @@ -84,7 +84,7 @@ "1. Активируйте окружение: `conda activate env_name` (или `source activate env_name` на Linux/macOS)\n", "2. Используйте conda: `conda install имя_пакета` или pip: `pip install имя_пакета`\n", "\n", - "5. Что делают эти команды?\n", + "3. Что делают эти команды?\n", " pip freeze > requirements.txt\n", " conda env export > environment.yml\n", "\n", @@ -125,12 +125,11 @@ "Обычно в conda, так как это уже готовая сборка под DS\n", "дата сайнинисты используют обычно conda из-за того, что она специально настроена и имеет нужные пакеты для работы с DS\n", "\n", - "\n", "9. вставьте скрин где будет видно, Выбор интерпретатора Python (conda) в VS Code/cursor\n", "\n", "Ответ: ![image-4.png](attachment:image-4.png)\n", "\n", - "10. добавьте в .gitignore папку SENATOROV \n", + "10. добавьте в .gitignore папку SENATOROV\n", "\n", "Ответ: Добавил\n", "\n", diff --git a/python/venv.py b/python/venv.py index 5128b71d..d735f3c0 100644 --- a/python/venv.py +++ b/python/venv.py @@ -1,3 +1,18 @@ +# --- +# jupyter: +# jupytext: +# formats: ipynb,py:light +# text_representation: +# extension: .py +# format_name: light +# format_version: '1.5' +# jupytext_version: 1.16.4 +# kernelspec: +# display_name: base +# language: python +# name: python3 +# --- + """[TASK] Виртуальное окружение.""" # 1. Что делает команда python -m venv venv? @@ -55,7 +70,7 @@ # 1. Активируйте окружение: `conda activate env_name` (или `source activate env_name` на Linux/macOS) # 2. Используйте conda: `conda install имя_пакета` или pip: `pip install имя_пакета` # -# 5. Что делают эти команды? +# 3. Что делают эти команды? # pip freeze > requirements.txt # conda env export > environment.yml # @@ -96,7 +111,6 @@ # Обычно в conda, так как это уже готовая сборка под DS # дата сайнинисты используют обычно conda из-за того, что она специально настроена и имеет нужные пакеты для работы с DS # -# # 9. вставьте скрин где будет видно, Выбор интерпретатора Python (conda) в VS Code/cursor # # Ответ: ![image-4.png](attachment:image-4.png)