{
  "format": "rubrick-lesson",
  "formatVersion": 1,
  "exportedAt": "2026-11-06T20:21:10.022Z",
  "source": {
    "lessonId": "00000000-0000-4000-8001-85680d75e2d3",
    "courseId": "00000000-0000-4000-8000-23eeeb4347bd",
    "courseTitle": "От блоков к Python",
    "ordering": 5,
    "updatedAt": "2026-09-27T10:47:13.291568+00:00"
  },
  "lessonTask": null,
  "lessonTaskSchemaVersion": null,
  "lesson": {
    "schemaVersion": 3,
    "id": "python-05-project",
    "courseId": "python",
    "order": 5,
    "title": "Своя программа",
    "summary": "Проект: придумать и написать программу текстом с нуля",
    "duration": 45,
    "mode": "python",
    "attachments": [],
    "sections": [
      {
        "kind": "intro",
        "body": "Проект: придумать и написать программу текстом с нуля\n\n### Чему научишься\n- Сформулировать замысел\n- Написать программу текстом\n- Объяснить её другому человеку\n\n### Новое\n- Сначала замысел словами, потом код\n- Программу пишут кусками и проверяют по ходу, а не целиком в конце\n- Чужой код должен быть понятен без автора",
        "attachments": [],
        "steps": []
      },
      {
        "kind": "task",
        "body": "Придумай, что должен делать твой робот, и напиши это сразу текстом — без блоков. Покажи классу и объясни каждую строку.\n\n### Результат\n- Программа написана текстом и запускается\n- В ней есть переменная, условие или своя команда\n- Ты объяснил каждую строку",
        "attachments": [],
        "steps": [
          {
            "id": "s1",
            "title": "Замысел",
            "body": "Три предложения о том, что делает робот.",
            "attachments": []
          },
          {
            "id": "s2",
            "title": "Каркас",
            "body": "Напиши переменные и свои команды.",
            "attachments": []
          },
          {
            "id": "s3",
            "title": "По кускам",
            "body": "Запускай после каждого добавленного куска.",
            "attachments": []
          },
          {
            "id": "s4",
            "title": "Защита",
            "body": "Покажи классу и объясни каждую строку.",
            "attachments": []
          }
        ],
        "hints": [
          "Не знаешь, с чего начать? Опиши замысел тремя предложениями по-русски и переведи каждое в строку кода."
        ]
      },
      {
        "kind": "assembly",
        "body": "### Понадобится\n- Ноутбук\n- Виртуальный или настоящий робот — по замыслу\n\nПо замыслу. Если нужен настоящий робот — базовая платформа, левое колесо в D, правое в C.",
        "attachments": [],
        "steps": []
      },
      {
        "kind": "connection",
        "body": "",
        "attachments": [],
        "steps": []
      },
      {
        "kind": "example",
        "body": "### Что должно получиться\n- Зависит от замысла: движение проверяется и на виртуальном роботе",
        "attachments": [],
        "steps": [],
        "program": {
          "mode": "python",
          "python": "# Каркас. Замени на свой замысел.\nrobot.configure_drive(wheel_diameter_mm=43.2, track_width_mm=120, left_motor=1, right_motor=2)\n\nшаг = 20\n\ndef поздороваться():\n    robot.face(\"happy\")\n    robot.say(\"Начинаю\")\n\nпоздороваться()\nrobot.forward_cm(шаг)\nrobot.stop()\n"
        }
      },
      {
        "kind": "next",
        "body": "",
        "attachments": [],
        "steps": []
      }
    ],
    "category": "Проект",
    "colour": "#FFF200"
  }
}