|
| 1 | +# Python Path |
| 2 | + |
| 3 | +[](https://github.com/gon7187/python-path/actions/workflows/ci.yml) |
| 4 | +[](LICENSE) |
| 5 | + |
| 6 | +> Русскоязычный тренажёр Python в духе Duolingo: короткая теория, проверяемая практика и плавный путь от первого `print()` до собственных проектов. |
| 7 | +
|
| 8 | +## Зачем этот проект |
| 9 | + |
| 10 | +Python Path делает обучение практичным и последовательным. Ученик проходит материал маленькими шагами, получает мгновенную обратную связь по ответам и коду, возвращается к ошибочным заданиям и видит свой прогресс в XP, звёздах и серии занятий. |
| 11 | + |
| 12 | +| | Сейчас в курсе | |
| 13 | +| --- | --- | |
| 14 | +| 📚 Программа | **31 раздел · 120 уроков · 360 заданий** | |
| 15 | +| 🧠 Практика | Выбор ответа, короткий ввод и исполняемый Python-код | |
| 16 | +| 🏆 Мотивация | XP, звёзды, стрик, достижения, повторение ошибок | |
| 17 | +| 📱 Интерфейс | Адаптивный, без фронтенд-сборки | |
| 18 | +| ⚙️ Технологии | FastAPI · SQLite · vanilla JavaScript · uv | |
| 19 | + |
| 20 | +## Быстрый старт |
| 21 | + |
| 22 | +Требуются Python 3.11+ и [uv](https://docs.astral.sh/uv/). |
| 23 | + |
| 24 | +```powershell |
| 25 | +git clone https://github.com/gon7187/python-path.git |
| 26 | +cd python-path |
| 27 | +uv sync --extra dev |
| 28 | +uv run uvicorn app.main:app --reload |
| 29 | +``` |
| 30 | + |
| 31 | +Откройте [http://127.0.0.1:8000](http://127.0.0.1:8000). Прогресс сохраняется локально в `python_path.db`, который исключён из Git. |
| 32 | + |
| 33 | +Чтобы открыть приложение с телефона в той же Wi-Fi-сети, запустите сервер так: |
| 34 | + |
| 35 | +```powershell |
| 36 | +uv run uvicorn app.main:app --host 0.0.0.0 --port 8000 |
| 37 | +``` |
| 38 | + |
| 39 | +## Программа курса |
| 40 | + |
| 41 | +Курс следует от базового синтаксиса к реальным инструментам разработки: |
| 42 | + |
| 43 | +1. Первые программы, типы, условия, циклы, функции и коллекции. |
| 44 | +2. Строки, модули, файлы, JSON/CSV, исключения и ООП. |
| 45 | +3. Типы, стандартная библиотека, регулярные выражения, тесты и Git. |
| 46 | +4. CLI, окружения, HTTP/API, SQL, параллельность и async. |
| 47 | +5. Четыре выпускных мини-проекта: задачи, заметки, API-клиент и релиз приложения. |
| 48 | + |
| 49 | +Полная последовательность из 31 раздела — в [карте курса](docs/CURRICULUM.md). |
| 50 | + |
| 51 | +## Возможности |
| 52 | + |
| 53 | +- Каждый урок содержит три карточки теории и три задания. |
| 54 | +- Следующий урок открывается после успешного прохождения предыдущего. |
| 55 | +- После каждого раздела открывается контрольная точка; для зачёта требуется 70% правильных ответов. |
| 56 | +- Режим практики отдаёт сначала задания, в которых ученик ошибался. |
| 57 | +- Код проверяется в изолированном Python-процессе с AST-фильтром и двухсекундным лимитом. |
| 58 | +- Один пользователь, локальный SQLite: можно заниматься без регистрации и облака. |
| 59 | + |
| 60 | +## Разработка и проверки |
| 61 | + |
| 62 | +```powershell |
| 63 | +uv run ruff check app tests |
| 64 | +uv run ruff format --check app tests |
| 65 | +uv run pyright app tests |
| 66 | +uv run pytest -q |
| 67 | +``` |
| 68 | + |
| 69 | +В репозитории есть GitHub Actions, которые выполняют эти проверки на каждом push и pull request. |
| 70 | + |
| 71 | +## Структура |
| 72 | + |
| 73 | +```text |
| 74 | +app/ |
| 75 | + main.py # FastAPI-приложение и JSON API |
| 76 | + content.py # базовые уроки и объединение программы |
| 77 | + extended_curriculum.py # 108 уроков расширенной части |
| 78 | + evaluator.py # проверка ответов и учебного кода |
| 79 | + db.py # SQLite-прогресс |
| 80 | + static/ # адаптивный интерфейс |
| 81 | +tests/ # unit- и API-тесты |
| 82 | +docs/ # карта курса и архитектурные решения |
| 83 | +``` |
| 84 | + |
| 85 | +Подробнее о границах компонентов — в [архитектуре](docs/ARCHITECTURE.md). Как развивать проект — в [CONTRIBUTING.md](CONTRIBUTING.md). |
| 86 | + |
| 87 | +## Безопасность учебного раннера |
| 88 | + |
| 89 | +Встроенный редактор рассчитан на короткие учебные задачи: запрещены импорты и системные операции, решение запускается отдельным процессом и останавливается по таймауту. Это удобная защита для локального тренажёра, но **не** полноценный sandbox для публичного многоарендного сервиса. Перед публикацией в интернете нужен отдельный контейнерный раннер с лимитами CPU, памяти и сети. Детали — в [SECURITY.md](SECURITY.md). |
| 90 | + |
| 91 | +## Лицензия |
| 92 | + |
| 93 | +Распространяется по лицензии [MIT](LICENSE): проектом можно пользоваться, изменять его и распространять с сохранением текста лицензии. |
0 commit comments