{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Повторяем пройденное"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 1. Кто ошибся?\n",
    "\n",
    "Студенты Иванов, Петров и Сидоров пытались запрограммировать вычисление по формуле\n",
    "$$\n",
    "y = \\frac{1}{2x}\n",
    "$$\n",
    "Вот что у них получилось:  \n",
    "Иванов: \n",
    "`y = 1/2*x`  \n",
    "Петров:\n",
    "`y = 1/(2*x)`  \n",
    "Сидоров:\n",
    "`y = 1/2/x`  \n",
    "\n",
    "Кто ошибся? Кто справился?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1.0 0.25 0.25\n"
     ]
    }
   ],
   "source": [
    "# Проверяем:\n",
    "x = 2.0\n",
    "print(1/2*x, 1/(2*x), 1/2/x)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 2. Что выведет этот код?\n",
    "```python\n",
    "x = 5\n",
    "print(1<x<6)\n",
    "```\n",
    " **A**. `True`  \n",
    " **B**. `False`  \n",
    " **C**. `Ошибка`  \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "True\n"
     ]
    }
   ],
   "source": [
    "# Проверяем:\n",
    "x = 5\n",
    "print(1<x<6)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 3. Что выведет этот код?\n",
    "```python\n",
    "x = 5\n",
    "print(1<x>4)\n",
    "```\n",
    " **A**. `True`  \n",
    " **B**. `False`  \n",
    " **C**. `Ошибка`  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "True\n"
     ]
    }
   ],
   "source": [
    "# Проверяем:\n",
    "x = 5\n",
    "print(1<x>4)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 4. Что выведет этот код?\n",
    "```python\n",
    "print(1<5 and 1/0>5)\n",
    "```\n",
    " **A**. `True`  \n",
    " **B**. `False`  \n",
    " **C**. `Ошибка` "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "ename": "ZeroDivisionError",
     "evalue": "division by zero",
     "output_type": "error",
     "traceback": [
      "\u001b[31m---------------------------------------------------------------------------\u001b[39m",
      "\u001b[31mZeroDivisionError\u001b[39m                         Traceback (most recent call last)",
      "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[4]\u001b[39m\u001b[32m, line 2\u001b[39m\n\u001b[32m      1\u001b[39m \u001b[38;5;66;03m# Проверяем:\u001b[39;00m\n\u001b[32m----> \u001b[39m\u001b[32m2\u001b[39m \u001b[38;5;28mprint\u001b[39m(\u001b[32m1\u001b[39m<\u001b[32m5\u001b[39m \u001b[38;5;129;01mand\u001b[39;00m \u001b[32;43m1\u001b[39;49m\u001b[43m/\u001b[49m\u001b[32;43m0\u001b[39;49m>\u001b[32m5\u001b[39m)\n",
      "\u001b[31mZeroDivisionError\u001b[39m: division by zero"
     ]
    }
   ],
   "source": [
    "# Проверяем:\n",
    "print(1<5 and 1/0>5)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 5. Что выведет этот код?\n",
    "```python\n",
    "print(1<5 or 1/0>5)\n",
    "```\n",
    " **A**. `True`  \n",
    " **B**. `False`  \n",
    " **C**. `Ошибка` "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "True\n"
     ]
    }
   ],
   "source": [
    "# Проверяем:\n",
    "print(1<5 or 1/0>5)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 6. Что выведет этот код?\n",
    "```python\n",
    "print(1<5 and 'hello')\n",
    "```\n",
    " **A**. `True`  \n",
    " **B**. `False`  \n",
    " **D**. `hello`   \n",
    " **D**. `Ошибка` "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "hello\n"
     ]
    }
   ],
   "source": [
    "# Проверяем:\n",
    "print(1<5 and 'hello')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<hr>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<table align=right>\n",
    "    <tr>\n",
    "        <td align=center>\n",
    "            <font size=5><b>Программирование $-$ 2026.</b></font> \n",
    "        </td>\n",
    "        <td align=right>\n",
    "<img src=\"logoMM.png\" align=right width=120>\n",
    "        </td>\n",
    "    </tr>\n",
    "    </table>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Условный оператор\n",
    "\n",
    "До сих пор написанные нами программы имели **линейную структуру**:  \n",
    "операторы выполнялись последовательно, один за другим.\n",
    "\n",
    "Вспомним, например, задачу     \n",
    "**Begin14**. Дана длина $L$ окружности. Найти ее радиус $R$ и площадь $S$ круга, ограниченного этой окружностью, учитывая, что $L = 2πR$,    $S = πR^2$. В качестве значения $π$ использовать 3.14.\n",
    "\n",
    "<img src=\"lin_alg.png\" width=120>\n",
    "\n",
    "Но жизнь, к сожалению, как правило, не такая линейная. И все время подсовывает задачи выбора:\n",
    "\n",
    "<img src=\"vityaz-na-rasputye.jpg\" width=300>\n",
    "\n",
    "\n",
    "**Условный оператор** `if-elif-else` (его иногда называют оператором ветвления)  $-$ это основной инструмент выбора в Python. \n",
    "Он позволяет определить, какое действие следует выполнить программе в зависимости от значения переменных в момент проверки условия.\n",
    "\n",
    "**Вариант 1:**\n",
    "\n",
    "```python\n",
    "if a>0:\n",
    "˽˽˽˽print('число положительно')\n",
    "    b = a**0.5\n",
    "    print('квадратный корень =', b)\n",
    "```    \n",
    "Обратите внимание на двоеточие и пробелы!\n",
    "\n",
    "**Вариант 2:**\n",
    "\n",
    "```python\n",
    "if a>0:\n",
    "    print('число положительно')\n",
    "    b = a**0.5\n",
    "    print('квадратный корень =', b)\n",
    "else:\n",
    "    print('число отрицательно')\n",
    "    print('корень извлечь не удается')\n",
    "```    \n",
    "\n",
    "**Вариант 3:**\n",
    "\n",
    "```python\n",
    "if a>0:\n",
    "    print('число положительно')\n",
    "    b = a**0.5\n",
    "    print('квадратный корень =', b)\n",
    "elif a==0:\n",
    "    print('число равно нулю')\n",
    "    print('квадратный корень =', 0)\n",
    "else:\n",
    "    print('число отрицательно')\n",
    "    print('корень извлечь не удается')\n",
    "```    \n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdin",
     "output_type": "stream",
     "text": [
      "x:  -345\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "|x| = 345\n"
     ]
    }
   ],
   "source": [
    "# в качестве примера посмотрите на программу, вычисляющую модуль числа:\n",
    "x = int(input(\"x: \"))\n",
    "if x>=0:\n",
    "    print('|x| =', x)\n",
    "else:    \n",
    "    print('|x| =', -x)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Переходим к решению задач"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Знак числа**. Функция ${\\rm sign}(x)$ (знак числа) определена так: \n",
    "$$\n",
    "\\left\\{\n",
    "\\begin{array}{ll}\n",
    "{\\rm sign}(x) = 1,& если \\ x > 0, \\\\\n",
    "{\\rm sign}(x) = -1,& если \\ x < 0, \\\\\n",
    "{\\rm sign}(x) = 0,& если \\ x = 0. \\\\\n",
    "\\end{array}\n",
    "\\right.\n",
    "$$\n",
    "Для данного числа $x$ выведите значение ${\\rm sign}(x)$.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdin",
     "output_type": "stream",
     "text": [
      "x:  -45\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-1\n"
     ]
    }
   ],
   "source": [
    "# Решение\n",
    "x = float(input(\"x: \"))\n",
    "if x>0:\n",
    "    sign = 1\n",
    "elif x==0:\n",
    "    sign = 0\n",
    "else:\n",
    "    sign = -1\n",
    "print(sign)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**If9**. Даны две переменные вещественного типа: $a$, $b$. Перераспределить значения данных переменных так, чтобы в $a$ оказалось меньшее из значений, а в $b$ — большее. Вывести новые значения переменных $a$ и $b$.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdin",
     "output_type": "stream",
     "text": [
      "a:  8\n",
      "b:  4\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "4.0 8.0\n",
      "4.0 8.0\n"
     ]
    }
   ],
   "source": [
    "# Решение\n",
    "a = float(input(\"a: \"))\n",
    "b = float(input(\"b: \"))\n",
    "if a>b:\n",
    "    a, b = b,a \n",
    "print(a,b)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**If4**. Даны три целых числа. Найти количество положительных чисел в исходном наборе. \n",
    "\n",
    "*Помните, что у любой задачи есть как минимум три решения? 😁*"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdin",
     "output_type": "stream",
     "text": [
      "a:  7\n",
      "b:  -5\n",
      "c:  0\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1\n",
      "1\n",
      "1\n"
     ]
    }
   ],
   "source": [
    "a = int(input(\"a: \"))\n",
    "b = int(input(\"b: \"))\n",
    "c = int(input(\"c: \"))\n",
    "\n",
    "# Решение 1\n",
    "if a>0 and b>0 and c>0:\n",
    "    print(3)\n",
    "elif a>0 and b>0 or a>0 and c>0  or b>0 and c>0:\n",
    "    print(2)\n",
    "elif a>0 or b>0 or c>0 :\n",
    "    print(1)\n",
    "else:\n",
    "    print(0)\n",
    "# Решение 2\n",
    "k = 0\n",
    "if a>0:\n",
    "    k += 1 #  k = k+1\n",
    "if b>0:\n",
    "    k += 1\n",
    "if c>0:\n",
    "    k +=1\n",
    "print(k)    \n",
    "# Решение 3\n",
    "print(int(a>0) + int(b>0) + int(c>0))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**If13**. Даны три числа. Найти среднее из них (т. е. число, расположенное между наименьшим и наибольшим)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdin",
     "output_type": "stream",
     "text": [
      "a:  2\n",
      "b:  8\n",
      "c:  0\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2.0\n",
      "2.0\n"
     ]
    }
   ],
   "source": [
    "a = float(input(\"a: \"))\n",
    "b = float(input(\"b: \"))\n",
    "c = float(input(\"c: \"))\n",
    "# Решение 1\n",
    "if b<a<c or c<a<b:\n",
    "    print(a)\n",
    "elif a<b<c or c<b<a:\n",
    "    print(b)\n",
    "else:\n",
    "    print(c)\n",
    "\n",
    "# Решение 2\n",
    "print(a+b+c - min(a,b,c) - max(a,b,c))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**If18**. Даны три целых числа, одно из которых отлично от двух других, равных между собой. Определить порядковый номер числа, отличного от остальных. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdin",
     "output_type": "stream",
     "text": [
      "a:  5\n",
      "b:  5\n",
      "c:  8\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3\n"
     ]
    }
   ],
   "source": [
    "# Решение\n",
    "a = int(input(\"a: \"))\n",
    "b = int(input(\"b: \"))\n",
    "c = int(input(\"c: \"))\n",
    "if a==b:\n",
    "    print(3)\n",
    "elif a==c:\n",
    "    print(2)\n",
    "else:\n",
    "    print(1)\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**If22**. Даны координаты точки, не лежащей на координатных осях $OX$ и $OY$. Определить номер координатной четверти, в которой находится данная точка."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdin",
     "output_type": "stream",
     "text": [
      "x:  -4\n",
      "y:  3\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2\n",
      "2\n"
     ]
    }
   ],
   "source": [
    "\n",
    "x = float(input(\"x: \"))\n",
    "y = float(input(\"y: \"))\n",
    "# Решение1\n",
    "if x>0 and y>0:\n",
    "    print(1)\n",
    "elif x<0 and y>0 :\n",
    "    print(2)\n",
    "elif x<0 and y<0:\n",
    "    print(3)\n",
    "else:\n",
    "    print(4)\n",
    "    \n",
    "# Решение 2 ?\n",
    "if x>0:\n",
    "    if y>0:\n",
    "        print(1)\n",
    "    else:\n",
    "        print(4)\n",
    "else:\n",
    "    if y>0:\n",
    "        print(2)\n",
    "    else:\n",
    "        print(3)\n",
    "    \n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Квадратное уравнение**. Решить уравнение \n",
    "$$ax^2 + bx + c = 0,$$ \n",
    "заданное коэффициентами $a$, $b$, $c$ ($a\\neq0$)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Решение\n",
    "a = float(input(\"a: \"))\n",
    "b = float(input(\"b: \"))\n",
    "c = float(input(\"c: \"))\n",
    "d = b*b - 4*a*c\n",
    "if d>0:\n",
    "    x1 = (-b-d**0.5)/(2*a)\n",
    "    x2 = (-b+d**0.5)/(2*a)\n",
    "    print(x1, x2)\n",
    "elif d==0:\n",
    "    print(-b/(2*a))\n",
    "else:\n",
    "    print('корней нет')\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\"cows.jpg\" align=right width=250 >\n",
    "\n",
    "**Коровы**. Задано $n$ $-$ число коров, пасущихся на лугу. Продолжите фразу “На лугу пасется...” одним из возможных продолжений: “$n$ коров”, “$n$ корова”, “$n$ коровы”, правильно склоняя слово “корова”. Например,\n",
    "- На лугу пасется 1 корова.\n",
    "- На лугу пасется 2 коровы.\n",
    "- На лугу пасется 50 коров."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdin",
     "output_type": "stream",
     "text": [
      "Сколько коров (<100) пасется на лугу?  10\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "На лугу пасется 10 коров.\n"
     ]
    }
   ],
   "source": [
    "# Решение\n",
    "n = int(input(\"Сколько коров (<100) пасется на лугу? \"))\n",
    "print(f\"На лугу пасется {n} \", end=\"\")\n",
    "c = n%10\n",
    "if 10<n<15 or c>4 or c==0:\n",
    "    print('коров.')\n",
    "elif c==1:\n",
    "    print('корова.')\n",
    "else:\n",
    "    print('коровы.')\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Задача Хоттабыча**. Игрок команды «Зубило», за которую болеет Волька,  бьет по воротам команды «Шайба», за которую болеет Хоттабыч. \n",
    "\n",
    "<img src=\"goal.jpg\" align=right width=250>\n",
    "\n",
    "Коварный волшебник, зная, координату пересечения траектории полета мяча и лицевой линии, $x$, передвигает штанги ворот (меняет координаты $p1$, $p2$). Но Волька, слегка овладевший волшебными навыками, подправляет траекторию мяча и меняет координату $x$ по правилу: если мяч слева от ворот, то он отправляется в левую штангу (а потом в ворота), если мяч справа от ворот, то он отправляется в правую штангу, а если мяч летит в ворота, то его траектория не меняется.  \n",
    "\n",
    "По заданным числам $x$, $p1$, $p2$ определите новое значение координаты $x$ после «колдовства» Вольки.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdin",
     "output_type": "stream",
     "text": [
      "x:  10\n",
      "p1:  5\n",
      "p2:  8\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "8.0\n",
      "8.0\n"
     ]
    }
   ],
   "source": [
    "# Решение\n",
    "x = float(input(\"x: \"))\n",
    "xx = x\n",
    "p1 = float(input(\"p1: \"))\n",
    "p2 = float(input(\"p2: \"))\n",
    "if x<p1:\n",
    "    x = p1\n",
    "elif x>p2:\n",
    "    x = p2\n",
    "print(x)\n",
    "# решение 2 без if?\n",
    "print(min(max(xx, p1),p2))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<font color=\"0000FF\">\n",
    "<h3> Для самостоятельного решения </h3>\n",
    "    \n",
    "**Сколько совпадает чисел?** Даны три целых числа. Определите, сколько среди них совпадающих. Программа должна вывести одно из чисел: 3 (если все совпадают), 2 (если два совпадает) или 0 (если все числа различны). \n",
    "\n",
    "*Попытайтесь придумать два различных решения этой задачи!*"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "a=int(input(\"a: \"))\n",
    "b=int(input(\"b: \"))\n",
    "c=int(input(\"c: \"))\n",
    "# Решение 1\n",
    "\n",
    "\n",
    "\n",
    "# Решение 2\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\"pool.jpg\" align=\"right\" width=400>\n",
    "\n",
    "<font color=\"0000FF\">\n",
    "<h3> Для самостоятельного решения </h3>\n",
    "\n",
    "**Яша плавает в бассейне**. Яша плавал в бассейне размером $n \\times m$ метров и устал. В этот момент он обнаружил, что находится на расстоянии $x$ метров от одного из длинных бортиков (не обязательно от ближайшего) и $y$ метров от одного из коротких бортиков. Какое минимальное расстояние должен проплыть Яша, чтобы выбраться из бассейна на бортик? \n",
    "\n",
    "Программа получает на вход числа $n$, $m$, $x$, $y$. Программа должна вывести число метров, которое нужно проплыть Яше до бортика. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Решение\n",
    "n = int(input(\"n:\"))\n",
    "m = int(input(\"m:\"))\n",
    "x = int(input(\"x:\"))\n",
    "y = int(input(\"y:\"))\n",
    "\n",
    "\n"
   ]
  }
 ],
 "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.11.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
