{
 "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[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mZeroDivisionError\u001b[0m                         Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-4-eba43abd5820>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m      1\u001b[0m \u001b[1;31m# Проверяем:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m<\u001b[0m\u001b[1;36m5\u001b[0m \u001b[1;32mand\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m/\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m>\u001b[0m\u001b[1;36m5\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[1;31mZeroDivisionError\u001b[0m: 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": 6,
   "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=4>Технология программирования и практикум на ЭВМ</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": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x: -34\n",
      "|x| = 34\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": "stdout",
     "output_type": "stream",
     "text": [
      "x: 0\n",
      "0\n"
     ]
    }
   ],
   "source": [
    "# Решение\n",
    "x = float(input(\"x: \"))\n",
    "if x>0:\n",
    "    sign = 1\n",
    "elif x<0:\n",
    "    sign = -1\n",
    "else:\n",
    "    sign = 0\n",
    "print(sign)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**If9**. Даны две переменные вещественного типа: $a$, $b$. Перераспределить значения данных переменных так, чтобы в $a$ оказалось меньшее из значений, а в $b$ — большее. Вывести новые значения переменных $a$ и $b$.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "a: 1\n",
      "b: 10\n",
      "1.0 10.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": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "a: 5\n",
      "b: 7\n",
      "c: 9\n",
      "3\n",
      "3\n",
      "3\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",
    "    \n",
    "# Решение 2\n",
    "k = 0\n",
    "if a>0:\n",
    "    k += 1\n",
    "if b>0:\n",
    "    k += 1\n",
    "if c>0:\n",
    "    k += 1\n",
    "print(k)    \n",
    "# Решение 3\n",
    "k = int(a>0) + int(b>0) + int(c>0)\n",
    "print(k)\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "int(True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**If13**. Даны три числа. Найти среднее из них (т. е. число, расположенное между наименьшим и наибольшим)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "a: 7\n",
      "b: 1\n",
      "c: 26\n",
      "7.0\n",
      "7.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": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "a: 5\n",
      "b: 7\n",
      "c: 5\n",
      "2\n"
     ]
    }
   ],
   "source": [
    "# Решение\n",
    "a = int(input(\"a: \"))\n",
    "b = int(input(\"b: \"))\n",
    "c = int(input(\"c: \"))\n",
    "if b==c:\n",
    "    print(1)\n",
    "elif a==c:\n",
    "    print(2)\n",
    "else:\n",
    "    print(3)\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**If22**. Даны координаты точки, не лежащей на координатных осях $OX$ и $OY$. Определить номер координатной четверти, в которой находится данная точка."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "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": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Сколько коров (<100) пасется на лугу? 71\n",
      "На лугу пасется 71 корова\n"
     ]
    }
   ],
   "source": [
    "# Решение\n",
    "n = int(input(\"Сколько коров (<100) пасется на лугу? \"))\n",
    "print(f\"На лугу пасется {n} \", end=\"\")\n",
    "k = n%10\n",
    "if k==1 and n!=11:\n",
    "    print('корова')\n",
    "elif 11<=n<=20 or 5<=k<=9 or k==0:\n",
    "    print('коров')\n",
    "else:\n",
    "    print('коровы')"
   ]
  },
  {
   "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": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Решение\n",
    "x = float(input(\"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",
    "\n",
    "# решение 2 без if?\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Сколько совпадает чисел?** Даны три целых числа. Определите, сколько среди них совпадающих. Программа должна вывести одно из чисел: 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",
    "if a==b==c:\n",
    "    print(3)\n",
    "elif a==b or c==b or a==c:\n",
    "    print(2)\n",
    "else:\n",
    "    print(0)\n",
    "\n",
    "\n",
    "# Решение 2\n",
    "k = int(a==b)+int(b==c)+int(a==c)\n",
    "if k==1:\n",
    "    k = 2\n",
    "print(k)    \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",
   "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.8.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
