{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "6d94f0d8",
   "metadata": {},
   "source": [
    "## Отработка заданий с циклами (тема \"замена цикла `while` циклом `for`\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dbdf8add",
   "metadata": {},
   "source": [
    "**Переход от цикла `while` с шагом $h \\ne 1$ к циклу `for` с шагом $1$ или $-1$**: $|h|\\cdot i - (|h|-1)\\cdot i_\\text{нач}$\n",
    "\n",
    "**Алгоритм:**\n",
    "\n",
    "* Посчитать $k$ --- число шагов цикла `while`:    \n",
    "$$\n",
    "  k = \\left[\\frac{i_\\text{кон}-i_\\text{нач}}{h}\\right]+1.\n",
    "$$\n",
    "\n",
    "* Поменять заголовок цикла:  \n",
    "  - `range(i_nach, i_nach + k, 1)`, если  $i_\\text{нач}<i_\\text{кон}$\n",
    "  - `range(i_nach, i_nach - k, -1)`, если  $i_\\text{нач}>i_\\text{кон}$\n",
    "\n",
    "* в формулу для вычисления $y$ вместо $i$ подставить: $|h|\\cdot i - (|h|-1)\\cdot i_\\text{нач}$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "fc5bbd9b",
   "metadata": {},
   "outputs": [],
   "source": [
    "#  Пример 1 условия задания\n",
    "\n",
    "y = 2\n",
    "i = 17\n",
    "while i >= 6:\n",
    "    y = y - i\n",
    "    i = i - 2\n",
    "print(y)\n",
    "\n",
    "print('---> for (используйте шаблон)')\n",
    "'''\n",
    "y = 2\n",
    "for i in range(________, ________, -1):\n",
    "    y =\n",
    "print(y)\n",
    "'''\n",
    "print()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "a5f3ec1a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-70\n",
      "---> for (используйте шаблон)\n",
      "-70\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# Решение. Обращаем внимание на строки с комментариями \"!!!\"\"\n",
    "\n",
    "y = 2  \n",
    "i = 17         # !!!  i_нач = 17\n",
    "while i >= 6:  # !!!  i_кон = 6\n",
    "    y = y - i\n",
    "    i = i - 2  # !!!  h = -2\n",
    "print(y)\n",
    "\n",
    "''' \n",
    "Далее описан процесс получения k и общей формулы для 'y'. \n",
    "В решениях приводить такие подробности не нужно.\n",
    "\n",
    "-----------------------\n",
    "По формуле для k вычисляем количество шагов цикла\n",
    "k = [ (i_кон - i_нач) // h ] + 1 = [ (6 - 17) // (-2) ] + 1  = 6 \n",
    "\n",
    "Вместо формулы y = y - i записываем\n",
    "y = y - (2*i - 17)      (*)\n",
    "# Здесь i заменили на |h|*i - (|h|-1)*i_нач\n",
    "'''\n",
    "\n",
    "print('--->') \n",
    "# строки, отмеченные !!! -- это то, что должно присутствовать в ответе.\n",
    "# Комментарии для понимания. В ответе их можно не писать.\n",
    "\n",
    "y = 2  # !!! \n",
    "#        range(i_nach, i_nach-k, -1)  <-- заголовок \n",
    "for i in range(17, 17-6, -1):   # !!!  i_нач = 17;  k = 6\n",
    "    y = y - (2*i - 17)          # !!! см. формулу (*) выше\n",
    "print(y)  # !!! ответ должен совпасть с ответом при использовании цикла while\n",
    "\n",
    "print()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "22ecb331",
   "metadata": {},
   "source": [
    "----\n",
    "# Задания для самостоятельной работы\n",
    "----\n",
    "\n",
    "**work.1.** Дан фрагмент программы для получения значений $y$. Переписать программу, заменив цикл\n",
    "`while` циклом `for`. Дополнительные переменные не использовать."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "f4514609",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-33\n",
      "---> for (используйте шаблон)\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# самостоятельно\n",
    "y = 2\n",
    "i = 11\n",
    "while i >= 3:\n",
    "    y = y - i\n",
    "    i = i - 2\n",
    "print(y)\n",
    "\n",
    "print('---> for (используйте шаблон)')\n",
    "'''\n",
    "y = 2\n",
    "for i in range(________, ________, -1):\n",
    "    y =\n",
    "print(y)\n",
    "'''\n",
    "print()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "debed888",
   "metadata": {},
   "source": [
    "---\n",
    "\n",
    "**Work.2.** Дан фрагмент программы для получения значений $y$. Переписать программу, заменив цикл\n",
    "`while` циклом `for`. Дополнительные переменные не использовать."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "4ad7a77a",
   "metadata": {},
   "outputs": [],
   "source": [
    "y = 1\n",
    "i = 17\n",
    "while i > 10:  \n",
    "    y = y + i\n",
    "    i = i - 2\n",
    "print(y)\n",
    "\n",
    "\n",
    "print('---> for (используйте шаблон)')\n",
    "'''\n",
    "y = 1\n",
    "for i in range(________, ________, -1):\n",
    "    y =\n",
    "print(y)\n",
    "'''"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e77145e3",
   "metadata": {},
   "outputs": [],
   "source": [
    "y = 1\n",
    "i = 22\n",
    "while i > 10: \n",
    "    y = y + i\n",
    "    i = i - 3\n",
    "print(y)\n",
    "\n",
    "print('---> for (используйте шаблон)')\n",
    "'''\n",
    "y = 1\n",
    "for i in range(________, ________, -1):\n",
    "    y =\n",
    "print(y)\n",
    "'''"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cc0dc59e",
   "metadata": {},
   "source": [
    "---\n",
    "\n",
    "**work.3.** Дан фрагмент программы для получения значений $y$. Переписать программу, заменив цикл\n",
    "`while` циклом `for`. Дополнительные переменные не использовать."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "4cc81f7e",
   "metadata": {},
   "outputs": [],
   "source": [
    "y = 7\n",
    "i = 3\n",
    "while i <= 25: \n",
    "    y = y * (i - 2)\n",
    "    i = i + 5\n",
    "print(y)\n",
    "\n",
    "print('---> for (используйте шаблон)')\n",
    "'''\n",
    "y = 7 \n",
    "for i in range(________, ________):\n",
    "    y =\n",
    "print(y)\n",
    "'''"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "99b46a66",
   "metadata": {},
   "outputs": [],
   "source": [
    "y = -3\n",
    "i = 2\n",
    "while i <= 24: \n",
    "    y = y * (i - 1)\n",
    "    i = i + 4\n",
    "print(y)\n",
    "\n",
    "print('---> for (используйте шаблон)')\n",
    "'''\n",
    "y = -3 \n",
    "for i in range(________, ________):\n",
    "    y =\n",
    "print(y)\n",
    "'''"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "10464165",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "45fec0fa",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "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.9.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
